java 8 nashorn ve avatar.js
TRANSCRIPT
Java 8 Nashorn ve Avatar.js
Rahman [email protected]
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.
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)
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)
Nashorn neyi hedeflemez?
• Henüz ECMAScript 6 özelliklerini desteklemez.
• Standart olmayan özellikleri desteklemez.
• Nashorn bir browser ortamı değildir.– DOM,CSS, Jquery, Dojo desteklemez.
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.
JJS aracı
JSR 223 "javax.script" paketi
• Java ortamından Script dillerine erişmek ve kullanmak için özel bileşenler sunar.
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))");
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);
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();
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);
Java API – Harici Script
ScriptEngineManager em= new ScriptEngineManager();ScriptEngine engine = em.getEngineByName("js");engine.eval(new FileReader("..."));
JJS – Harici Script
//merhaba.jsprint("Merhaba Dünya");
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@...
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;
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";
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
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
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
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();
POJO alanlarına erişmek
var geo= new com.kodcu.Geo();geo.en = 5;geo.boy = 10;
Avatar.js
• Node.js programlama modelini ve ortamını JVM ekosistemine katar.
• Node.js = Google v8 + Javascript• Avatar.js = Nashorn + Java + Javascript
Node Asenkron Modeli
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ı
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
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
???