-JSR223幻想

JSR223を素人さんならともかく、フレームワーク実装者が信じちゃダメですよ。あれはスクリプトエンジンの叩き方について最大公約数をまとめた近年まれに見るおざなりな標準化だと思っています。Java6ではJSR223 とそのRIエンジンとしてRhinoが搭載されますがRhinoのパワーを他との最大公約数でしっかり薄めてくれています。Rhinoはよくできたエンジンで、そのAPIJavaDoc以外のドキュメントなんか世界中どこさがしても皆無だけどたいした設計がされています。それらがほとんど使えなくなっちゃうんですよ。
S2Saoでは一度スクリプトを流してコンパイルした結果をキャッシュし、アスペクトで要求された名前でコンパイル結果からメソッドを探し出して実行しますが、JSR223ではコンパイル結果からメソッドを取り出すAPIが無いのでこの方法ではできないんです。どうするかというと、アスペクトからの要求単位でスクリプトを分けないといけない。どちらか有利かは別の議論ですが、抽象化によってできないことが増えるのは確かです。優しく易しいAPIなんで、私のベネフィットは減っちゃった、ということです。他、Mayaaではエンジンオブジェクトにそれと気がつかせずにJSからアクセスできるようにNativeJavaObjectというドライバみたいなものが多数実装しています。それがなくなったら、スクリプトがJavaの作法で汚染されてしまいます。せっかくスクリプトでJavaっぽくないことをしたいのに、いきなりimportみたいなことをしてみたり、Javaそのままのプロパティアクセスとかになっちゃう。
パフォーマンスでも、LLを単にJavaVMに乗せるだけではキッツいと思うのですよ。Java6でLLが乗ろうがクソみたいなもんで、Java7でinvokedynamicが出てLLをinvokedynamicで乗せ変え(それをコンパイラという)て、さらにその先に今度はinvokedynamicのコスト問題になってくる。さらにそれをJava8あたりでもうひとつぐらいアイディア出て初めてOKな世界かなと。JSR223でJavaスクリプト言語が出会いました!とか言って浮かれているとしたら、それは仕様を読んでないか理解していないだけじゃないでしょうか?