JAXenter.de

Das Portal für Java, Architektur, Cloud & Agile
X

#Docker-Woche auf JAXenter: Top-Artikel, Tutorials & Videos in unserem Docker-Special!

JavaScript auf der JAX 2013

"JavaScript ist unter meiner Würde"

„JavaScript – klar, kann ich! Gehört ja auch nix dazu. Ist ja so ne Skript-Sprache für Designer, wie CSS und HTML. Damit die ein paar Codeschnipsel in ihr HTML kopieren können, damit die Animationen machen können. Für richtige Entwickler ist das aber nichts. Als Sprache ist JavaScript jedenfalls furchtbar: keine Typen, keine Klassen, keine Vererbung... Versehentlich kann man da schnell mal eine falsche globale Variable erzeugen. Modularisierung und Kapselung gehen auch nicht. Coole Sprachfeatures  - Fehlanzeige! Außerdem spricht da noch jeder Browser seinen eigenen Dialekt – und langsam ist das ganze auch noch. Für langlebige, große Projekt, mit denen wir richtigen Entwickler es zu tun haben, ist JavaScript jedenfalls absolut ungeeignet.“

Wenn Sie bei der oberen Tirade über JavaScript das eine oder andere Mal zustimmend genickt haben, dann sollten Sie weiter lesen. Denn offensichtlich waren Sie nicht auf dem JavaScript Day der JAX, der gründlich mit diesen Vorurteilen aufzuräumen wusste. Nun – jedenfalls haben das die 6 Speaker Kai Tödter, Marcus Lagergren, Tobias Bosch, Stefan Scheidt, Oliver Zeigermann und Jörn Zaefferer versucht – denn bei dem ein oder anderen Punkt macht es uns die Nr.1-Script-Sprache des Webs in der Tat nicht gerade einfach, geliebt zu werden...

Punkt, Komma, Strich – JavaScript programmier’ ich nicht!

Sich vom typischen JavaScript-Verachter zum JavaScript-Befürworter entwickelt hat sich Speaker Oliver Zeigermann, der uns seine Wandlung vom JS-Saulus zum JS-Paulus in seiner Session „Schmerzfreies JavaScript für Java-Entwickler“ fast schon missionarisch nahe brachte.
 
„Früher habe ich JavaScript geradezu verachtet.  Jetzt find’ ich JavaScript gut.“
 
Doch wie beim „schmerzfreien Zahnarzt“ ist auch das „schmerzfreie JavaScript“ auf einer Java-Konferenz ein Oxymoron - eine Kombination zweier nicht zusammengehörender Begriffe, ein Unding, fast schon eine Provokation. Dass viele Java-Entwickler schmerzvolle Erfahrungen mit JavaScript gemacht haben, liegt laut Zeigermann aber nicht an der Sprache selbst, sondern an dem Umstand, dass sich Entwickler meist ohne große Kenntnis an JavaScript versuchen - und scheitern. Denn, obwohl alles „irgendwie so ähnlich“ wie Java, C++ oder PHP aussieht, funktioniert JavaScript eben doch oft anders. Gelegen kommen einem dann technische Argumente, die sich aber meist als Ausreden entlarven lassen. Einige Kostproben aus Zeigermanns JS-Apologie:
 
1.     JavaScript hat keine Typen
 
Es stimmt natürlich, dass JavaScript als dynamische Sprache keine Typenüberprüfung zur Compile-Zeit vornimmt. Allerdings steht mit der Anweisung typeof ein Operator zur Verfügung, mit dem sich Informationen über Typen gewinnen lassen. typeof wertet in JavaScript die Operanden boolean, string,  number, function, object und undefined hinsichtlich seines Typs aus. „if (typeof objekt == "typ")“
 
2.     In JavaScript gibt es keine Kapselung


Falsch: Über das „Scope-Konstrukt“ können in JavaScript gezielt Sichtbarkeitsbereiche definiert werden (innerhalb geschweifter Klammern). Das funktioniert für Variablen und Funktionen, die entweder global oder innerhalb eines lokalen Scope gelten.

3.     JavaScript hat keine coolen Sprachfeatures

Seit ECMAScript 5 gibt es in JavaScript beispielsweise Closures – ein Feature, auf das die Java-Community immer noch wartet.  Zeigermanns Kommentar: „Wenn Ihr findet, dass Java 8 mit Projekt Lambda ein cooles Feature einführt, dann hat JavaScript auch coole Features.“
 
4.     JavaScript ist langsam
 
Bei den heutigen Hardware-Ressourcen ist JavaScript für die meisten Anwendungszwecke gerüstet. Etliche HTML5-Demos stellen dies unter Beweis – auf der JAX-Keynote-Bühne führte Zeno Rocha (Liferay) beispielsweise ein JavaScript-3D-Rennspiel vor.
 
5. Es gibt keine guten JS-Entwickler-Tools
 
Zeigermann empfiehlt hier WebStorm. Auch die Chrome Dev-Tools sind möglich. Eclipse? „Geht ein bisschen.“
 
