Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaScript Running on Java VM : Nashorn

JavaScript Running on Java VM : Nashorn

Nashorn overview slides delivered at Java Day Tokyo 2014.

Avatar for Akihiro Nishikawa

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]