特集 J#の真実 Part 2
1.Visual J++ 6.0からの移行とコンパイラの互換性株式会社ピーデー 川俣 晶 |
Visual J++ 6.0からの移行
J#には、Visual J++ 6.0のプロジェクトをそのまま移行できるという機能が含まれている。まずは、そこから試してみた。「りすと亭」の開発ではいろいろなツールを試したが、最終的にはVisual J++ 6.0を使っていたので、すぐにテスト可能なVisual J++ 6.0のプロジェクトが手元にあった。これをJ#に読み込ませてみた。
まずは以下のようなダイアログ・ボックスが表示された。
J#のプロジェクト移行ツール実行時に表示されるダイアログ・ボックス |
J#では、Visual J++ 6.0のプロジェクトを読み込んで、J#のプロジェクトに変換することができる。 |
もちろん、答えは“Yes”である。プロジェクトは変換され、以下のようなレポートが残される。
プロジェクト変換後に表示されるレポート |
Visual J++ 6.0のプロジェクトの変換は成功したが、ビルドすると……。 |
しめしめ、変換成功だぞ、と思いきや。ビルドすると、異様なまでに多くのエラーが出る。そもそも、同じクラスの重複定義などというエラーが出るのは異様すぎる。そこで調べてみると、驚くべきことが分かった。Visual J++ 6.0のプロジェクトに登録していないファイルまで、そのディレクトリ下のすべてのファイルがプロジェクトに登録されていたのだ。筆者は、ソースをアーカイブするために、一時的にサブディレクトリに集めて整理するバッチを使っていたのだが、そのためにサブディレクトリに置かれた一時的なソースまで全部取り込んでしまったのだ。これでは、すべてのクラスが重複定義になるのは当たり前だ。仕方がないので、関係ないファイルはすべて手動でプロジェクトから取り除いた。さて、これでコンパイルが通るだろうと思いきや……。
コンパイラの互換性
次に山ほどお目に掛かる羽目になったのは、“Stray semicolon”というコンパイル・エラーである。
不要なファイルをプロジェクトから取り除き、再ビルドしたときの画面 |
“Stray semicolon”という意味不明なコンパイル・エラーが大量に発生した。 |
最初は意味が分からなかったので、Javaの言語仕様までたどって調べてしまった。その結果分かったのは、これまで筆者は、Javaのコーディングで大きな誤解をしていたことだ。具体的には、C++ではクラス定義の最後にセミコロンを付けるが、Javaでは付けないということだ。C++とJavaをチャンポンで使っていた筆者は、そのあたりの記憶が間違っていたらしい。しかし、このコードがこれまで通っていたことは間違いない。JDKのコンパイラも、Visual J++のコンパイラも通っていた。
このことから考えると、おそらく、Visual J++のコンパイラはJDKのコンパイラをベースに開発されたもので、両者の互換度は(あからさまな機能変更点を除けば)意外と高いと言える。しかし、J#のコンパイラは、JDKのコンパイラを起源とするものではなく、新規に書き起こされたものだろう。そのため、これまで一度も食らったことのないエラーをJ#のコンパイラは見せてくれるようだ。おそらく、挙動としてはJ#のコンパイラの方が正しいような気がするのだが、少なくともプロジェクトを移行するプログラマにとっては手間が増えることを意味する。
また、変数の初期化忘れを指摘する警告の挙動がおかしく、すべてのパスで変数に値を代入しているにもかかわらず、代入していないパスがあると報告される場合がある。
挙動がおかしい警告 |
値を代入しているにもかかわらず、初期化忘れを指摘する警告が表示される場合がある。ベータ版ゆえの欠陥であると考えられる。 |
このあたりは、ベータ版ゆえの欠陥で、製品版では直ると考えられる。
INDEX | ||
[特集]J#の真実 | ||
Part 2 JavaからJ#へ:プログラム移植の実際 | ||
1.Visual J++ 6.0からの移行とコンパイラの互換性 | ||
2.ライブラリの互換性(1) | ||
3.ライブラリの互換性(2) | ||
4.Javaと他言語のインターフェイス | ||
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|