一般的な質問

MJ の意味は?

MJ は、 Modular Java または Mixin-Layers Java の略です。 飲物の名前ということで、 MixJuice の略でもある、ということにしています。

実行速度は?

原理的には、普通の Java と同じ速度で動くはずです。 MJ の実行時のモデルは Java と完全に同一ですから。 しかし、現在の実装では、実装上の都合により、 byte code 中に本来不要なキャストが残っています。 これが原因で、メソッド呼び出しのコストが 50% くらい増えることがあります。 この「余分なキャスト」は簡単に取り除くことができるので、 将来のバージョンでは、オーバーヘッドはなくなると思います。

コンパイル速度(mjc の速度)が遅いのですが。

1GHz PentiumIII では、 1000 行のソースをコンパイルするのに 5〜15秒ほどかかるようです。

一般に、 java, javac が日本語のエラーメッセージを出すような 環境になっている場合、 java, javac の起動が遅いらしいです。 unsetenv LANG しておきましょう。

Java コンパイラのフェーズを速くするには、 jikes を使うのがお勧めです。

なお、将来的には EPP 2.0 を使って mjc を作り直すので、 mjc の速度は倍以上は速くなると思います。

ラインセンスは?

非営利目的・評価目的ならば無料です。
将来的には、営利目的でも無料にできるかもしれません。

なんでソースファイルの suffix が .mj とかではなく .java なの?

EPP から見れば、 MJ という言語は Java 言語を拡張するための mjc plug-in という 1つの plug-in にすぎないからです。 suffix が .java になっているおかげで、 emacs の設定をまったくいじらなくても、 ソースファイルを java-mode で編集することができます。

普通の Java + Collection plug-in として使いたいのですが。

最新版 EPP には Collection plug-in をライブラリとして入れる予定なので、 EPP をインストールすれば使えます。 ただし、 EPP 1.1 は分割コンパイルを完全にサポートしていないし、 変換速度が遅いので、 あまり実用にはならないと思います。 EPP 2.0 まで待ってください。

Java が業界標準としての地位を築いているので、 Java をちょっと変えただけの言語が普及する余地はないのでは。

これだけ普及している Java 言語を今すぐ置き換えるのは私も不可能だと思います。 社会環境が変化し、 Java 言語に代わる新しいプログラミング言語の出現が 必要とされたときに、 MJ の差分ベースモジュールが新しい言語に 採用されることを望んでいます。

アプリケーションはあるのでしょうか?

とりあえず EPP 2.0 を MJ で書こうと思っています。 MJ は、拡張性の高いアプリケーションの記述に 特に向いていると思います。 例えばメイリングリスト配信ツール、 web サーバー、エディタなどが 考えられます。

実際にこの言語で書くと拡張性の高いアプリケーションが書けたという実績はあるのでしょうか?

MJ 自体では、まだ大きなアプリケーションはありませんが、 MJ と同じ「差分=モジュール」というスタイルを持つプログラミング言語で、 すでに大きなアプリケーションを書いています。 MJ の前身である Ld-2 という言語を用いたもので、 Common Lisp 版 Ld-2 で記述した拡張可能コンパイラと、 Java 版 Ld-2 で記述した EPP1.1 があります。 これらのソースコードは合わせて3万行近くになります。 これらの経験から、「差分=モジュール」というスタイルが 非常に優れていることを実感しています。

Java で書かれた1万行の HTTP server を MJ で書き直しました。 この論文を参照してください。
田中哲、一杉裕志:
「プログラミング言語 MixJuice による HTTP server のモジュール化」
ソフトウエア科学会第18回大会, Sep. 2001. mj-jssst2001.pdf

また、 Mixin Layers のグループも C++ の template を使って 差分を再利用の単位としたアプリケーション構築の有用性を主張しています。

MJ ならではのデザインパターンというものはないのですか?

あります。 MJ で拡張性の高いアプリケーションを記述すると、 いくつかの決まったパターンが違う場所に何度も現れることがあります。 例えば、 if-then-else による条件分岐を別のメソッドに分けることで、 条件分岐節を後から追加できるようにするのもパターンの1つです。

GoF が大量のソースコードを調べてパターンを抽出して整理したように、 MJ のパターンを整理するにはまだ時間がかかります。 まずは、大量のアプリケーションを書かなければなりません。


mj-logo
Last updated: Aug 27 11:47:08 2002