Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

JavaScript Running on Java VM : Nashorn

JavaScript Running on Java VM : Nashorn

Nashorn overview slides delivered at Java Day Tokyo 2014.

Akihiro Nishikawa

May 22, 2014
Tweet

More Decks by Akihiro Nishikawa

Other Decks in Technology

Transcript

  1. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    1 JavaScript Running On JavaVM: Nashorn NISHIKAWA, Akihiro Oracle Corporation Japan
  2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    2 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するも のです。また、情報提供を唯一の目的とするものであり、いかなる契約に も組み込むことはできません。以下の事項は、マテリアルやコード、機能を 提供することをコミットメント(確約)するものではないため、購買決定を行う 際の判断材料になさらないで下さい。オラクル製品に関して記載されてい る機能の開発、リリースおよび時期については、弊社の裁量により決定さ れます。 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の 社名、商品名等は各社の商標または登録商標である場合があります。
  3. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Agenda  Nashorn  Server Side JavaScript  Nashornの今後
  4. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    5 Nashorn Compact1 Profileでも使えるJavaScript Engine
  5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    6 Nashorn Compact1 Profileでも使えるJavaScript Engine
  6. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    7 登場の背景  Rhinoの置き換え – セキュリティ – パフォーマンス  InvokeDynamic (JSR-292) のProof of Concept  アトウッドの法則 Any application that can be written in JavaScript will eventually be written in JavaScript.
  7. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    8 Project Nashornの主なスコープ JEP 174  ECMAScript-262 Edition 5.1  javax.script (JSR 223) API  JavaとJavaScript間での相互呼び出し  新しいコマンドラインツール(jjs)の導入
  8. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    9 Java VM Scripting Engine (Nashorn) Scripting API (JSR-223) JavaScript code Java code Other runtime Other APIs jjs
  9. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    10 $JAVA_HOME/bin/jjs $JAVA_HOME/jre/lib/ext/nashorn.jar
  10. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    12 未実装・未サポート  ECMAScript 6 (Harmony) – Generators – 分割代入(Destructuring assignment) – const, let, ...  DOM/CSSおよびDOM/CSS関連ライブラリ – jQuery, Prototype, Dojo, …  ブラウザAPIやブラウザエミュレータ – HTML5 canvas, HTML5 audio, WebGL, WebWorkers...
  11. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    14 JavaからNashorn ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("nashorn"); engine.eval("print('hello world')"); engine.eval(new FileReader("hello.js"));
  12. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    15 JavaからNashorn JavaからScript functionを呼び出す engine.eval("function hello(name) { print('Hello, ' + name)}"); Invocable inv=(Invocable)engine; Object obj= inv.invokeFunction("hello","Taro");
  13. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    16 JavaからNashorn Script functionでInterfaceを実装する engine.eval("function run(){ print('run() called’) }"); Invocable inv =(Invocable)engine; Runnable r=inv.getInterface(Runnable.class); Thread th=new Threads(r); th.start(); th.join();
  14. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    17 NashornからJava print(java.lang.System.currentTimeMillis()); jjs -fx ...
  15. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    18 Nashorn for Scripting Scripting用途で使えるように機能追加  -scriptingオプション  Here document  Back quote  String Interpolation ...
  16. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    20 Nashorn Extensions 今日ご紹介するのは  Java typeの参照を取得  Javaオブジェクトのプロパティアクセス  Lambda、SAM、Script関数の関係  スコープおよびコンテキスト
  17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    22 Java.type Rhinoでの表記(Nashornでも利用可) var hashmap=new java.util.HashMap(); または var HashMap=java.util.HashMap; var hashmap=new HashMap();
  18. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    23 Java.type Nashornで推奨する表記 var HashMap=Java.type('java.util.HashMap'); var hashmap=new HashMap();
  19. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    24 Java.type Class or Package? java.util.ArrayList java.util.Arraylist
  20. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    25 Java配列 Rhinoでの表記 var intArray= java.lang.reflect.Array.newInstance( java.lang.Integer.TYPE, 5); var Array=java.lang.reflect.Array; var intClass=java.lang.Integer.TYPE; var array=Array.newInstance(intClass, 5);
  21. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    26 Java配列 Nashornでの表記 var intArray=new(Java.type("int[]"))(5); var intArrayType=Java.type("int[]"); var intArray=new intArrayType(5);
  22. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    28 getter/setter var HashMap=Java.type('java.util.HashMap'); var map=new HashMap(); map.put('size', 2); print(map.get('size')); // 2
  23. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    29 プロパティ var HashMap=Java.type('java.util.HashMap'); var map=new HashMap(); map.size=3; print(map.size); // 3 print(map.size()); // 1
  24. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    30 連想配列 var HashMap=Java.type('java.util.HashMap'); var map=new HashMap(); map['size']=4; print(map['size']); // 4 print(map['size']()); // 1
  25. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    32 Lambda, SAM, and Script function Script functionをLambdaオブジェクトやSAMインターフェースを実装するオブ ジェクトに自動変換 var timer=new java.util.Timer(); timer.schedule( function() { print('Tick') }, 0, 1000); java.lang.Thread.sleep(5000); timer.cancel();
  26. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    33 Lambda, SAM, and Script function Lambda typeのインスタンスであるオブジェクトを Script functionのように取り扱う var JFunction= Java.type('java.util.function.Function'); var obj=new JFunction() { // x->print(x*x) apply: function(x) { print(x*x) } } print(typeof obj); //function obj(9); // 81 Script functionっぽく
  27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    35 Scope and Context load と loadWithNewGlobal  load – 同じグローバル・スコープにScriptをロード – ロードしたScriptにロード元のScriptと同じ名称の変数が存 在する場合、変数が衝突する可能性がある  loadWithNewGlobal – グローバル・スコープを新規作成し、そのスコープに JavaScriptをロード – ロード元に同じ名前の変数があっても衝突しない
  28. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    36 Scope and Context ScriptContextはBindingに紐付いた複数のスコープをサポート ScriptContext ctx=new SimpleScriptContext(); ctx.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE); Bindings engineScope= ctx.getBindings(ScriptContext.ENGINE_SCOPE); engineScope.put("x", "world"); engine.eval("print(x)", ctx);
  29. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    37 Scope and Context スコープを区切るためにJavaImporterをwithと共に利用 with(new JavaImporter(java.util, java.io)){ var map=new HashMap(); //java.util.HashMap map.put("js", "javascript"); map.put("java", "java"); print(map); .... }
  30. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    38 その他のNashorn Extensions  Java配列とJavaScript配列の変換 – Java.from – Java.to  Javaクラスの拡張、スーパークラス・オブジェクトの取得 – Java.extend – Java.super など
  31. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    40 Java EE for Next Generation Applications HTML5に対応した、動的かつスケーラブルなアプリケーション提供のために WebSockets Avatar
  32. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    41 Webアプリケーションアーキテクチャの進化 Request-Response and Multi-page application Java EE/JVM Presentation (Servlet/JSP) Business Logic Backend Connectivity Browser
  33. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    42 Webアプリケーションアーキテクチャの進化 Ajax (JavaScript) の利用 Java EE/JVM Connectivity (REST, SSE) Presentation (Servlet/JSP, JSF) Business Logic Backend Connectivity Browser JavaScript
  34. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    43 今風のWebアプリケーションアーキテクチャ Presentationよりはむしろ接続性を重視 Java EE/JVM Connectivity (WebSocket, REST, SSE) Presentation (Servlet/JSP, JSF) Business Logic Backend Connectivity Browser View Controller JavaScript
  35. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    45 既存サービスのモバイル対応例 Node.js JavaScript REST SSE WebSocket Browser View Controller JavaScript
  36. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    47 既存サービスのモバイル対応例 NodeをJava VMで動作させよう Java EE/JVM Node Server Business Logic Backend Connectivity Client JavaScript Browser View Controller JavaScript
  37. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    49 Avatar.js  Node.jsで利用できるモジュールをほぼそのまま利用可能 – Express、async、socket.ioなど – npmで取り込んだモジュールを認識  利点 – Nodeプログラミングモデルの利用 – 既存資産、ナレッジ、ツールの活用
  38. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    50 Avatar.js = Node + Java Threadも含めたJavaテクノロジーを活用 Java JavaScript com.myorg.myObj java.util.SortedSet java.lang.Thread require('async') postEvent Node App
  39. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    52 Avatar サーバーサイドJavaScriptサービスフレームワーク  REST、WebSocket、Server Sent Event (SSE) での データ送受信に特化  Node.jsのイベント駆動プログラミングモデルや プログラミングモジュールを活用  エンタープライズ機能(Java EE)との統合
  40. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    53 *.html *.js *.css HTTP Application Services Avatar Modules Node Modules Avatar.js Avatar Runtime Avatar Compiler Server Runtime (Java EE) JDK 8 / Nashorn Application Views REST/WebSocket/SSE Avatar (Avatar EE) 変更通知 データ
  41. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    54 HTTP REST/WebSocket/SSE Avatar Compiler Application Views *.html *.js *.css Application Services Avatar Modules Node Modules Avatar.js Avatar Runtime Server Runtime (Java EE) JDK 8 / Nashorn アーキテクチャ(Server) 変更通知 データ
  42. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    55 Avatar Service Java JavaScript HTTP Load Balancer Services Shared State Services Services 変更通知 データ
  43. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    56 Avatar Runtime Server Runtime (Java EE) Avatar Modules Node Modules Avatar.js *.html *.js *.css Application Services JDK 8 / Nashorn アーキテクチャ(Client) 変更通知 データ HTTP REST/WebSocket/SSE Application Views Avatar Compiler
  44. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    59 Nashornの今後  Bytecode Persistence (JEP 194) http://openjdk.java.net/jeps/194  Optimistic Typing  その他
  45. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    61 まとめ  Nashorn – Javaと緊密に統合 – Rhinoからの移行にあたっては表記方法が変わっている箇 所があるので注意 – 今後も性能向上、機能追加、新しい仕様に対応  Server Side JavaScript – Avatar.js、Avatarは鋭意開発中 – ぜひFeedbackを!
  46. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    63 ソースコード Shell 主としてjjsで利用 Compiler ソースからバイトコード (class) を生成 Scanner ソースからトークンを作成 Parser トークンからAST/IRを作成 IR スクリプトの要素 Codegen AST/IRからscript classのバイトコードを生成 Objects ランタイム要素 (Object、String、Number、Date、RegExp) Scripts スクリプト用のコードを含むclass Runtime ランタイムタスク処理 Linker JSR-292 (InvokeDynamic) に基づきランタイムで呼び出し先をバインド Dynalink 最適なメソッドを検索(言語間で動作)
  47. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    64 Nashorn Documents http://wiki.openjdk.java.net/display/Nashorn/Nashorn+Documentation  Java Platform, Standard Edition Nashorn User's Guide http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nash orn/  Scripting for the Java Platform http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/  Oracle Java Platform, Standard Edition Java Scripting Programmer's Guide http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_ guide/
  48. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    65 Nashorn http://openjdk.java.net/projects/nashorn/  OpenJDK wiki – Nashorn https://wiki.openjdk.java.net/display/Nashorn/Main  Mailing List [email protected]  Blogs – Nashorn - JavaScript for the JVM http://blogs.oracle.com/nashorn/ – Nashorn Japan https://blogs.oracle.com/nashorn_ja/
  49. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    66 Avatar.js  Project Page https://avatar-js.java.net/  Mailing List [email protected]
  50. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

    67 Avatar  Project Page https://avatar.java.net/  Mailing List [email protected]