Java 8 ve JVM Dilleri
Java Sanal Makinesi (JVM), Java 7 ile başlayan Da Vinci Machine projesiyle, özellikle dinamik tipli dilleri JVM üzerinde çalışabilir kılmaktadır.
Sun Microsystem’in ilk adımlarını attığı bu proje, Oracle firmasıyla beraber de önem verilen bir konu olmaya devam etmektedir. JVM içerisinde statik tipli dilleri çalıştırabilmenin birden fazla amacı bulunmaktadır. Bunlar;
- JIT (Just in Time) Compiler ile yüksek performans sunmak
- Birçok dilin çalıştırılmasıyla JVM’i Polyglot bir ortam haline getirmek
- Farklı dil ve ekosistemleri Java ekosistemine yakınlaştırmak
- Farklı dil ekosistemlerinin gücünü JVM’de birleştirmek
JVM Dilleri
Halihazırda Java Sanal Makinesi üzerinde birçok programlama dili çalıştırılabilmektedir. Bu diller JVM Dilleri Tablosunda olduğu gibidir;
Dil | Uygulayıcı kütüphane |
---|---|
Ada |
JGNAT |
BBx |
BBj is a superset of BBx, PRO/5, and Visual PRO/5. |
C |
C to Java Virtual Machine compilers |
CFML |
Adobe ColdFusion |
Railo |
|
Open BlueDragon |
|
Common Lisp |
Armed Bear Common Lisp |
CLforJava |
|
JavaScript |
Rhino |
Nashorn |
|
Pascal |
Free Pascal |
MIDletPascal |
|
Perl 6 |
Rakudo Perl 6 |
Prolog |
JIProlog |
TuProlog |
|
Python |
Jython |
REXX |
NetRexx |
Ruby |
JRuby |
Scheme |
Bigloo |
Kawa |
|
SISC |
|
JScheme |
|
Tcl |
Jacl |
Kaynak: List of JVM languages
JVM Dilleri Tablosunda listelenen programlama dilleri JVM bünyesinde koşturulabilmektedir. Bazı diller yorumlama usülüyle koşturulurken, bazıları ise bayt koda dönüştürüldükten sonra koşturulmaktadır. Fakat, JavaScript haricindeki dillere karşılık bir uygulayıcı kütüphaneyi projenize eklemeniz gerekmektedir.
Örneğin JVM üzerinde Ruby dili ile uygulama geliştirmek istiyoranız, JRuby bağımlılığını Java projenize eklemelisiniz.
<dependency>
<groupId>org.jruby</groupId>
<artifactId>jruby</artifactId>
<version>1.7.16</version>
</dependency>
Diğer listeli diller için de benzer biçimde gereken bağımlılık Java projenize eklenmelidir.
Fakat, JavaScript programlama dili için olay biraz farklı bir durumda. Çünkü, Java 7 Rhino, Java 8 ise Nashorn isimli JavaScript motorlarını gömülü olarak JVM içerisinde bulundurmaktadır. Bu Java ekosisteminin JavaScript diline ne kadar önem verdiğini ayrıca göstermektedir.
Java Scripting API
Java programlama dili, tüm bu listeli dilleri koşturabilmek için ortak arayüzlerin bulunduğu bir API sunmaktadır. Java Scripting API bileşenleri javax.script
paketi içerisinde bulunmaktadır.
javax.script
paketi oldukça basit arayüz ve sınıflar içermektedir.Bunlardan en önemlisi ScriptEngine
arayüzüdür.
ScriptEngine
ScriptEngine türünden nesneler, ScriptEngineFactory#getEngine
metodu üzerinden eşsiz bir takma isim ile elde edilmektedir. Bu nesneler ile, String türünden kod blokları koşturulabilmekte, ayrıca Java ile iletişim kurulabilmektedir. Örneğin, Nashorn JavaScript motoru için "nashorn"
veya "rhino"
takma adları, Ruby için ise "jruby"
takma adı kullanılmaktadır.
Örneğin;
...
ScriptEngine engine = ScriptEngineFactory.getEngine("nashorn"); (1)
ScriptEngine engine = ScriptEngineFactory.getEngine("rhino"); (2)
ScriptEngine engine = ScriptEngineFactory.getEngine("jruby"); (3)
ScriptEngine engine = ScriptEngineFactory.getEngine("jython"); (4)
...
- Java 8 için JavaScript motoru
- Java 7 için JavaScript motoru
- Ruby için JRuby motoru
- Python için Jython motoru
Nashorn JavaScript Motoru
Nashorn, Java 8 için özel olarak sıfırdan geliştirilen bir JavaScript motorudur. Nashorn, Rhino JavaScript motoruna göre 5 kat daha fazla performans sunmaktadır.
Nashorn JavaScript motoru EcmaScript 5
standardını desteklemekte ve tüm testlerini başarıyla geçmiş bulunmaktadır.
JVM dillerinden Java Scripting API destekleyenler, ScriptEngine#eval
metodu ile kod bloklarını koşturma imkanı elde etmektedir. Bu sayede ortak arayüz bileşenleri üzerinden Java harici diller JVM üzerinde koşturulabilmektedir.
ScriptEngine engine = ScriptEngineFactory.getEngine("nashorn"); (1)
engine.eval("function topla(a,b){ return a + b; }"); (2)
String sonuc=(String)engine.eval("topla(3,5)"); (3)
System.out.println(sonuc); // 8
- Nashorn Engine elde ediliyor.
topla
isimli JavaScript fonksiyonu tanımlanıyor.topla
fonksiyonu Nashorn ile koşturuluyor, ve sonucu elde ediliyor.
Siz de Java Scripting API destekleyen diğer dilleri JVM ekosisteminde koşturabilirsiniz.
Tekrar görüşmek dileğiyle..
Tag:backend
1 Comment