Dart (Programmiersprache)
Dart | |
---|---|
Basisdaten | |
Paradigmen: | Objektorientierte Programmierung |
Erscheinungsjahr: | 2013 (Vorabversion 2011) |
Designer: | Lars Bak, Kasper Lund |
Entwickler: | Lars Bak, Gilad Bracha, Kasper Verdich Lund, The Dart Team |
Aktuelle Version | 3.6.0[1] (11. Dezember 2024) |
Typisierung: | Optionale Typisierung, Dynamische Typisierung |
Standardisierungen: | ECMA-408, 1.11 Sprachspezifikation (19. August 2015[2]) |
Beeinflusst von: | C#, Erlang, JavaScript, Scala,[3] Smalltalk, Strongtalk |
Betriebssystem: | Plattformunabhängig |
Lizenz: | Modifizierte BSD-Lizenz |
dart.dev |
Dart ist eine ECMA-standardisierte[4] Programmiersprache, die hauptsächlich vom Unternehmen Google entwickelt wird. Die Sprache wurde als generelle Vielzweck-Programmiersprache 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 | Quelltext 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 | Quelltext bearbeiten]Dart-Programme können im Browser, aber auch auf dem Server ausgeführt werden. Für Browser ist der Transcompiler Dart2js vorgesehen, der Dartcode nach JavaScript übersetzt. Die „js Library“ ermöglicht die direkte Verwendung von JavaScript-Code in Dart.[10] 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.[11][12] 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.[13][14]
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]
Eine Dart-VM im Browser ist weder in Chrome noch in irgendeinem anderen Browser vorgesehen. Eine eigenständige Dart-VM wird für Mobile Apps, serverseitige Programme und als Tool zur Unterstützung der Programmierer weiterentwickelt. Der Fokus der Weiterentwicklung wird auf eine möglichst hohe Produktivität für Programmierer gelegt.[17]
Entwicklungsziele
[Bearbeiten | Quelltext 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.
Dart Plattformen
[Bearbeiten | Quelltext bearbeiten]Die flexible Kompilierungstechnologie von Dart gibt Entwicklern die Möglichkeit, Dart Code je nach Verwendungszweck auf verschiedene Art und Weisen zu kompilieren.
Dart Native
[Bearbeiten | Quelltext bearbeiten]Dart Native verwendet sowohl JIT (Just-in-time-Kompilierung) als auch AOT (Ahead-of-time-Kompilierung), um Maschinencode für Zielgeräte wie Smartphones, Desktops oder Server zu entwickeln und auf diesen bereitzustellen.
Dart Web
[Bearbeiten | Quelltext bearbeiten]Bei Dart Web kann ein jeweils eigener Compiler während der Entwicklung (dartdevc) und für die schlussendliche Website (dart2js) verwendet werden. Wie der Name bereits vermuten lässt, ist Dart Web für die Entwicklung von Web-Applikationen vorgesehen.[19]
Typisierung
[Bearbeiten | Quelltext 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 besseren Unterstützung der Programmierer durch 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.[20]
Werkzeuge
[Bearbeiten | Quelltext bearbeiten]Dart wird zusammen mit einer Reihe von Werkzeugen ausgeliefert. Die Basis bildet das Dart SDK. Dieses enthält die Standalone-VM DartVM[21] und einen Dart nach JavaScript-Transcompiler namens dart2js.[12] Für die Quellcodeanalyse und Quellcodeformatierung sind die Befehlszeilewerkzeuge dartanalyzer und dartfmt enthalten. Ab der Version 1.2 des SDK ist mit docgen ein Software-Dokumentationswerkzeug enthalten. Dartanwendungen basieren auf Packages und stellen selbst Packages dar, sobald mindestens eine Programmbibliothek verwendet wird. Zur Verwaltung der Dart-Anwendungen wird das Paketverwaltungsystem Pub mitgeliefert.[22]
Ab der Version 1.4 wird auch das Analysewerkzeug Observatory für die Einsicht in die Abläufe innerhalb der DartVM bereitgestellt.[23]
Beispiele
[Bearbeiten | Quelltext bearbeiten]Hallo Wikipedia
[Bearbeiten | Quelltext bearbeiten]main() {
// Ausgabe einer Textzeile
print('Hallo, Wikipedia!');
}
Objektorientierte Programmierung
[Bearbeiten | Quelltext bearbeiten]// Mathematik-Bibliothek für die Wurzel-Funktion einbinden
import 'dart:math' as math;
// eine Klasse definieren
class Point {
// einen Konstruktor über eine syntaktische Besonderheit definieren
Point(num this.x, num this.y);
// eine Methode
double distanceTo(Point other) {
methodCalls++;
num dx = x - other.x;
num dy = y - other.y;
return math.sqrt(dx * dx + dy * dy);
}
// Member-Variablen
num x, y;
// statische Variable
static int methodCalls = 0;
}
// eine Unterklasse definieren, die von "Point" erbt
class ColorPoint extends Point {
ColorPoint(x, y, this.color): super(x, y);
var color;
}
main() {
Point p = Point(2, 3);
Point q = 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 | Quelltext bearbeiten]- Kathy Walrath, Seth Ladd: Dart: Up and Running O’Reilly, 2012, ISBN 978-1-4493-3089-7
- Martin Piskernig, Programmieren mit Dart, 2014
- Dieter Meiller, Moderne App-Entwicklung mit Dart und Flutter: Eine umfassende Einführung, 2020, ISBN 978-3-11-069064-4
Weblinks
[Bearbeiten | Quelltext bearbeiten]- Offizielle Website
- Googles neue Programmiersprache bei Heise Developer (10. Oktober 2011)
- Ein Jahr JavaScript-Konkurrent Dart bei Heise Developer (12. Oktober 2012)
- Eine deutschsprachige Einführung in Dart Teil I und Teil II
Quellen
[Bearbeiten | Quelltext bearbeiten]- ↑ Release 3.6.0.
- ↑ Standard ECMA-408 – Dart Programming Language Specification 4th Edition
- ↑ Google shoots Dart at JavaScript. It's really not a JavaScript killer, insists author. 10. Oktober 2011, abgerufen am 15. Oktober 2011 (englisch).
- ↑ a b ECMA Latest News 25. Juni 2014 ( vom 1. Juli 2014 im Internet Archive)
- ↑ Frederic Lardinois in techcrunch.com am 29. Juni 2014: Google’s Dart Programming Language Is Coming To The Server
- ↑ Stephen Shankland: Google debuts Dart, a JavaScript alternative. CNET, 10. Oktober 2011, abgerufen am 15. Oktober 2011 (englisch): „"It's not going to replace JavaScript"“
- ↑ Christian Grobmeier: 10 Punkte, in denen Dart JavaScript übertrifft. 13. Januar 2012, abgerufen am 18. Mai 2016.
- ↑ 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).
- ↑ golem.de am 14. November 2013: Googles Dart 1.0 veröffentlicht
- ↑ Using JavaScript from Dart: The js Library. September 2012, abgerufen am 28. Dezember 2012.
- ↑ Dart Performance ( vom 3. Januar 2017 im Internet Archive)
- ↑ a b dart2js: The Dart-to-JavaScript Compiler
- ↑ TRY DART!
- ↑ dart2js: The Dart-to-JavaScript Compiler
- ↑ IANA: IANA Dart Media Type. 14. Dezember 2011, archiviert vom am 1. Oktober 2014; abgerufen am 14. Juli 2019.
- ↑ Command-Line Apps
- ↑ Lars Bak, Kasper Lund: Dart for the Entire Web 25. März 2015
- ↑ Dart An Introduction. 19. Oktober 2011, ehemals im ; abgerufen am 15. Oktober 2011 (englisch). (Seite nicht mehr abrufbar. Suche in Webarchiven) (nicht mehr online verfügbar)
- ↑ Dart Plattoformen (englisch). Archiviert vom am 26. Juli 2019; abgerufen am 7. August 2019.
- ↑ Optional Types in Dart von Gilad Bracha, im Oktober 2011 (aktualisiert im September 2012)
- ↑ dart: The Standalone VM
- ↑ Pub Package and Asset Manager
- ↑ Googles JavaScript-Herausforderer: Tiefe Einblicke in den Anwendungscode mit Dart 1.4