Donnerstag, 24. Mai 2012


Artikel

Oktober 2011 | Artikel

Google Dart

(Link zum Artikel: http://www.entwickler.de/jaxenter//004121)

Neuer Ansatz für Web-Entwicklung

Text: Eberhard Wolff
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Die Client-Teile der Web-Anwendungen werden immer komplexer. Für ihre Implementierung gab es mit JavaScript zwar bisher eine Lösung, die aber nicht für so komplexe Anwendungen gedacht war. Nun hat Google dafür eine neue Programmiersprache vorgestellt, nämlich Dart.
Teil 1   Teil 2   Teil 3   

Eine Warnung vorab: Dart ist im Moment eine Technologie-Preview. Vieles fehlt noch und vieles kann und wird sich ändern. Das ist auch eine Chance: Dart ist jetzt herausgekommen, um das Feedback der Community in Dart einzubauen. Feedback können Sie an die Entwickler von Dart weitergeben, zum Beispiel durch die Dart User Discussion Group oder das Einstellen von Fehlern in den Issue Tracker.

Google Dart auf der W-JAX

Die Nerven der Google-Programmierer waren gespannt wie Dart-Seile, als sie ihre Sprache der Welt vorstellten. Immerhin wurde Dart entwickelt, um JavaScript den Garaus zu machen. Seitdem hagelt es skeptische und höhnische Bemerkungen. Gleichzeitig gibt es aber schon gewisse Leute, die bereits Dart-Dienstleistungen anbieten. Und das, obwohl eigentlich noch gar nicht alles funktioniert. Wie ist also der Stand der Dinge? Und - werden wir Java-Entwickler Dart hassen oder lieben? Dieser Talk auf der W-JAX von Christian Grobmeier gibt eine recht subjektive Einschätzung, aufgepeppt mit eine paar Folien.

Hinter Dart steht ein Team bei Google. Zu diesem Team gehört Lars Bak. Er hatte zuvor wesentlichen Anteil an der HotSpot Java VM und arbeitet nun an der V8 JavaScript VM, die in Google Chrome genutzt wird und das Rennen um höhere JavaScript-Performance eröffnet hat. Ein weiteres wichtiges Mitglied des Teams ist Gilad Bracha. Er hatte zuvor unter anderem an der Java Language Specification und an der Java Virtual Machine Specification gearbeitet.

Warum Dart?

Für das Dart-Projekt gibt es verschiedene Gründe: Immer mehr Anwendungen lassen Logik im Browser ausführen. Dieses Modell wird in Zukunft durch HTML5 sogar noch wichtiger werden. Allerdings hieß es bei der Einführung von Dart auf der Goto Konferenz, dass Dart keine Konkurrenz zu JavaScript sein soll, sondern es um den fragmentierten mobilen Markt geht. Eine mögliche Interpretation dieser Aussage ist, das durch Dart HTML5-Oberflächen noch wichtiger für mobile Endgeräte werden sollen, so dass alle Plattformen mit einer einheitlichen Code-Basis bedient werden können. Eine andere Interpretation ist, dass Dart langfristig auf der Android-Plattform Java verdrängen soll. Vor allem wegen der gerichtlichen Auseinandersetzung zwischen Google und Oracle wegen Java ist es sicher gut für Google, dazu noch eine Alternative zu haben.

Interessant ist Dart auch, weil die Sprache explizit darauf ausgelegt ist, für Entwickler möglichst leicht erlernbar und nutzbar zu sein. Dazu sind einige sehr interessante Entscheidungen getroffen worden.

Als Ablaufumgebung kann Dart JavaScript nutzen. Dazu wird der Dart-Code in JavaScript übersetzt. Diesen Ansatz hatte Google mit GWT (Google Web Toolkit) schon für Java implementiert. So kann Dart auf jedem Browser laufen. Zur Zeit werden Chrome, Safari und Firefox unterstützt. Die Kompilierung in JavaScript-Code ist im Moment noch nicht besonders effizient – weder in Bezug auf die Größe des generierten Codes noch in Bezug auf die Laufzeiteffizienz. Laut Lars Bak soll die Performance aber schon vergleichbar sind mit der JavaScript-Performance der ersten Versionen der V8-JavaScript-VM. In diesem Bereich wird sicher noch einiges optimiert.

Einfache Beispiele

Wer Dart ausprobieren will, sollte sich die Dart-Web-Site anschauen. Dort gibt es einige Beispiele, die direkt im Browser laufen können. Dabei wird der Dart-Code mit Hilfe eines Server in JavaScript kompiliert, der auf der Google App Engine läuft, und dann ausgeführt. Schon ein Blick auf das Hello World (Listing 1) zeigt, dass Dart sich in die Tradition der C-Sprachen einreiht, zu denen ja auch Java und JavaScript gehören. Entwickler, die Sprachen aus dieser Familie beherrschen, finden sich recht schnell zurecht.

  1. main() {
  2. print('Hello, Dart!');
  3. }

Listing 1 Hello World

Das etwas komplexere Beispiel in Listing 2 zeigt in der main-Methode eine abkürzende Schreibweise mit => für einzeilige Funktionsdefinitionen. Außerdem zeigt es Funktionen und typisierte Variablen sowie Templates für die Ausgabe.

  1. int fib(int n) {
  2. if (n <= 1) return n;
  3. return fib(n - 1) + fib(n - 2);
  4. }
  5. main() => print('fib(20) = ${fib(20)}');

Listing 2 Fibonacci-Zahlen

Objekt-Orientierung mit Dart

Listing 3 zeigt ein Beispiel für Objekte-Orientierung. Es wird eine Klasse Person mit den beiden Instanz-Variablen name und firstname definiert. Der Konstruktor Person(this.name) ist eine kompakte Schreibweise dafür, dass der erste Parameter des Konstruktors der Instanz-Variable name zugewiesen werden soll. Methoden wie auch Konstruktoren können nicht überladen werden. Es ist also nicht möglich, zwei Methoden mit demselben Namen und unterschiedlichen Parametern zu definieren. Daher gibt es einen zweiten Konstruktor mit einem anderen Namen.

  1. class Person {
  2. String name;
  3. String firstname;
  4. Person(this.name);
  5. Person.withFirstname(this.firstname,this.name);
  6. }
  7. main() {
  8. Person p = new Person.withFirstname('Gilad','Bracha');
  9. print('Hi ${p.firstname} ${p.name}');
  10. }

Listing 3 Objekt-Orientierung in Dart

Neben Konstruktoren können Objekt auch mit Hilfe von Factories erzeugt werden. Verschiedene Factory-Ansätze gehörten schon zu den ersten dokumentierten Design Patterns. Aber in Dart wird dieser Ansatz direkt in der Sprache unterstützt. Ebenfalls gibt es eine Unterstützung für Interfaces. Listing 4 zeigt ein Beispiel: Es wird ein Interface Person mit der Factory PersonFactory definiert. Abhängig von dem Konstruktor-Parameter wird eine konkrete Klasse instanziiert. In der Benutzung unterscheidet sich eine Factory nicht von einem Konstruktor-Aufruf. Es scheint also so, als ob ein Interface instanziiert wird. Der Factory-Ansatz wird auch für Klassen unterstützt. Mit Factories ist die Instanziierung von Objekte praktisch beliebige änderbar –Singletons, Caches und andere Trick können für den Nutzer der Klassen transparent implementiert werden.

Teil 1   Teil 2   Teil 3   

Kommentare

Gravatar Henning 17.10.2011
um 13:39 Uhr
Das wohl prägnanteste Fazit zum Thema Dart hat jQuery-Erfinder John E. Resig (@jeresig) auf Twitter geliefert:

"Why is Google putting time and effort into changing JavaScript when the DOM is what needs fixing?"

(https://twitter.com/#!/jeresig/status/124114331616026624)
#zitieren
Gravatar Eberhard Wolff 18.10.2011
um 15:23 Uhr
Nachtrag: Unter http://code.google.com/p/jdart/ organisiert sich gerade ein Projekt für Dart auf der Java Virtual Machine (JVM). #zitieren
Gravatar Sascha 20.10.2011
um 17:53 Uhr
Jaaa,

endlich! Eine neue Programmiersprache! Alles wird besser! Weniger Aufwand! Es wird schneller! Gut, man muss nur wieder was neues lernen. Gut, wird sicher etwas dauern, bis das ganze stabil ist. Gut, wird sicher etwas dauern bis die Dinge, die dann noch fehlen, nachgeliefert sind. Aber hey, es ist NEU! JA!

;-)

Und im Ernst: wenn es alles soviel gäbe, wie neue revolutionäre Programmiersprachen...Bin ich der Einzige, den das mittlerweile einfach nur noch nervt?
#zitieren
Gravatar GentleKnight 21.10.2011
um 11:49 Uhr

Und im Ernst: wenn es alles soviel gäbe, wie neue revolutionäre Programmiersprachen...Bin ich der Einzige, den das mittlerweile einfach nur noch nervt?


Kann Dir da nur zustimmen, dieser ganze Sprachenhype ist langsam einfach nur lästig. In Unternehmen hält das eh keinen Einzug, weil viel zu unproduktiv und riskant (eine Software, die 10 Jahre laufen muss wegen Gewährleistung gegenüber Kunden), wird nicht etwas einsetzen, was vielleicht nächstes Jahr schon wieder verschwunden ist.
Aber für die vielen Hobby-Entwickler muss es doch immer viele neue Spielsachen geben ;-)))
#zitieren
Gravatar JavaScript? Nein Danke. 30.10.2011
um 17:21 Uhr
> Immerhin wurde Dart entwickelt, um JavaScript den Garaus
> zu machen. Seitdem hagelt es skeptische und höhnische
> Bemerkungen.

