今回の話題も前回の続編で、先日7月28日に5年ぶりのメジャーバージョンアップ正式リリースが為された「Java SE 7 (JDK 7)」その続きです。Oracle が Sun Microsystems を買収して最初のメジャーリリースとなります。新機能として搭載が予定されている主要な機能は以下が挙げられます:
◇ もっと新 I/O ("NIO.2") (JSR 203)
◆ 細かな構文変更 (Project Coin) の一部 (JSR 334)
◇ JVMの動的型付け言語のサポート (JSR 292)
◆ G1ガベージコレクタの導入 (Garbage-First GC)
◇ クラスローダの拡張
◆ Unicode 6.0
◇ etc ...
前回ご紹介したのは、非同期入出力サポートされた「NIO.2」と、簡略表記などを可能とする「言語仕様の細かな変更(Project Coin)」でした。
今回取り上げる「Java仮想マシン(JVM)」への機能追加の一つである「動的型付け言語のサポート」は、JVMが更なる汎用プラットフォーム化を目指したものであり、無数にあるプログラミング言語に向けての誘致メッセージとも受け取れる機能であり、Javaの将来を左右する程に特に重要な変更といえましょう。
具体的には「invokedynamic命令」という新しいバイトコードが追加されることを意味しており、このバイトコードがいったい何をするのかは、「呼び出される実際の型に合わせて引数の型変換を試みる。」と、いうことらしいのです。つまり「動的型付け言語のサポート」という名前そのものの機能ですが、JVMにこの機能を搭載するためへの実装はとても困難であったことだと想像されます。
(参照実装プロジェクト "the Da Vinci Machine Project" があります。)
そうして新機能を搭載したJVMが登場したのですが、直接この機能を利用するのは、JVM上で動作する動的型付け言語のコンパイラを実装する方になります。
各々の動的言語コンパイラを実装される際に、メソッド呼び出しの
「invokedynamic命令」とこれに付随するメソッド・ハンドル(Method Handle)
という新しいリンケージ・メカニズムを利用する事により、JVMで高速に動作するバイトコードを生成できるようになるのだそうです。
現在 Javaプラットフォーム上で動作する動的言語としては JRuby を筆頭に、Jython、Beanshell などあり、新機能がこれらコンパイラ開発を加速させる事が予想されます。またJVM上で動作する他の言語としては、Scala, Clojure,Groovy なども Java の有力な後継者として名乗りを挙げています。最近では、チェコ発の "Kotlin"(ロシアの島の名に由来)という新言語も登場しました。曳いては、将来も多種多様な所謂「JVM言語」の利用が期待されるのです。
これら恩恵に与るのは、プログラマのみならず、寧ろインフラエンジニアにこそ、大いに恩恵を賜ると言い換えることが出来るでしょう。
その意味合いとして下層のみならず上層への抽象化度合いを深めることで多様な言語が実行可能な中間層として顕著になれば、各種プログラムを実行するためのデファクト実行環境として更に重要な位置付けがされることになります。(背景として幾つかの代替候補も成長しつつあるのが現状です。)
ところで Java のキャッチフレーズを覚えていらっしゃるでしょうか?
"Write Once, Run Anyware."
Java SE 7 からの新キャッチフレーズとして言い換えれば、
"Multiple Language, One Virtual Machine."
ともいえるかもしれません。
この機能「動的型付け言語のサポート」紹介に関しての補足事項ですが、既にご紹介したように現行では事実上、コンパイラ開発者向けの機能となっています。この機能を Java言語から利用するためには、文法レベルのサポート(とライブラリ)が必要と思われますが、JDK 7では未だ十分ではない様子です。これに関してはJDK 8 で機能追加で為されるとも聞き及んでいます。今後に更に期待して待ちましょう。(Project Lambda の一部になる予定。)
他の新機能についてのご紹介は、また次回ということで。
コースの詳細情報はこちら:
「Java」関連コース
リンク
「クラウド・仮想化」関連コース
リンク
御社のプレスリリース・イベント情報を登録するには、ZDNet Japan企業情報センターサービスへのお申し込みをいただく必要がございます。詳しくは以下のページをご覧ください。