工藤探偵事務所

RESEARCH AND INVESTIGATION

Soliloquy of a Super Engineer (2) Java SE 7 Part 2 @ Aug 18, 2011

とあるメルマガに書いた原稿です。
2011年8月号(8/18日発行)されたものです。
ここにも載せておきます。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
◆◇『スーパーエンジニアの独り言 第2回“(続)Java SE 7 登場” 』◇◆
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

今回の話題も前回の続編で、先日7月28日に5年ぶりのメジャーバージョンアップ
正式リリースが為された「Java SE 7 (JDK 7)」その続きです。
OracleSun Microsystems を買収して最初のメジャーリリースとなります。
新機能として搭載が予定されている主要な機能は以下が挙げられます:

◇ もっと新 I/O ("NIO.2") (JSR 203)
◆ 細かな構文変更 (Project Coin) の一部 (JSR 334)
JVMの動的型付け言語のサポート (JSR 292)
◆ G1ガベージコレクタの導入 (Garbage-First GC)
◇ クラスローダの拡張
Unicode 6.0
◇ etc ...

f:id:kudo-shunsaku:20120107011143j:plain

前回ご紹介したのは、非同期入出力サポートされた「NIO.2」と、簡略表記などを
可能とする「言語仕様の細かな変更(Project Coin)」でした。

invokedynamic

f:id:kudo-shunsaku:20110911191057p:image:medium

今回取り上げる「Java仮想マシンJVM)」への機能追加の一つである「動的型
付け言語のサポート」は、JVMが更なる汎用プラットフォーム化を目指したもの
であり、無数にあるプログラミング言語に向けての誘致メッセージとも受け取れ
る機能であり、Javaの将来を左右する程に特に重要な変更といえましょう。

具体的には「invokedynamic命令」という新しいバイトコードが追加されることを
意味しており、このバイトコードがいったい何をするのかは、「呼び出される
実際の型に合わせて引数の型変換を試みる。」と、いうことらしいのです。
つまり「動的型付け言語のサポート」という名前そのものの機能ですが、JVM
この機能を搭載するためへの実装はとても困難であったことだと想像されます。
(参照実装プロジェクト "the Da Vinci Machine Project" があります。)

f:id:kudo-shunsaku:20110911192600p:image:medium

そうして新機能を搭載したJVMが登場したのですが、直接この機能を利用する
のは、JVM上で動作する動的型付け言語のコンパイラを実装する方になります。
各々の動的言語コンパイラを実装される際に、メソッド呼び出しの
「invokedynamic命令」とこれに付随するメソッド・ハンドル(Method Handle)
という新しいリンケージ・メカニズムを利用する事により、JVMで高速に動作
するバイトコードを生成できるようになるのだそうです。

Any Language on 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 の一部になる予定。)

他の新機能についてのご紹介は、また次回ということで。