Java’da Rhinoceros öğrenin

Portakalkafa

Global Mod
Global Mod
Nashorn, JDK 8’deki yeni JavaScript motorunun adıdır. Ayrı bir JavaScript motoru olarak JSR-223 aracılığıyla Java’ya entegre edilebilir. Nashorn doğrudan JDK 8’de mevcuttur ve böylece Mozilla’nın 11 yıl sonra Rhino adlı önceki referans uygulamasının yerini alır. Nashorn’un kendisi %100 Java ile yazılmıştır. Projenin asıl amacı, Java 7’nin yeni MethodHandles ve InvokeDynamic (JSR-292) bayt kodu talimatlarının olasılıklarının test edilmesi gereken Proof-Of-Concept (PoC) olarak adlandırılan bir şeyden çok daha fazlası değildi. Eylül 2011. İyi bir yılın ardından Nashorn’un ilk versiyonu çıktı. Çok hızlı bir şekilde projeyi %100 ECMAScript 5.1 uyumlu hale getirmeyi başardık ve Rhino’nun hızını 2 ila 10 büyüklük sırası ile geçtik.







Performans Rhino – Rino (Kaynak: http://www.slideshare.net/lagergren/lagergren-jvmls2013final)



Ancak hız yalnızca bir yönüdür. Çok daha heyecan verici olan, gerçekten elde edilen ECMAScript uyumluluğudur. ECMA262 testine göre Nashorn %100 puan alırken, Rhino hiçbir zaman %95,90’ı geçmez. Bu, uygulamaları eski temelden Nashorn’a kolayca taşımanıza olanak tanır.

JSR-292 tabanlı Nashorn’dan sonra uzun süre performans konusu hakim oldu. JVM, Java gibi türü kesin olarak belirlenmiş diller için oluşturulmuştur ve JavaScript’i dinamik olarak yazılan bir dil olarak uygulamak bir dizi soruna neden olmuştur. Bunlar da ortadan kalkıyor gibi görünüyor. Bu çok küçük olmayan PoC’nin olumlu bir yan etkisi, JRuby gibi diğer dinamik dillerin de Nashorn tarafından keşfedilen performans optimizasyonlarından faydalanmasıdır.

Rhino şu anda test edilebilir. OpenJDK 8’in Erken Erişim sürümleri, istenen platform için doğrudan indirilebilir ve Nashorn’u tamamen içerir. Tüm proje OpenJDK altında açık kaynak kodludur. Ayrıca yazılıma eşlik eden Java SE 8 Erken Erişim belgeleridir.JavaScript’i Java’ya entegre etmek için birçok kullanım durumu içeren Java Komut Dosyası Programlama Kılavuzu’nu içerir. Gergedanlar için özel olarak tasarlanmış bir varyant zaten var.

Şimdi başka bir şey deneyelim: JDK 8’i herhangi bir dizine kurduktan sonra, Nashorn doğrudan bin/jjs aracılığıyla çalıştırılabilir.

jdk1.8.0bin>jjs
jjs> print("This is a hello from Nashorn");
This is a hello from Nashorn
jjs> quit();

JavaScript dosyaları da doğrudan aktarılabilir.


jdk1.8.0bin>jjs d:temptest.js
This is hello from test.js

Ancak Nashorn’u doğrudan Java’da kullanmak çok daha heyecan verici. Bu, JSR-223 ve javax.script.* API kullanılarak yapılabilir.

public static void main(String[] args) throws Exception {
// Script Engine Manager
ScriptEngineManager factory = new ScriptEngineManager();
// JavaScript Engine Nashorn
ScriptEngine engine = factory.getEngineByName("nashorn");
// Evaluate JavaScript code
engine.eval("print("This is a hello from JavaScript in Java");");
}

Şimdiye kadar gergedan ve gergedan kullanımı arasında temel bir fark yoktur. Yalnızca performans ve uyumluluk önemli ölçüde iyileştirildi. Peki Oracle bunu tam olarak neden yapıyor? Bir PoC için bu kadar çaba mı?

Belki de cevap gerçekten basit bir evettir. Oracle, JVM’yi farklı diller için ortak bir çalıştırma ortamı olarak görmekten keyif aldı. Scala ve JRuby’ye ek olarak, JVM’den yararlanmak isteyen giderek daha fazla JVM dili var. Bellek yönetimine ek olarak, girişimi son derece cazip hale getiren çalışma zamanı optimizasyonlarıdır. Ama başka nedenler de olabilir. Java ve Embedded giderek daha önemli bir rol oynamaktadır. Nashorn da bu platformlarda bulunacak ve Node.js gibi teknolojilerle birlikte daha da geniş bir geliştirici topluluğu için kesinlikle bir alternatif sunacaktır. Yani konu ilginç olmaya devam ediyor. Belki bu yılki JavaOne’da bazı yeni bilgiler olacaktır.

Uygulamanın arkasındaki ayrıntılar hakkında daha fazla bilgi edinmek istiyorsanız, bu yılki JVMLS’den (JVM Dil Zirvesi) bir sunum öneririz. Önde gelen gergedan geliştiricilerinden biri (Marcus Lagergren, @lagergren) Nashorn’u uygulamanın zorluklarından bahsetti. Şu anda Slideshare’de mevcuttur ve daha sonra video dahil OTN’de de mevcut olacaktır.


()




Haberin Sonu



 
Üst