読者です 読者をやめる 読者になる 読者になる

Java Day Tokyo 2014に参加してるよ (Nashorn編)

Java Day Tokyo 2014に参加しています! 1コマ目は「JavaScript Running On JavaVM: Nashorn」に参加していますのでダイジェストを書きなぐります。

Nashorn Overview

Rhino

  • セキュリティ、パフォーマンスに問題があった
  • 一から作りなおしたほうがいいんじゃね

InvokeDynamic

  • InvokeDynamic機能検証のためにNashornを作った
  • JSR-292

ECMA-262 5.1に対応

Octane2でのRhinoとNashornの比較

  • 20倍速いは言い過ぎだが、3〜4倍くらい

ECMA6まだ未対応

  • まだ策定中ですしおすし
  • RhinoをNashornに置き換える場合、一部書き換えが生じてしまう
  • const letが使えない

JavaFX

Scripting

  • Here document
  • Back quote

Nashornの拡張機能

Java typeの参照を取得できる

  • NashornではJava.typeでの参照を推奨
var HashMap = Java.type('java.util.HashMap')
  • java.util.ArrayListjava.util.Arraylistでの参照(例) Rhinoでの記法だと呼び出されて初めて例外がわかるためエラーがわかりにくかったが、Java.typeでの参照の場合宣言箇所での例外を検知できるようになった

Javaオブジェクトのプロパティアクセス

  • Rhinoではgetter/setterでのアクセスだったが、プロパティに直接アクセスできる

Lambda, SAM, Script関数の関係

  • Script functionをLambdaオブジェクトに直接変換できる
  • Lambra typeのインスタンスであるオブジェクトをScript functionのように取り扱う

Scope and Context

  • ScriptContextはBindingに紐付いた複数のスコープをサポート
  • スコープを区切るためにJavaImporterをwithとともに利用

Java EE for Next Generation Applications

Avatar.js

  • JVM上にNode.jsを載せたもの(Avatar.js = Node + Java
  • Express, asyncやパッケージマネージャ等のNodeの仕組みも使える
  • Javaの強みであるThread等や、既存の業務ロジック等の資産をフル活用
  • ベンチマークはNodeとどっこいどっこい
  • Avatar EE

Nashornの今後

  • Bytecode Persistence
  • Optimistic Typing
  • ツイート禁止な話数点

感想

あんまり流行ってないVert.xとかより良いかもね