https://blogs.oracle.com/theaquarium/entry/invokedynamic_and_cdi
JSR 292(Supporting Dynamically Typed Languages on the Java Platform/Javaプラットフォームにおける動的型言語のサポート)は、Javaプラットフォームでの動的な型言語の サポートをシンプルに、かつ改善する目的で、Java SE 7で導入されました。JSR 292はInvokeDynamicと呼ばれる新しいバイトコードを定義しています。これを使うと静的な型情報がなくてもメソッド呼び出しの実行が可能です。それゆえ、最初のバイトコードはJava言語のためではなく、明確に動的型言語のために設計されています。"Man cannot discover new oceans unless he has the courage to lose sight of the shore."
(André Gide)
JSR 292: Supporting Dynamically Typed Languages on the JavaTM PlatformProject NashornはJava 8の新しいJavaScriptエンジンで、InvokeDynamicに依拠しています。実は、元々のNashornはただのInvokeDynamicのPoC(コンセプト検証)でした。PoCが成功したので、Nashornはそれ以後進化して高性能な100%ECMAScript準拠のエンジンに進化しました。
https://www.jcp.org/en/jsr/detail?id=292
Project NashornInvokeDynamicが元々動的型付き言語のために検討されていた、という事実にもかかわらず、結果としてこのバイトコードはJava言語自体にも有用であり得ることがわかりました。例えば、Java SE8のLambdaはその内部でInvokeDynamicを使用しています。
http://openjdk.java.net/projects/nashorn/
Translation of Lambda ExpressionsCDIの共同スペックリードであるAntoine Sabot-Durandは現在、InvokeDynamicを使ってWeldプロキシを置き換える実験を指揮しています。
http://cr.openjdk.java.net/%7Ebriangoetz/lambda/lambda-translation.html
weld-invokedynamic現段階では最初のPoCですが、うまく動作しています。もし彼の努力が結実した場合、WeldはCDIの参照実装で様々なアプリケーションサーバー(JBoss AS、WildFly、GlassFish、WebLogicなど)で利用されているので、Lambdaのサポートのためだけでなく、Java EEアプリケーションサーバーの内部にInvokeDynamicを使っているかもしれません。そのときになってみないと分かりませんけどね。
https://github.com/antoinesd/weld-invokedynamic
0 件のコメント:
コメントを投稿