Insider's Eye
.NET版Java言語「Visual J# .NET」オーバービュー(3)
デジタルアドバンテージ 遠藤孝信
2001/10/16 |
|
Javaプログラムをコンパイル/コンバートしてみる
J#には既存のJavaのソース・コードをMSILにコンパイルするための「J#コンパイラ(jc.exe)」と、JavaのバイトコードによるコンポーネントをMSILに変換するための「Visual J# .NET Binary Converter(jbimp.exe)」がツールとして含まれている。またこれらに伴い、JDK 1.1.4互換のクラス・ライブラリが含まれる。これはVisual J++ 6.0がサポートしていたJDKと同じバージョンだ。これにはMicrosoftが独自に拡張した「J/Direct」や「Java-COM」が組み込まれているが、JNI(Java Native Interface)やRMI(Remote Method Invocation)、アプレットのサポートは含まれていない。
ここではJ2SE(Java 2 Platform, Standard Edition) V 1.3.1に付属している、基本的なコンポーネントのみを使用した簡単なサンプル・プログラムを利用して、J#に付属する各種ツールを試してみた。
ここで用いたサンプル・プログラムは、「CardTest」というコントロールのレイアウトに関するデモ・プログラムだ。
まず参考までに、このサンプルを通常のJavaプログラムとしてコンパイルし、実行してみる。これにはJDKに付属するコンパイラである“javacコマンド”により、ソース・ファイルである「CardTest.java」から、バイトコードである.classファイルを作成する(CardTestの場合には、CardPanel.classとCardTest.classの2つのファイルが出来上がる)。プログラムの実行には“javaコマンド”を使用する。
 |
JDKによるJavaプログラムのコンパイルと実行 |
|
 |
Javaプログラムのコンパイルにはjavacコマンドを使用する。 |
|
 |
このサンプルの場合には、コンパイルにより2つの.classファイル(バイトコード)ができあがる。 |
|
 |
バイトコードの実行にはjavaコマンドを使用する。 |
|
次の画面はjavaコマンドにより実行されたCardTestプログラムだ。
 |
javaコマンドにより実行されたCardTestプログラム |
このプログラムはコントロールのレイアウト機能に関するデモを行う。
|
それでは次に、上でjavacコマンドにより作成した.classファイルを、バイナリ・コンバータであるjbimp.exeによりMSILに変換してみる。
 |
バイナリ・コンバータによるバイトコードからMSILへの変換 |
|
これにより何の問題もなく「CardTest.exe」が生成された。これはMSILなので、実行には.NET Frameworkがインストールされた環境が必要である。MSIL変換後のCradTest.exeを実行したところが次の画面である。当然ながら、アプリケーションの動作はまったく同じだった。唯一異なるのは、ウィンドウのタイトルバーの左隅につく小さなアイコンが、「コーヒー・マーク」ではないところくらいだ。
 |
バイナリ・コンバータにより出力されたexeファイルを実行した画面 |
当然ながらアプリケーションの動作はJavaのバイナリと全く同じ。唯一異なるのはウィンドウのタイトルバーの左隅につく小さなアイコンだ。
|
次にソース・ファイルであるCardTest.javaを、J#コンパイラでコンパイルしてみる。これにより直接、実行ファイルである「cardtest.exe」が出来上がる。実行して表示される画面は、バイナリ・コンバートした上記のものと同じだった。
 |
J#コンパイラによるJavaプログラムのコンパイル |
|
 |
J#コンパイラであるjc.exeに、Javaプログラムのソース・コードであるcardtest.javaを指定してコンパイルする。 |
|
 |
コンパイラにより直接、exeファイルが作成される。 |
|
J#の存在意義は何か?
今回は、発表されたVisual J#をインストールし、簡単なテスト・プログラムの作成とコンパイルを実行してみた。たったこれだけのテストで結論づけることはできないが、.NET Frameworkのプログラミング言語ラインアップとして、Javaが追加されたという以上のものではない。すでに.NETには、Javaを進化させたC#が用意されている。細かな部分を除けば、Javaを理解しているプログラマがC#に転向するのは比較的容易である。読者がJavaプログラマであっても、.NET Framework上で新規にプログラムを開発しようとするなら、C#を使うことにたいして違和感はないはずだ。いまさらJ#が登場したところで、さしてありがたみはないかもしれない。
一方、すでに開発済みのJavaコードを.NET環境に移行しようとする場合はどうだろうか。この場合には、J#で提供される各種ツールが役立つだろう。簡単に移行できるかどうかは、Javaプログラムから使用しているクラス・ライブラリ次第だが、標準的なライブラリを使用して開発されたコンポーネントの移行はそれほど困難ではないだろう。今回はこの点について詳しくご紹介できなかった。機会があればこの点についても掘り下げてみたい。
いったんはJavaと決別したと見えたMicrosoftが、ここに来て自分自身で再度サポートを表明する理由は何だろうか? いまやWebソリューション分野の標準開発言語になったといっても過言ではないJavaは、.NET戦略を進めるうえで、当初の予想を超える障害だったということだろうか? 真偽のほどは不明であるが、プログラマとしてはよけいな詮索はせず、単に.NET Frameworkの対応言語が1つ増えたと認識すればよさそうだ。
Insider.NET 記事ランキング
本日
月間