java 8 nashorn ve avatar.js

28
Java 8 Nashorn ve Avatar.js Rahman Usta [email protected]

Upload: rahman-usta

Post on 20-Aug-2015

226 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Java 8 Nashorn ve Avatar.js

Java 8 Nashorn ve Avatar.js

Rahman [email protected]

Page 2: Java 8 Nashorn ve Avatar.js

Nashorn Nedir?

• Java 8 için geliştirilen bir JS motorudur.

• JVM ortamında, Javascript dilini kullanmaya olanak tanır.

• ECMAScript 5.1’i destekler.

Page 3: Java 8 Nashorn ve Avatar.js

Nashorn Nedir?

• Dünyanın en popüler 2 dilini birlikte kullanmaya olanak tanır.

• 2 dilin sahip olduğu geniş değer ırmağını birleştirir. (Bilgi, tecrübe, framework, tools)

Page 4: Java 8 Nashorn ve Avatar.js

Nashorn neyi hedefler?

• ECMAScript-262 sürüm 5.1’i desteklemeli.– Uyumluluk testi sürecinde

• JSR 223 «javax.script» API’lerini desteklemeli.

• Java2JS ve JS2Java desteği olmalı.

• Bir shell aracı olmalı (JJS)

• Performans ve bellek tüketimi büyük ölçüde daha iyi olmalı (Rhino’a göre)

Page 5: Java 8 Nashorn ve Avatar.js

Nashorn neyi hedeflemez?

• Henüz ECMAScript 6 özelliklerini desteklemez.

• Standart olmayan özellikleri desteklemez.

• Nashorn bir browser ortamı değildir.– DOM,CSS, Jquery, Dojo desteklemez.

Page 6: Java 8 Nashorn ve Avatar.js

Neden Nashorn?

• Rhino diğer JS motorlarına göre düşük performans sunuyordu.

• Nashorn bu amaçla sıfırdan yazıldı.

• Rhino JS motoruna göre, 5x performans sunuyor.

Page 7: Java 8 Nashorn ve Avatar.js

JJS aracı

Page 8: Java 8 Nashorn ve Avatar.js

JSR 223 "javax.script" paketi

• Java ortamından Script dillerine erişmek ve kullanmak için özel bileşenler sunar.

Page 9: Java 8 Nashorn ve Avatar.js

Java API – Evaluate Script

ScriptEngineManager em= new ScriptEngineManager();ScriptEngine engine = em.getEngineByName("Nashorn");

engine.eval(" var a=5; var b=6; ");engine.eval(" var c=7; print("Toplam:"+(a+b+c))");

Page 10: Java 8 Nashorn ve Avatar.js

Java API – Object Binding

• Java ortamındanki nesnelerin, JS ortamına eriştirilmesini sağlar.

ScriptEngine engine = engineManager.getEngineByName("Nashorn");

engine.put("name","Emin");engine.put("age" ,28);

Page 11: Java 8 Nashorn ve Avatar.js

Java API – Compilable Arayüzü

• Derlenen bir Script’in tekrar tekrar kullanımına olanak tanır.

Compilable compilable = (Compilable) engine;CompiledScript compiled = compilable.compile("");compiled.eval();

Page 12: Java 8 Nashorn ve Avatar.js

Java API – Invocable Arayüzü

• Java tarafından, Script fonksiyonlarını koşturmak için bulunan opsiyonel bir arayüzdür.

Invocable inv = (Invocable) engine;inv.invokeFunction("funcName",5,4);inv.invokeMethod(context,"funcName",5,4);

Page 13: Java 8 Nashorn ve Avatar.js

Java API – Harici Script

ScriptEngineManager em= new ScriptEngineManager();ScriptEngine engine = em.getEngineByName("js");engine.eval(new FileReader("..."));

Page 14: Java 8 Nashorn ve Avatar.js

JJS – Harici Script

//merhaba.jsprint("Merhaba Dünya");

Page 15: Java 8 Nashorn ve Avatar.js

Java Tiplerini Kullanmak

print(Object); //function Object() { [native code] }print(new Object()); // [object Object]

var Object = java.lang.Object;print(Object); // [JavaClass java.lang.Object]print(new Object()); // java.lang.Object@...

