javantura zagreb 2014 - nashorn - miroslav rešetar

22
Java 8 JavaScript - Nashorn @MiroslavResetar, Javantura, 22.2.2014.

Category:

Technology


3 download

DESCRIPTION

Konferencija Javantura Zagreb 2014 by HUJAK Java 8 JavaScript – Nashorn by Miroslav Rešetar Java 8 donosi podršku za scripting u JavaScriptu. Engine se zove Nashorn (openjdk.java.net/projects/nashorn) i nasljednik je popularnog Rhino engine-a. Za razliku od starijeg Rhino-a, Nashorn koristi invoke dynamic Java 7 mehanizam što mu omogućava puno bolje performanse. Nashorn je moderni engine, usklađen sa ECMAScript 5.1 standardom. To omogućava uporabu popularnih JavaScript biblioteka iz Java programa što otvara neke sasvim nove načine kako implementiramo naša Java rješenja. Prezentacija ima za cilj upoznati Java developera s mogućnostima integracije JavaScript-a u buduća Java 8 rješenja.

TRANSCRIPT

Page 1: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Java 8 JavaScript - Nashorn

@MiroslavResetar, Javantura, 22.2.2014.

Page 2: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

JavaScript na Javanturi?

• Alfresco • CMIS API implementiran u JavaScriptu

• Neo4J • „people love to use Neo4j from Node.js and the browser”

• Sencha Touch, Ext.Js, D3.js,

• JavaFX • „writing JavaFX scripts in Nashorn is very easy”

• Dart • transkompajlira se u JavaScript!

• Vert.x • JavaScript API

Page 3: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Popularnost JavaScripta?

• Redmonk, siječanj 2014. • Github repozitoriji vs Stack Overflow

1. JavaScript (+1)

2. Java (-1)

3. PHP

4. C# (+2)

5. Python (-1)

Page 4: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

JVM polyglot programming

• Clojure, Scala, JRuby, Jython, Rhino (JavaScript)

• Zašto JVM? • Jer je zakon • GC, Threads, Java API, ogromna količina biblioteka, puno

platformi

• JVM – najbolji dio Jave

Page 5: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Rhino

• Rhino – Java implementacija JavaScripta

• 1997 – Netscape započeo rad na Rhino-u

• 1998 – Rhino je predan Mozilli i open source-an

• 2006 – Java 6 pakira Rhino kao standardnu implementaciju skriptnog jezika

Page 6: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Problemi sa Rhino-om

• Rhino je veoma spor u usporedbi sa ostalim JavaScript engine-ima (browserima)

• Velika potrošnja memorije

• Veoma stari codebase (iz Java 1.1 vremena)

• Kako bi se „popravio” bio je potreban veliki rewrite, odluka je bila krenuti iz početka

Page 7: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Nashorn

• Potpuno nova implementacija JavaScripta • Kompajlirani kod a ne interpreter

• Dolazi standardno sa JDK-om 8

• 5 x manji footprint

• 20 x bolje performanse (otprilike )

Page 8: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Rhino vs Nashorn

Page 9: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Nashorn vs Groovy

Page 10: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

InvokeDynamic

• A First Taste of InvokeDynamic • „... static nature of Java is in the language itself (and not the

JVM)” • „Every invocation has to be called against a known type.” • „we must generate hundreds of tiny methods into tiny

classes with everything neatly tied up in a bow so the JVM will pretty please perform that invocation for us as quickly as possible” • „java.lang.OutOfMemoryError: PermGen space”

• „InvokeDynamic ... the ability to make a dynamic call that the JVM not only recognizes, but also optimizes in the same way it optimizes plain old static-typed calls.” • MethodHandle happyTimeHandle = MethodHandles.findVirtual(Happy.class,

"happyTime", void.class, String.class);

Page 11: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Kako do Nashorn-a?

• JSR 223 – javax.script (Java 6, 12/2006)

Page 12: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Nashorn smoke test

Page 13: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

QUnit

• „QUnit is a powerful, easy-to-use JavaScript unit testing framework.”

• Dohvati engine, učitaj QUnit, setupiraj ga, pokreni test

Page 14: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

{{Mustache}}

• „Mustache is a logic-less template syntax. It can be used for HTML, config files, source code - anything. It works by expanding tags in a template using values provided in a hash or object.”

Page 15: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Shell scripting: JJS

• Curl -> Regex -> Curl -> Play Audio

Page 16: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Što Nashor nije

• Nije DOM/CSS okruženje • Ne podržava korištenje biblioteka kao što su JQuery, Dojo,

Ext. (out-of-the-box)

• Nema browser plugin API • Nije embeddable u browser

• Ne podržava ne standardizirane feature JavaScripta

• Nije multithreaded safe • generalno nije problem ukoliko se izbjegava globalni scope • loadWithNewGlobal creates a fresh global before loading

the script

Page 17: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

„Meet the team”

Page 18: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Jim Laskey odgovara

• Postoji li debugger za Nashorn? • Debuger je integriran u Netbeans 8 (beta). • Eclipse još nema debugger za Nashorn.

• Da li radite još na poboljšanju performansi? • Da. Veliki trud se ulaže kako bi performanse bile još bolje sa

verzijom 8u20. Verzija se očekuje na jesen. Za sada su brojke obećavajuće.

• Što se događa sa Node.jar projektom? • Preimenovan u Avatar.js. StrongLoop ulažu ogroman trud ne

bi li podržali projekt. Trenutne performanse su bolje od Node.js. Bit će još bolje sa verzijom 8u20.

Page 19: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Project Avatar i Avatar.js

• „Avatar.js is a project to bring the node programming model, APIs and module ecosystem to the Java platform.”

• „Avatar.js applications are both asynchronous and single-threaded (exactly as in Node.js).”

• „Avatar - JavaScript services layer...rich client side framework that assumes very minor JavaScript knowledge.”

Page 20: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Želite znati više?

• Jim Laskey - Nashorn, JavaScript for the JVM • http://www.youtube.com/watch?v=I6eo2KPsk7U

• Attila Szegedi - The Curious Case of JavaScript on the JVM (http://vimeo.com/78890890)

• Oracle Java Magazine Jan/Feb 2014 – Oracle Nashorn • http://julien.ponge.org/blog/nashorn-article-in-oracle-

javamagazine-jan-feb-2014/

Page 21: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Pitanja?

Page 22: Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar

Reference

• Kod - https://github.com/mresetar/javantura-nashorn

• JUnit benchmarks - http://labs.carrotsearch.com/junit-benchmarks-tutorial.html

• Nashorn JavaFx debugger - https://github.com/wickund/nashornexamples/

• Spring boot sample project

• Rhino QUnit setup

• VoiceRSS service