Dart (Programmiersprache)
| Dart | |
|---|---|
| colspan="2" class="notheme" style="text-align:center; background-color:#Vorlage:Standardfarbe;" | Datei:Dart programming language logo.svg | |
| Basisdaten | |
| Paradigmen: | Objektorientierte Programmierung |
| Erscheinungsjahr: | 2013 (Vorabversion 2011) |
| Designer: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Entwickler: | Lars Bak, Gilad Bracha, Kasper Verdich Lund, The Dart Team |
| Aktuelle Version | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) (Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)) |
| Typisierung: | Optionale Typisierung, Dynamische Typisierung |
| Standardisierungen: | ECMA-408, 1.11 Sprachspezifikation (19. August 2015<ref>Standard ECMA-408 – Dart Programming Language Specification 4th Edition</ref>) |
| Beeinflusst von: | C#, Erlang, JavaScript, Scala,<ref>Google shoots Dart at JavaScript. It's really not a JavaScript killer, insists author. 10. Oktober 2011, abgerufen am 15. Oktober 2011 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Smalltalk, Strongtalk |
| Betriebssystem: | Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value) |
| Lizenz: | Modifizierte BSD-Lizenz |
| dart.dev | |
Dart ist eine ECMA-standardisierte<ref name="ecma"><templatestyles src="Webarchiv/styles.css" />ECMA Latest News 25. Juni 2014 ( vom 1. Juli 2014 im Internet Archive)</ref> Programmiersprache, die hauptsächlich vom Unternehmen Google entwickelt wird. Die Sprache wurde als generelle Vielzweck-Programmiersprache entworfen,<ref>Frederic Lardinois in techcrunch.com am 29. Juni 2014: Google’s Dart Programming Language Is Coming To The Server</ref> die insbesondere eine moderne Alternative zu JavaScript zur Verwendung in Webbrowsern darstellen soll.<ref>Stephen Shankland: Google debuts Dart, a JavaScript alternative. CNET, 10. Oktober 2011, abgerufen am 15. Oktober 2011 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)): „"It's not going to replace JavaScript"“</ref> Dabei soll Dart einige grundsätzliche Probleme von JavaScript überwinden,<ref>Christian Grobmeier: 10 Punkte, in denen Dart JavaScript übertrifft. 13. Januar 2012, abgerufen am 18. Mai 2016.</ref> die sich nach Ansicht der Entwickler von Dart nicht durch eine Weiterentwicklung von JavaScript beheben ließen.
Geschichte
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.<ref>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 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>
Die Veröffentlichung der ersten stabilen Version 1.0 erfolgte am 14. November 2013.<ref>golem.de am 14. November 2013: Googles Dart 1.0 veröffentlicht</ref> Am 25. Juni 2014 beschloss die Generalversammlung der ECMA mit Dokument „ECMA-408“ die Standardisierung der Sprachspezifikation.<ref name="ecma" />
Laufzeitumgebung
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.<ref>Using JavaScript from Dart: The js Library. September 2012, abgerufen am 28. Dezember 2012.</ref> 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.<ref><templatestyles src="Webarchiv/styles.css" />Dart Performance ( vom 3. Januar 2017 im Internet Archive)</ref><ref name="dart2js">dart2js: The Dart-to-JavaScript Compiler</ref> 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.<ref>TRY DART!</ref><ref>dart2js: The Dart-to-JavaScript Compiler</ref>
Dart-Anwendungen werden mit einem eigenen Mimetype ausgeliefert, nämlich „application/vnd.dart“.<ref>IANA: IANA Dart Media Type. 14. Dezember 2011, archiviert vom Vorlage:IconExternal am 1. Oktober 2014; abgerufen am 14. Juli 2019.</ref>
Das Dart-SDK legt derzeit den Schwerpunkt auf clientseitige Entwicklung. Serverseitige Entwicklung wird beispielsweise mit Bibliotheken wie dart:io unterstützt.<ref>Command-Line Apps</ref>
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.<ref>Lars Bak, Kasper Lund: Dart for the Entire Web 25. März 2015</ref>
Entwicklungsziele
Die Entwicklung von Dart wird von folgenden Zielen geleitet:<ref name="Design Goals">Dart An Introduction. 19. Oktober 2011, ehemals im Vorlage:IconExternal (nicht mehr online verfügbar); abgerufen am 15. Oktober 2011 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)). (Seite nicht mehr abrufbar. Suche im Internet Archive )</ref>
- 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
Die flexible Kompilierungstechnologie von Dart gibt Entwicklern die Möglichkeit, Dart Code je nach Verwendungszweck auf verschiedene Art und Weisen zu kompilieren.
Dart Native
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
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.<ref>Dart Plattoformen (englisch). Archiviert vom Vorlage:IconExternal am 26. Juli 2019; abgerufen am 7. August 2019.</ref>
Typisierung
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.<ref>Optional Types in Dart von Gilad Bracha, im Oktober 2011 (aktualisiert im September 2012)</ref>
Werkzeuge
Dart wird zusammen mit einer Reihe von Werkzeugen ausgeliefert. Die Basis bildet das Dart SDK. Dieses enthält die Standalone-VM DartVM<ref>dart: The Standalone VM</ref> und einen Dart nach JavaScript-Transcompiler namens dart2js.<ref name="dart2js" /> 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 Paketverwaltungssystem Pub mitgeliefert.<ref>Pub Package and Asset Manager</ref>
Ab der Version 1.4 wird auch das Analysewerkzeug Observatory für die Einsicht in die Abläufe innerhalb der DartVM bereitgestellt.<ref>Googles JavaScript-Herausforderer: Tiefe Einblicke in den Anwendungscode mit Dart 1.4</ref>
Beispiele
Hallo Wikipedia
<syntaxhighlight lang="dart"> main() {
// Ausgabe einer Textzeile
print('Hallo, Wikipedia!');
} </syntaxhighlight>
Objektorientierte Programmierung
<syntaxhighlight lang="dart"> // 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 </syntaxhighlight>
Literatur
- 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
- 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
Einzelnachweise
<references />