var JavaObject = Java.type("java.lang.Object");print(JavaObject); // [JavaClass java.lang.Object]print(new JavaObject()); // java.lang.Object@...

Page 16: Java 8 Nashorn ve Avatar.js

Java Tiplerini Kullanmak

var IntArray = Java.type("int[]");print(IntArray); // [JavaClass [I]

var intArray = new IntArray(3);print(intArray); // [I@78b1cc93intArray[0]=1;intArray[1]=2;intArray[2]=3;

Page 17: Java 8 Nashorn ve Avatar.js

Java Tiplerini Kullanmak

var StrArray = Java.type("java.lang.String[]");print(StrArray); // [JavaClass [Ljava.lang.String;]

var strArray = new StrArray(3);print(strArray); // [Ljava.lang.String;@1da51a35

strArray[0]="Ali";strArray[1]="Veli";strArray[2]="Selami";

Page 18: Java 8 Nashorn ve Avatar.js

Dizi Tip Dönüşümü (Java.to)

var jsArray = [];jsArray[0] = "Ali";jsArray.push(10);

print(jsArray); // Ali,10

var javaArray= Java.to(jsArray,"java.lang.String[]");

print(javaArray); // [Ljava.lang.String;@1786f9d5print(javaArray[0]); // Aliprint(javaArray.length); // 2

Page 19: Java 8 Nashorn ve Avatar.js

Dizi Tip Dönüşümü (Java.from)

var DoubleArray = Java.type("double[]");var javaArray = new DoubleArray(3);

print(DoubleArray); // [JavaClass [D]print(javaArray); // [D@a74868d

var jsArray = Java.from(javaArray);jsArray.push(7.9);print(jsArray); // 0,0,0,7.9

Page 20: Java 8 Nashorn ve Avatar.js

Dizi Tip Dönüşümü (Java.from)var List = java.util.LinkedList;

var liste = new List();liste.add("Ali");liste.add(5);

print(List); // [JavaClass java.util.LinkedList]print(liste); // [Ali, 5]

var array = Java.from(liste);array.push("Veli");

print(array); // Ali,5,Veli

Page 21: Java 8 Nashorn ve Avatar.js

Java Paketlerinin Yüklenmesi

• Nashorn Java paket ve sınıflarının yüklenmesine doğrudan destek vermez. Onun yerine bir rhino modülünü kullanır.

load("nashorn:mozilla_compat.js");importPackage("java.util");importClass(java.util.Timer);

var list = new ArrayList();

Page 22: Java 8 Nashorn ve Avatar.js

POJO alanlarına erişmek

var geo= new com.kodcu.Geo();geo.en = 5;geo.boy = 10;

Page 23: Java 8 Nashorn ve Avatar.js

Avatar.js

• Node.js programlama modelini ve ortamını JVM ekosistemine katar.

• Node.js = Google v8 + Javascript• Avatar.js = Nashorn + Java + Javascript

Page 24: Java 8 Nashorn ve Avatar.js

Node Asenkron Modeli

Page 25: Java 8 Nashorn ve Avatar.js

Node’un avantajları

• Hafif• Cross-platform• Client ve Sunucuda aynı dil• Npm (Node Package Manager)• Asenkron G/Ç– epool, kqueue, /dev/pool, select, IOCP

• Ölçeklenebilir• Düşük bellek tüketimi• C10K Problemine çözüm sunması

Page 26: Java 8 Nashorn ve Avatar.js

Avatar.js avantajları

• Node uygulamalarını JVM’de koşturur.• Java ve Javascript birlikte kullanılabilir.– JDBC, Concurrency, Java EE

• MultiThreaded uygulamalar geliştirilebilir.– Yüksek CPU kullanım deneyimi

Page 27: Java 8 Nashorn ve Avatar.js

Avatar.js vs Node.js• http://octane-benchmark.googlecode.com/svn/latest/index.html• https://developers.google.com/octane/benchmark

• http://v8.googlecode.com/svn/data/benchmarks/v7/run.html• https://github.com/hakobera/node-v8-benchmark-suite

npm install benchmarknpm install benchmark-octane

Page 28: Java 8 Nashorn ve Avatar.js

???