ss plug-in

注意

 ss plug-in は、 MJ1.0 からは使われていません。  以下の説明は、MJ0.1 のためのものです。

概要

MJ には SS (startup-singleton) という名前のクラスがあり、 Java 言語の static field/method の代わりになっています。 しかし、 class SS {...} の中に SS field/method を 書かなければならないのはめんどうです。

そこで、 SS field/method を従来の static field/method のように 気軽に書けるようにするシンタックスシュガーを 提供するのが、この ss plug-in です。 ss plug-in は、最初から標準 plug-in として mjc の処理系に取り込まれています。

ss plug-in は、 SS field/method がそのままではあまりに使いにくいために、 とりあえず実装してみたシンタックスシュガーです。 将来的には、もっといい構文を思い付けば、それに変えます。

フィールド宣言・メソッド宣言の先頭に "ss" と書くことで、 SS field/method を宣言できます。

module の body か、 任意のクラスの body に SS field/method を書くことができます。

module test {
  define class C {
    ss int fff;
    define void foo() { }
    define ss void foo() { }
  }
  ss void main(String[] args){
    original(args);
    System.out.println("hello.");
  }
}

このプログラムは、 ss plug-in によって次のプログラムにマクロ展開されます。

module test {
  define class C {
    define void foo() { }
  }
  class SS {
    int fff;
    define void foo() { }
    void main(String[] args){
      original(args);
      System.out.println("hello.");
    }
  }
}

注意

"ss" は、 "define" と modifier の間に 書く必要があります。( "define" も "ss" も modifier ではありません。) "define" 前に書いたり、 modifier のうしろに書くと、 シンタックスエラーになります。

ss field/method は、あくまで単純なシンタックスシュガーであって、 static scope ルールには従いません。 クラス内部に書かれた ss method は、モジュール内の他のクラスからも 参照することができます。

SS という単純名のクラスが他にあると、動作がおかしくなります。 これは、現在の実装のバグです。

文法

MJTypeDeclaration <original alternatives> SSMemberDeclaration

MJClassBodyDeclaration <original alternatives> SSMemberDeclaration

SSMemberDeclaration MJMarks ss Modifier* Type VariableDecorators MJMarks ss Modifier* Type MJName ( FormalParameterList ) ...


mj-logo
Last updated: Dec 18 12:19:58 2001