Dart (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dart
Dart-logo-wordmark.svg
Basisdaten
Paradigmen: Objektorientierte Programmierung
Erscheinungsjahr: 2013 (Vorabversion 2011)
Entwickler: Lars Bak, Gilad Bracha, Kasper Verdich Lund, The Dart Team
Aktuelle Version: 1.3 Sprachspezifikation (25. Juni 2014[1])
1.7.2 SDK und Dart Editor  (15. Oktober 2014 [2])
Typisierung: Optionale Typisierung, Dynamische Typisierung
Beeinflusst von: JavaScript, Scala[3], Strongtalk
Lizenz: Modifizierte BSD-Lizenz
www.dartlang.org

Dart ist eine ECMA-standardisierte[4] Programmiersprache, die hauptsächlich vom Unternehmen Google entwickelt wird. Die Sprache wurde als generelle Vielzweck-Programiersprache entworfen[5], die insbesondere eine moderne Alternative zu JavaScript zur Verwendung in Webbrowsern darstellen soll.[6] Dabei soll Dart einige grundsätzliche Probleme von JavaScript überwinden[7], die sich nach Ansicht der Entwickler von Dart nicht durch eine Weiterentwicklung von JavaScript beheben ließen.

Geschichte[Bearbeiten]

Die Entwicklung von Dart begann im Jahr 2010 in einem kleinen Team rund um Lars Bak, Gilad Bracha und Kasper Verdich Lund in Aarhus. Dart wurde erstmals auf der GOTO-Konferenz am 10. Oktober 2011 in Aarhus vorgestellt.[8]

Die Veröffentlichung der ersten stabilen Version 1.0 erfolgte am 14. November 2013.[9] Am 25. Juni 2014 beschloss die Generalversammlung der ECMA mit Dokument „ECMA-408“ die Standardisierung der Sprachspezifikation.[4]

Laufzeitumgebung[Bearbeiten]

Dart-Programme können im Browser, aber auch auf dem Server ausgeführt werden. Für Browser ohne eigene Dart-VM ist der Dart2js Transcompiler vorgesehen, der Dartcode nach JavaScript übersetzt. Seit der Dart-Version M4 ist der maschinengeschriebene JavaScript-Code im DeltaBlue-Benchmark ebenso schnell wie von der V8-JavaScript-Engine ausgeführter, handoptimierter JavaScript-Code. Direkt in der DartVM ausgeführter Dart-Code ist deutlich schneller als vergleichbarer JavaScript-Code.[10][11] Bemerkenswert daran ist, dass der dafür verwendete Dart-nach-JavaScript-Compiler selbst in Dart geschrieben ist, und der JavaScript-Output beliebigen gültigen Dartcode in optimiertes JavaScript übersetzt. Ein Beispiel für diesen Compiler findet sich auf der Seite try.dartlang.org, die damit auch offline in allen modernen Browsern funktioniert.[12][13]

Derzeit wird an Dartium gearbeitet, einer Chromium-Version, die Dart nativ mit der DartVM unterstützt.[14] Es ist noch kein Termin bekannt, zu dem Chrome oder ein anderer Browser Dart nativ unterstützen soll.

Dart-Anwendungen werden mit einem eigenen Mimetype ausgeliefert, nämlich „application/vnd.dart“.[15]

Das Dart-SDK legt derzeit den Schwerpunkt auf clientseitige Entwicklung. Serverseitige Entwicklung wird beispielsweise mit Bibliotheken wie dart:io unterstützt.[16]

Die „js Library“ ermöglicht die direkte Verwendung von JavaScript-Code in Dart.[17]

Entwicklungsziele[Bearbeiten]

Die Entwicklung von Dart wird von folgenden Zielen geleitet:[18]

  • Entwicklung einer strukturierten, aber auch flexiblen Programmiersprache für das Web.
  • Entwicklung einer leicht erlernbaren, da auf für Programmierer vertrauten Syntax und Techniken beruhenden, Programmiersprache.
  • Sicherstellung, dass alle Sprachkonstrukte eine hohe Leistung und einen schnellen Programmstart ermöglichen
  • Dart sollte vor allem für Geräte geeignet sein, die mit dem Web kommunizieren, wie Telefone, Tablets, Laptops und auch Server.
  • Unterstützung durch Tools, mit deren Hilfe Dart auf allen gängigen Webbrowsern lauffähig ist.

Typisierung[Bearbeiten]

Dart ist optional typisiert. Das bedeutet, dass Dart zwei Runtime-Modi kennt:

  • Im Produktionsmodus sucht sich der Compiler selbständig die jeweils beste Variante und ignoriert sowohl Typisierungsanweisungen als auch Typisierungsfehler. Dieser Modus ist für möglichst effiziente Programmausführung optimiert.
  • Im Checked-Modus werden die Typanweisungen strikt beachtet, und bei Typisierungsfehlern werden Exceptions geworfen. Zudem folgt eine Prüfung auf Assertions. Die aufwendige Codeanalyse macht diesen Modus langsamer als den Produktionsmodus.

Die Vorteile der Typisierungs-Annotationen liegen in der besseren Lesbarkeit für den Menschen und in der deutlich bessere Unterstützung der Programmierer durch die Integrierte Entwicklungsumgebungen oder Editoren wie beispielsweise Codevervollständigung, Navigation und frühzeitige Fehlererkennung. Programmierer die keinerlei Typisierung einsetzen wollen, können ohne Nachteile für den Produktionsmodus darauf verzichten. Nur der JavaScript-Output ist gelegentlich nicht so gut optimierbar wie dies mit Typisierungsanweisungen möglich wäre.[19]

Werkzeuge[Bearbeiten]

Die Programmiersprache wird zusammen mit einer Reihe von Werkzeugen ausgeliefert. Die Basis bildet das Dart SDK. Dieses enthält die Standalone-VM DartVM,[20] einen Dart nach JavaScript-Transcompiler namens dart2js,[21]. Für die Quellcodeanalyse und Quellcodeformatierung sind die Befehlszeilewerkzeuge dartanalyzer und dartfmt enthalten. Seit der Version 1.2 des SDK ist mit docgen ein Software-Dokumentationswerkzeug enthalten. Dartanwendungen basieren auf Pakages und stellen selbst Pakages dar, sobald mindestens eine Programmbibliothek nutzt. Zur Verwaltung der Dartanwendungen wird das Paketverwaltungsystem Pub mitgeliefert.[22]

Annähernd parallel zur Programmiersprache wurde die IDE Dart Editor entwickelt. Dieses Programm basiert auf Eclipse, wurde aber gegenüber diesem deutlich verschlankt[23].

Seit der Version 1.4 wird auch das Analysewerkzeug Observatory für die Einsicht in die Abläufe innerhalb der DartVM bereitgestellt.[24]

Beispiele[Bearbeiten]

Hello Wikipedia[Bearbeiten]

main() {
   //  Ausgabe der Textzeile "Hallo, Wikipedia!"
   print('Hallo, Wikipedia!');
}

Objektorientierte Programmierung[Bearbeiten]

// Mathe Bibliothek für die Wurzel-Funktion einbinden
import 'dart:math' as math;
 
// eine Klasse definieren
class Point {
  Point(num this.x, num this.y); // einen Konstruktor über eine syntaktische Besonderheit definieren
  distanceTo(Point other) { // eine Methode
    methodCalls++;
    num dx = x - other.x;
    num dy = y - other.y;
    return math.sqrt(dx * dx + dy * dy);
  }
  num x, y; // Member-Variablen
  static int methodCalls = 0; // statische Variable
}
 
// eine Unterklasse definieren, die von "Point" erbt
class ColorPoint extends Point {
  ColorPoint(x, y, color) : super(x, y) {
    this.x = x;
    this.y = y;
    this.color = color;
  }
  var color;
}
 
main() {
  Point p = new Point(2, 3);
  Point q = new ColorPoint (3, 4, 'rot');
  print('Abstand von p nach q = ${p.distanceTo(q)} ');
  print('Methoden-Aufrufe = ${Point.methodCalls}');
}
 
// Ausgabe: Abstand von p nach q = 1.41421356237; Methoden-Aufrufe = 1

Literatur[Bearbeiten]

  • Kathy Walrath, Seth Ladd: Dart: Up and Running O'Reilly, 2012, ISBN 978-1-4493-3089-7
  • Martin Piskernig, Programmieren mit Dart, 2014

Weblinks[Bearbeiten]

Quellen[Bearbeiten]

  1. Standard ECMA-408 – Dart Programming Language Specification
  2. Dart 1.7: easily share and use command-line applications built with Dart
  3. Vorlage:Internetquelle/Wartung/Datum nicht im ISO-FormatGoogle shoots Dart at JavaScript. It's really not a JavaScript killer, insists author. 10. Oktober 2011, abgerufen am 15. Oktober 2011 (englisch).
  4. a b ECMA Latest News 25. Juni 2014 (Version vom 1. Juli 2014 im Internet Archive)
  5. Frederic Lardinois in techcrunch.com am 29. Juni 2014: Google’s Dart Programming Language Is Coming To The Server
  6. Vorlage:Internetquelle/Wartung/Datum nicht im ISO-FormatStephen Shankland: Google debuts Dart, a JavaScript alternative. CNET, 10. Oktober 2011, abgerufen am 15. Oktober 2011 (englisch): „"It's not going to replace JavaScript"“
  7. Christian Grobmeier: 10 Punkte, in denen Dart JavaScript übertrifft. 12. Januar 2012, abgerufen am 12. Januar 2012 (deutsch).
  8. Gilad Bracha, Lars Bak: Opening Keynote: Dart, a new programming language for structured web programming. goto Aarhus 2011 International Software Developer Conference, 10. Oktober 2011, abgerufen am 15. Oktober 2011 (englisch).
  9. golem.de am 14. November 2013: Googles Dart 1.0 veröffentlicht
  10. Dart Performance
  11. dart2js: The Dart-to-JavaScript Compiler
  12. TRY DART!
  13. dart2js: The Dart-to-JavaScript Compiler
  14. Google Dart Team: Building Dartium. 12. Januar 2012, abgerufen am 12. Januar 2012 (deutsch).
  15. IANA: IANA Dart Media Type. 12. Januar 2012, abgerufen am 12. Januar 2012 (deutsch).
  16. Command-Line Apps
  17. Vorlage:Internetquelle/Wartung/Datum nicht im ISO-FormatUsing JavaScript from Dart: The js Library. September 2012, abgerufen am 28. Dezember 2012.
  18. Dart An Introduction. 19. Oktober 2011, abgerufen am 15. Oktober 2011 (englisch).
  19. Optional Types in Dart von Gilad Bracha, im Oktober 2011 (aktualisiert im September 2012)
  20. dart: The Standalone VM
  21. dart2js: The Dart-to-JavaScript Compiler
  22. Pub Package and Asset Manager
  23. Dart Editor
  24. Googles JavaScript-Herausforderer: Tiefe Einblicke in den Anwendungscode mit Dart 1.4