6.     Jeder Browser spricht seinen eigenen JavaScript-Dialekt
 
Dieses Vorurteil stimmt nicht mehr seit dem IE 9. Denn moderne Browser unterstützen allesamt den ECMAScript-5-Standard. Da allerdings immer noch ältere Browser im Einsatz sind, kann man diesen Punkt wohl nicht ganz entkräften.
 
Und so weiter und so fort. Zeigermann führte auch vor, wie sich in JavaScript Vererbung ausdrücken lässt – allerdings war hier schon etwas Aufwand nötig.  Und für alle, die sich noch immer nicht überzeugen ließen, hatte Zeigermann noch ein „Bonus-Vorurteil“ im Gepäck:
 
„JS ist nicht gut geeignet für große, langlebige Projekte“
 
Diese Auffassung ist laut Zeigermann mit reinem JavaScript nicht so einfach aus der Welt zu schaffen. Denn das Fehlen der statischen Typisierung bringt es mit sich, dass IDEs nie 100%ig anzeigen können, wo genau ein bestimmter Codeteil ausgeführt wird – hierfür gibt es nur mehr oder weniger gute Annäherungen. Und wenn dann nach 5 Jahren das Projektteam wechselt, der JS-Code ohnehin nicht sauber programmiert wurde und dann Variablen geändert werden...
 
Allerdings könnte die JavaScript-Erweiterung TypeScript hier eine Wende einleiten. TypeScript wurde von Microsoft genau in Hinblick auf Robustheit und Wartbarkeit entwickelt. Kein geringerer als Anders Hejlsberg, seines Zeichens Erfinder von Turbo Pascal und C#, steht hinter der Programmiersprache. TypeScript ist kein neuer Dialekt wie CoffeeScript sondern fügt JavaScript lediglich Features – wie eben beispielsweise ein Typensystem - hinzu. JavaScript ist in TypeScript also als Untermenge enthalten, übersetzt wird TypeScript-Code nach reinem JavaScript – und dieses JavaScript ist clean und gut lesbar (Zeigermann: „anders als z.B. bei GWT“).

JavaScript - das hässliche Entlein?

JavaScript hat einen schlechten Ruf – das aber nicht aus eigener Schuld, sondern weil es zu selten ernst genommen wird, so lautete das Fazit Zeigermanns. Wer sich ein wenig Mühe gibt, wird JavaScript verstehen und, wenn nicht lieben lernen, dann doch bemerken, dass er sich mit JavaScript in einem spannenden Umfeld bewegt: Die Community ist riesig, genauso wie die Anzahl der exzellenten Frameworks, angefangen bei jQuery (Zocha hatte das Projekt in seiner Keynote „den Justin Bieber der Webentwickler“ genannt – beliebter als JavaScript selbst),  über Twitter Bootstrap für responsive Layouts, Jasmine zum Testen, Ext JS für Business-Anwendungen bis hin zu Angular.js („Wie würde HTML aussehen, wenn man es für Anwendungen entwickelt hätte“?)

JavaScript is horrible!

Dass JavaScript insbesondere für die Java-Community interessant wird, zeigte Marcus Lagergren, einer der Hauptentwickler des Nashorn-Projektes bei Oracle, in seiner Keynote „Project Nashorn – and why Dynamic Languages on the Java Platform really matter“ und seiner anschließenden technischen Session. Lagergren arbeitet im Projekt Nashorn an einer völligen Neuimplementierung einer JavaScript Engine für die JVM. Und in dieser Rolle ist ihm der Schmerz wohl ein vertrautes Gefühl. Lagergrens Kommentar: „JavaScript is horrible!“
 
Allerdings hat er als JavaScript-Implementierer ganz andere Schmerzgrenzen als etwa ein reiner Web-Entwickler. Die Ambitionen des Nashorn-Teams sind nämlich groß: die beste JavaScript Runtime überhaupt abzuliefern! Und tatsächlich ist die aktuelle Nashorn-Version bereits 100% ECMAScript-5-Testsuite kompatibel, sagt Lagergren. Die bisher für die Java-Community relevante Rhino-Implementierung von Mozilla erreicht hier nur 94% - außerdem ist sie „alt und langsam“.
 
Aber zurück zu Lagergrens Schmerzen: Die gesamten JavaScript-Specs umzusetzen, stelle eine riesige Herausforderung dar. „JavaScript hat einfach so viele Ausnahmen“. Vor allem das Prototypen-System sei furchtbar komplex umzusetzen. Um das ganze dann auch noch auf der JVM laufen zu lassen, sind zahlreiche findige Konstruktionen nötig. Denn „Es gibt Sprachen, die passen gut zur Struktur der JVM, wie beispielsweise Scala. Und es gibt Sprachen wie Ruby und JavaScript, die weniger gut zu Bytecode passen.“ Möglich wird so etwas wie Nashorn eigentlich erst durch die in Java 7 eingeführte invokedynamic-Konstruktion, mit der die Begrenzungen reiner Java Calls aufgebrochen werden können.
 
