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への変換
  バイナリ・コンバータであるjbimp.exeに、変換する.classファイルを指定する
 

MSILを含むexeファイルが作成される。

  exeファイルであるため、直接実行することができる。

 これにより何の問題もなく「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つ増えたと認識すればよさそうだ。End of Article

 

 INDEX
  Insider's Eye
    .NET版Java言語「Visual J# .NET」オーバービュー(1)
    .NET版Java言語「Visual J# .NET」オーバービュー(2)
  .NET版Java言語「Visual J# .NET」オーバービュー(3)
 
 Insider's Eye


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間