{"id":2229,"date":"2013-09-01T18:43:55","date_gmt":"2013-09-01T16:43:55","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2229"},"modified":"2013-09-01T18:53:24","modified_gmt":"2013-09-01T16:53:24","slug":"alternative-sprachen-fr-die-jvm","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/09\/alternative-sprachen-fr-die-jvm\/","title":{"rendered":"Alternative Sprachen f&uuml;r die JVM"},"content":{"rendered":"<p>Die hochoptimierte JVM und die umfangreichen Java-Bibliotheken lassen sich mittlerweile durch alternative Programmiersprachen nutzen. Auf der einen Seite existieren klassische Interpreter und Compiler f\u00fcr existierende Sprachen, wie Ruby, Prolog, LISP, BASIC, Python, die bestm\u00f6glich auf die Java-Umgebung portiert werden. Auf der anderen Seite sind es ganz neue Programmiersprachen (wie schon das genannte Groovy), die sich als echte Alternative zur Programmiersprache Java etablieren. Skriptsprachen werden oft \u00fcber die JSR 223: Scripting for the Java Platform, einer standardisierten API, angesprochen.<\/p>\n<p>Dieser Abschnitt gibt einen kleinen \u00dcberblick \u00fcber aktuelle Programmiersprachen auf der JVM. Im ersten Teil geht es um existierende Programmiersprache, die auf die JVM gebracht werden.<\/p>\n<h6>JavaScript<\/h6>\n<p>Seit Java 6 ist eine JavaScript-Laufzeitumgebung integriert. Die Script-Engine erlaubt die dynamische \u00dcbersetzung in Bytecode, was schnelle Ausf\u00fchrungszeiten der funktionalen objektorientierten Programmiersprache garantiert.<\/p>\n<h6>JRuby<\/h6>\n<p>JRuby (<a href=\"http:\/\/jruby.org\/\">http:\/\/jruby.org\/<\/a>) ist die Java-Version der dynamisch getypten Programmiersprache Ruby (<a href=\"http:\/\/www.ruby-lang.org\/\">http:\/\/www.ruby-lang.org\/<\/a>). Ruby wird mit einem Atemzug mit dem Web-Framework Ruby on Rails genannt, ein Framework f\u00fcr Web-Applikationen, welches dank JRuby auch auf jedem Tomcat und Java Application-Server l\u00e4uft.<\/p>\n<h6>Jython<\/h6>\n<p>Die beliebte Programmiersprache Python (<a href=\"http:\/\/www.python.org\/\">http:\/\/www.python.org\/<\/a>) bringt Jython (<a href=\"http:\/\/jython.org\/\">http:\/\/jython.org\/<\/a>) auf die Java-Plattform. Auch Jython \u00fcbersetzt Python-Programme in Java-Bytecode und erlaubt relativ schnelle Ausf\u00fchrungszeiten. Jython 2.5 implementiert Python auf 2.5, doch hat sich (C-)Python mit Version 2.7 und 3.3 auch schon weiter entwickelt. Auch sonst gibt es Unterschiede, etwa bei den eingebauten (nativen) Funktionen.<\/p>\n<h6>Quercus<\/h6>\n<p>Quercus (<a href=\"http:\/\/quercus.caucho.com\/\">http:\/\/quercus.caucho.com\/<\/a>) ist eine Implementierung der Programmiersprache PHP, entwickelt von Caucho Technology. Mit Quercus lasen sich viele beliebte PHP-Projekte in einer Java-Umgebung ausf\u00fchren. In der Java-Welt werden zwar nicht alle PHP-Funktionen unterst\u00fctzt, aber daf\u00fcr gibt es in der Java-Welt keine Speicher\u00fcberl\u00e4ufe oder Sicherheitsprobleme.<\/p>\n<h6>Clojure<\/h6>\n<p>Die Programmiersprache Clojure (<a href=\"http:\/\/clojure.org\/\">http:\/\/clojure.org\/<\/a>) ist ein LISP-Dialekt und f\u00e4llt so in die Kategorie der funktionalen Programmiersprachen. Der Compiler erzeugt direkten Byte-Code. F\u00fcr die Kommandozeile gibt es ein kleines Tool (Read-Eval-Print-Loop (REPL)), mit dem jeder erste Versuche von der Kommandozeile machen kann. Seit einiger Zeit gibt es auch Umsetzungen f\u00fcr .NET und JavaScript.<\/p>\n<h6>LuaJava<\/h6>\n<p>Eine Umsetzung der Programmiersprache Lua (<a href=\"http:\/\/www.lua.org\/\">http:\/\/www.lua.org\/<\/a>) f\u00fcr die JVM ist LuaJava (<a href=\"http:\/\/www.keplerproject.org\/luajava\/\">http:\/\/www.keplerproject.org\/luajava\/<\/a>) bzw. Juaj (<a href=\"http:\/\/sourceforge.net\/projects\/luaj\/\">http:\/\/sourceforge.net\/projects\/luaj\/<\/a>). Die aus Brasilien stammende dynamisch getypte Programmiersprache Lua z\u00e4hlt zu den performantesten, interpretierten Skriptsprachen. Sie ist in erster Linie als eingebettete Programmiersprache zur Applikationssteuerung entworfen worden; prominente Nutzer sind Sim City, World of Worcraft, Adobe Photoshop Lightroom, SciTE, weiter unter <a href=\"http:\/\/www.lua.org\/uses.html\">http:\/\/www.lua.org\/uses.html<\/a>.<\/p>\n<h6>JLog<\/h6>\n<p>JLog (<a href=\"http:\/\/jlogic.sourceforge.net\/\">http:\/\/jlogic.sourceforge.net\/<\/a>) implementiert einen ISO-standardisierten PROLOG-Interpreter. JLog l\u00e4uft in einem eigenen Fenster mit Quellcode-Editor, Query-Panel, Hilfe, Debugger, oder es kann in einem eigenen Java-Programm eingebettet werden.<\/p>\n<p>Die Wikipedia-Seite <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_JVM_languages\">https:\/\/en.wikipedia.org\/wiki\/List_of_JVM_languages<\/a> f\u00fchrt weitere Programmiersprachen f\u00fcr die JVM auf. Allerdings sind viele der gelisteten Sprachen f\u00fcr sehr spezielle Anwendungsf\u00e4lle entworfen, experimentell oder werden nicht mehr gepflegt.<\/p>\n<p>Die genannten Implementierungen bringen eine bekannte Sprache auf die Java Umgebung, so dass zum Beispiel Code zwischen Plattformen ausgetauscht werden kann. Es gibt auch komplette Neuentwicklungen f\u00fcr neue Programmiersprachen.<\/p>\n<h6>Groovy<\/h6>\n<p>Groovy bietet eine starke Syntax mit Closures, Listen\/Mengen, regul\u00e4re Ausdr\u00fccke, eine dynamische und statische Typisierung und vielem mehr. Moderne IDEs wie Eclipse oder NetBeans unterst\u00fctzen Groovy durch Plugins (<a href=\"http:\/\/groovy.codehaus.org\/Eclipse+Plugin\">http:\/\/groovy.codehaus.org\/Eclipse+Plugin<\/a>, <a href=\"http:\/\/groovy.codehaus.org\/NetBeans+Plugin\">http:\/\/groovy.codehaus.org\/NetBeans+Plugin<\/a>). Der Groovy-Compiler erzeugt f\u00fcr die Groovy-Klassen den typischen Bytecode, sodass normale Java-Klassen problemlos Groovy-Klassen nutzen k\u00f6nnen \u2013 oder umgekehrt.<\/p>\n<h6>Scala<\/h6>\n<p>Scala ist eine funktionale, objektorientierte Programmiersprache, die in der Java-Community gro\u00dfe Zustimmung findet. Plugins f\u00fcr diverse Entwicklungsumgebungen stehen ebenfalls bereit. Auch f\u00fcr die .NET-Plattform gibt es Implementierung. Besonders zeichnet Scala ein durchdachtes Typsystem aus. F\u00fcr viele Entwickler ist es \u201eJava 2.0\u201c.<\/p>\n<p>In den letzten Jahren sind vermehrt neue JVM-Programmiersprachen aufgetaucht, sie sind vom Sprachdesign auf jeden Fall interessant, finden aber bisher kaum gro\u00dfen Einsatz. Zu diesen z\u00e4hlen etwa Fantom (<a href=\"http:\/\/fantom.org\/\">http:\/\/fantom.org\/<\/a>), Ceylon (<a href=\"http:\/\/ceylon-lang.org\/\">http:\/\/ceylon-lang.org\/<\/a>) oder Gosu (<a href=\"http:\/\/gosu-lang.org\/\">http:\/\/gosu-lang.org\/<\/a>).<\/p>\n<p>Geschichte: Als Java noch unter der Sonne stand, stellte Sun zentrale Entwickler ein, um die Weiterentwicklung von Skriptsprachen unter der JVM zu unterst\u00fctzen. Darunter etwa im M\u00e4rz 2008 Frank Wierzbicki, Hauptentwickler von Jython. Doch schon nach 1,5 Jahren verlie\u00df er Sun wieder.<a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/2\/#_ftn1_8581\" name=\"_ftnref1_8581\">[1]<\/a> Das gleiche Spiel mit den Entwicklern von JRuby, Charles Nutter und Thomas Enebo, die 2006 zu Sun gingen und 2009 das Unternehmen in der Oracle- Akquisationsphase verlie\u00dfen.<a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/2\/#_ftn2_8581\" name=\"_ftnref2_8581\">[2]<\/a> NetBeans bot den besten (J)Ruby-Editor, doch entfernte die Version NetBeans 7.0 die Unterst\u00fctzung komplett.<a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/2\/#_ftn3_8581\" name=\"_ftnref3_8581\">[3]<\/a><\/p>\n<hr align=\"left\" size=\"1\" width=\"33%\" \/>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/2\/#_ftnref1_8581\" name=\"_ftn1_8581\">[1]<\/a> <a href=\"http:\/\/fwierzbicki.blogspot.de\/2009\/11\/leaving-sun.html\">http:\/\/fwierzbicki.blogspot.de\/2009\/11\/leaving-sun.html<\/a><\/p>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/2\/#_ftnref2_8581\" name=\"_ftn2_8581\">[2]<\/a> <a href=\"http:\/\/news.idg.no\/cw\/art.cfm?id=C0D2078D-1A64-6A71-CE889FFB617BA47D\">http:\/\/news.idg.no\/cw\/art.cfm?id=C0D2078D-1A64-6A71-CE889FFB617BA47D<\/a><\/p>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian\/Dropbox\/Eigene Dokumente\/Insel\/2\/#_ftnref3_8581\" name=\"_ftn3_8581\">[3]<\/a> <a href=\"https:\/\/netbeans.org\/features\/ruby\/index.html\">https:\/\/netbeans.org\/features\/ruby\/index.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die hochoptimierte JVM und die umfangreichen Java-Bibliotheken lassen sich mittlerweile durch alternative Programmiersprachen nutzen. Auf der einen Seite existieren klassische Interpreter und Compiler f\u00fcr existierende Sprachen, wie Ruby, Prolog, LISP, BASIC, Python, die bestm\u00f6glich auf die Java-Umgebung portiert werden. Auf der anderen Seite sind es ganz neue Programmiersprachen (wie schon das genannte Groovy), die sich [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-2229","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2229"}],"version-history":[{"count":2,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2229\/revisions"}],"predecessor-version":[{"id":2231,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2229\/revisions\/2231"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}