CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第7章 Nashorn JavaScript エンジンの活用

Java 7 で、動的型付け言語を効率的に実行するために InvokeDynamic というバイトコードが新たに導入された

例えば、JavaScript で、次のような関数があった場合

function sum(a, b) {
    return a + b;
}

a + bの + 演算子は、文字列の連結なのだろうか? それとも数値の加算なのだろうか?

静的型付け言語である Java なら、a, b の型がコンパイル時に分かるので + 演算子が何なのかコンパイル時に確定する
ところが、a, b の型が不定な JavaScript では、+ 演算子が何者なのかは実行時にしか決まらない

InvokeDynamic が対応するのは、実行時までコールするメソッドが決まらないコードである

Java 7 の時点で InvokeDynamic に対応した言語は JRuby ぐらいで、JavaScriptスクリプトエンジンはまだ Rhino だった
そして Java 8 になって、InvokeDynamic に対応した新しい JavaScript スクリプトエンジン Nashorn が登場したのだ

Nashorn は、より高速になっただけでなく ECMAScript 標準との互換性も高くなったということだ
万々歳じゃないか