Nashorn sieht sich in diesem Kontext sogar als Referenz-Code und Beweis für die Tauglichkeit des invokedynamic-Konzeptes. Und damit ist laut Lagergren erst ein Anfang gemacht. Die zukünftige VM bewege sich weg von einer „Java Virtual Machine“ hin zu einer „Multi Language Runtime“ – spannend!

Der Vorteil von Nashorn gegenüber nativem JavaScript liegt in seiner Interoperabilität mit Java. Hier profitiert Nashorn von seiner JVM-Basis, mit der beispielsweise die Portierbarkeit auf verschiedenste Hardware-Plattformen gegeben ist. Raspberry Pi? Kein Problem für das Nashorn!

Ziel der Nashorn-Entwickler ist es jedenfalls, das schwergewichtige Rhinozerus Rhino in ein schlankes Nashorn zu verwandeln – was Lagergren in seiner Keynote schön mit den folgenden Slides veranschaulichte:
 

Das wohlgenährte Rhino...

 ...soll zum schlanken Nashorn werden.

Schon jetzt zeigt Nashorn gute Performanz-Werte – und das, obwohl die volle ECMAScript-Kompatibilität wohl der einen oder anderen Optimierung im Wege stand: „Entweder man ist performant, oder man ist kompatibel“. Doch nun, da die Kompatibilität erreicht sei, steht bis zum finalen Release als Teil von Java 8 vor allem eines an: „Performance, Performance, Performance“. Nashorn sei ein schmales, 1MB großes Paket, das sich weiter entschlacken lasse. Das Projekt Jigsaw – wenn es denn einmal kommt – könne hierbei helfen, meinte Lagergren.

Ebenfalls im Fokus liegen der Feinschliff der Librarys, ein Lazy Execution API, Value Representations, Permgen Removal und Multithreading. Am Start sind außerdem eine node.js-Variante für Nashorn: node.jar, die Dynalink-Library zur Manipulation von Objekten mittels invokedynamic sowie das ASM Bytecode and Class Manipulation Framework.
 
Nashorn ist komplett an den neuesten Java-8-Builds orientiert und wird zusammen mit Java 8 im März 2014 erscheinen. Doch wird Nashorn eigentlich auch mit Java 7 zusammen harmonieren? Diese Frage aus dem Publikum beantwortete Lagergren mit einem leichten Zögern. Ja, geplant sei ein Backport auf Java 7 – allerdings hofft Lagergren, dass die derzeit laufenden Sicherheits-Fixes für Java diesem Vorhaben keinen Strich durch die Rechnung machen...

Karrierefaktor JavaScript

Sie sehen, da braut sich etwas zusammen rund um das Thema JavaScript. Auch wenn sich die Schmerzen bei den ersten JavaScript-Gehversuchen wohl nicht ganz vermeiden lassen – wer sich als Java-Entwickler jetzt intensiv mit JavaScript beschäftigt, investiert in einen Technologie-Zweig mit Zukunft.
 
Und so ist auch das große Interesse am JavaScript Day der JAX zu verstehen. Auf dem Programm standen neben den genannten Sessions von Lagergren und Zeigermann noch: „Cross-Plattform-Web-Apps mit jQuery Mobile“ mit Kai Tödter, „Oberflächentests für JavaScript-Web-Apps“ mit Tobias Bosch und Stefan Scheidt und “Talk to me“ mit Jörn Zaefferer.
 
Kommen wir zum Schluss nochmals auf Oliver Zeigermanns „Schmerzfreies JavaScript“ zurück. Am Anfang seiner Session hatte Zeigermann gefragt, wer im Publikum JavaScript für eine gute Sprache halte. Nur wenige Hände gingen nach oben. Dieselbe Frage stellte er am Schluss seiner Session. Nun, zwar konnte nicht der gesamte Saal JavaScript-missioniert werden, aber immerhin einige Hände mehr als zu Beginn der Session waren zu sehen.
 
Bei der Frage allerdings, wer JavaScript für eine Sprache hält, die man gut für die eigene Karriere gebrauchen kann, war sich der Saal einig. Sowohl vor als auch nach Zeigermanns Bekehrungsversuch reckten fast alle Besucher ihre Hände in die Höhe...

 

Kommentare

von Timo Reitz (Unveröffentlicht) am
"Seit ECMAScript 5 gibt es in JavaScript beispielsweise Closures – ein Feature, auf das die Java-Community immer noch wartet." - Ich bin mir ziemlich sicher, dass JS schon immer Closures als Feature beinhaltete. Absolut sicher bin ich aber, dass sie ab ECMAScript 3 enthalten sind, also mindestens seit 13 Jahren.

von Markus (Unveröffentlicht) am
Guter Artikel, habe zwar noch nicht so viel JavaScript gemacht, aber das hört sich gut an und werde mich auch mal mit JavaScript befassen.

Ihr Kommentar zum Thema

Als Gast kommentieren:

Gastkommentare werden nach redaktioneller Prüfung freigegeben (bitte Policy beachten).