Dart ist eine Programmiersprache von Google – genau wie Go, eine weitere Sprache, die ebenfalls von Google vorangetrieben wird.
Google veröffentlichte Dart im Jahr 2011, entwickelt von Lars Bak und Kasper Lund, den Kerningenieuren der V8-Engine.
Ursprünglich sollte sie JavaScript bei der Webentwicklung ersetzen. Später wurde sie die einzige Sprache für das Flutter-Framework, das vor allem auf plattformübergreifende Client-Apps (Mobil, Web, Desktop) ausgelegt ist.
Viele zentrale Google-Dienste wie YouTube, GCP und die firmeneigene Infrastruktur setzen intensiv auf Dart. Es gibt eine riesige Community und ein eigenständiges Ökosystem abseits der Client-Anwendungen.
Der große Vorteil: Mit einem einzigen Quellcode lassen sich Apps für zahlreiche Plattformen erstellen – Android, iOS, macOS, Linux, Windows und weitere.
Generelle Ausrichtung
Dart ist eine plattformübergreifende Sprache, optimiert für die Entwicklung von Client-Anwendungen. Das Ziel ist eine effiziente Entwicklererfahrung für alle Endgeräte, ergänzt um eine flexible Laufzeit für App-Frameworks. Sie bildet die technische Grundlage von Flutter. Zudem bringt sie native Tools für Code-Formatierung, statische Analyse, Unit-Tests und weitere Entwicklerfunktionen mit. Der Code kann für Web, Mobilgeräte, Desktop-Systeme und weitere Plattformen kompiliert und ausgeliefert werden.
Technische Merkmale
Während der Entwicklung steht Hot Reload zur Verfügung.
Für die Produktivphase können hochwertige Anwendungen für alle unterstützten Plattformen erzeugt werden.
Typsicherheit
- Statische starke Typisierung (sound typing): Erzwingt passende Typen, dank Typinferenz lassen sich Typangaben aber weglassen;
- Unterstützt den dynamischen Typ
dynamicmit Laufzeitprüfungen, um flexible dynamische Codierung zu ermöglichen.
Vollständige Null-Sicherheit (sound null safety)
Variablen dürfen standardmäßig keinen Null-Wert enthalten; nur bei expliziter Deklaration sind Nullwerte erlaubt. Statische Analysen verhindern Nullpointer-Fehler zur Laufzeit, nicht-null-Variablen bleiben während der gesamten Ausführung stets gültig.
Viele eingebaute Syntaxfeatures: Standardbibliotheken, asynchrone Aufrufe, nullable/nicht-null-Typen, Pfeilfunktionen, Generatoren, Streams, Getter und mehr.
Umfangreiche Dart-Standardbibliotheken
- dart:core: Pflicht für jedes Dart-Programm, liefert grundlegende Typen, Collections und zentrale Basisfunktionen
- dart:collection: Erweiterte Datensammlungen wie Warteschlangen, verkettete Listen, Hash-Maps, Binärbäume und weitere fortgeschrittene Container
- dart:convert: Tools zur Kodierung und Dekodierung von Daten, unterstützt JSON, UTF-8 und weitere Formate
- dart:math: Mathematische Konstanten, Rechenfunktionen und Zufallszahlengeneratoren
- dart:async: Grundlage für asynchrone Programmierung mit zentralen Klassen wie Future und Stream
- dart:typed_data: Effiziente binäre Festwert-Arrays (z. B. 8-Bit-Uint) sowie SIMD-Zahlentypen
- dart:io: Nur für Nicht-Web-Umgebungen, bietet Datei-, Socket-, HTTP- und weitere Ein-/Ausgabeoperationen
- dart:ffi: Externer Funktionsschnittstellen im C-Stil zur Interaktion mit C-Code
- dart:isolate: Isolierte Nebenläufigkeits-Threads, ähnlich regulären Threads, aber ohne gemeinsamen Speicher – Kommunikation läuft nur über Nachrichten
- dart:js_interop / package:web: Web-spezifisch, zur Steuerung von HTML-Elementen, Browser-DOM und Austausch mit JavaScript
Neben den integrierten Kernbibliotheken pflegt das offizielle Team zahlreiche Zusatzpakete: characters, intl, http, crypto, markdown. Die Community unabhängiger Entwickler hat zudem tausende weitere Pakete veröffentlicht – unter anderem für XML, Windows-Systemintegration, SQLite und Datenkompression.
Laufplattformen von Dart
Dart läuft auf vielen Systemen dank verschiedener Kompilierungstechniken:
1. Native Plattformen (Mobil / Desktop)
Zwei integrierte Kompilierungssysteme: Die Dart-VM mit JIT-Kompilierung sowie der AOT-Vorkompiler zur Erzeugung von Maschinencode.
2. Web-Plattform
Es gibt zwei Kompilierungsmodi – einen für Entwicklung, einen für Produktion – um Dart-Code in JavaScript oder WebAssembly umzuwandeln.
Flutter ist das bekannteste UI-Framework für mehrere Plattformen basierend auf Dart. Es kommt mit kompletten Entwicklertools und UI-Bibliotheken zum Erstellen von Apps für iOS, Android, macOS, Windows, Linux und Webseiten.
Native Dart-Kompilierung (JIT + AOT)
- Entwicklungsphase (JIT): Die VM kompiliert inkrementell und unterstützt Hot Reload, Echtzeit-Performance-Monitoring sowie vollständige Debugging-Werkzeuge für schnelle Iterationen;
- Produktivausgabe (AOT): Kompiliert zu nativem ARM-/x64-Maschinencode für schnellen, stabilen App-Start;
- Die Laufzeit verfügt über eine ausgefeilte Speicherverwaltung: Generational Garbage Collection, schnelle Objektzuweisung und strenge Einhaltung der Dart-Typsicherheitsregeln.
Dart Web-Kompilierung (JS / WasmGC)
Dart-Code kann zu JavaScript kompiliert werden, um in Browsern wie Chrome (V8-Engine) zu laufen; alternativ ist eine Umwandlung zu WebAssembly möglich:
- Entwicklungs-Kompilierung: Inkrementeller JavaScript-Compiler mit Hot Reload für schnelles Debuggen und Ausprobieren;
- Produktions-JS-Kompilierung: Optimiert, komprimiert und entfernt ungenutzten Code – ergibt kleine, performante JavaScript-Dateien;
- Produktions-WasmGC-Kompilierung: Wandelt Code in leistungsstarken WebAssembly-GC-Code um und steigert die Ausführungsgeschwindigkeit deutlich.