Oh je, so einen Kollegen habe ich auch. Hoffe Google lässt sich dadurch nicht davon abhalten, diesem JavaScript endlich den Garaus zu machen. Schlechter als JavaScript kann Dart eigentlich nicht werden.
#zitieren
Gravatar JavaScript? Nein Danke. 30.10.2011
um 17:26 Uhr
> Aber hey, es ist NEU! JA!

Nein. Es ist endlich eine Alternative zu JavaScript. Server- oder Desktop-Anwendungen kann man in C, C++, Java, C# oder sonstwas schreiben, je nach Anforderung oder persönlicher Vorliebe. Browseranwendungen muss man dagegen gezwungenermaßen in JavaScript schreiben, weil es keine Alternative gibt. Ich z.B. finde JavaScript scheiße und bin mit dieser Meinung wohl nicht alleine.
#zitieren
Gravatar JavaScript? Nein Danke. 30.10.2011
um 17:30 Uhr
> "Why is Google putting time and effort into changing
> JavaScript when the DOM is what needs fixing?"

Ja was erwartest du? Die "About Me" Seite seines Blogs sagt doch alles:

"John Resig is the Dean of Open Source and head of JavaScript development at Khan Academy and the author of the book Pro JavaScript Techniques. He’s also the creator and lead developer of the jQuery JavaScript library."

Er ist der JavaScript-Guru. All sein Wissen wird wertlos, wenn es JavaScript nicht mehr gibt.
#zitieren