一般的な質問

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