Programmiersprache: Dart 2.1 lockert die Regeln für Mixins
Neben Optimierungen für die Tools und Codegröße wandelt Dart 2.1 zudem Integer-Literale automatisch in Double.
![Programmiersprache: Dart 2.1 lockert die Regeln für Mixins](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/2/5/4/2/1/4/1/dart-5303aedd2d068bfa.jpeg)
Drei Monate nach dem Sprung auf Dart 2.0 mit zahlreichen Änderungen und einer konsequenten Ausrichtung auf clientseitige Programmierung folgt nun Version 2.1, für die sich die Macher vor allem auf Optimierungen konzentriert haben. Zwei nennenswerte Sprachneuerungen gibt es jedoch ebenfalls zu vermelden.
Automatische Typumwandlung
Dart 2 setzt standardmäßig auf strikte Typangaben, um Programmierfehler durch die Freiheiten anderer Skriptsprachen wie Python oder JavaScript zu vermeiden. Für bestimmte Einsatzfelder rudert das Team jedoch nun etwas zurück und erlaubt konkret das Verwenden von Integer-Literalen an Stellen, die Double-Werte erwarten. Das gilt beispielsweise für die Angabe von Ganzzahlen für das Padding oder die Schriftgröße bei Googles Cross-Platform-SDK Flutter. Für Dart 2.0 war im folgenden Codebeispiel der Wert für horizontal fehlerhaft, da das System ihn als Integer interpretiert, der für vertical dagegen aufgrund des Dezimalpunkts korrekt.
padding: const EdgeInsets.symmetric(
horizontal: 4,
vertical: 4.0,
)
Dart 2.1 erzeugt beim Kompilieren desselben Codes nun keinen Fehler mehr, da es implizit den Integer-Wert nach Double wandelt.
Flexiblere Mixins
Die Macher haben außerdem die Möglichkeiten für Mixins deutlich erweitert. Mixins erlauben das Wiederverwenden von Code einer Klasse in unterschiedlichen Klassenhierarchien. Bisher gelten dafür aber zumindest für das Kompilieren mit dart2js und dartdevc recht strenge Richtlinien: Mixins müssen Kindklassen von Object sein und dürfen nicht super() aufrufen.
Dart 2.1 hebt diese Einschränkungen jetzt auf, besonders mit Blick auf das Flutter-Framework. Neu ist zudem das Schlüsselwort mixin, mit dem Entwickler Klassen definieren können, die nur als Mixins verwendet werden dürfen.
Performance für Web- und Mobile-Anwendungen
Dart 2 war wohl für Flutter-Anwendungen schneller als Dart 1.x, verlor jedoch einen Teil des Vorteils durch die aufwendigere Typüberprüfung. Der Overhead konnte im Extremfall 20 bis 40 Prozent betragen. Dart 2.1 reduziert den zusätzlichen Aufwand wohl drastisch sowohl für AOT-kompilierten Code (Ahead of Time), als auch für den Just-in-Time-Compiler (JIT). Auch der mit dart2js erstellte JavaScript-Code ist mit dem aktuellen Release schlanker – das Team spricht von 17 Prozent geringerer Ausgabegröße und 15 Prozent verbesserter Kompilierdauer.
Mehr als Bugfix zu betrachten ist die komplette Typüberprüfung zur Compile-Zeit. Bisher warnte der Editor zwar bei falschen Typzuweisungen, der Compiler verarbeitete sie unter Umständen jedoch dennoch, sodass sich inkonsistenter Code kompilieren ließ. Das hat das Team nun geändert und dem Compiler dieselbe Fehlerprüfung wie dem Dart Analyzer verpasst.
Weitere Details wie die Anbindung an Protocol Buffers lassen sich der offiziellen Ankündigung entnehmen. Das Dart SDK 2.1 steht auf der Dart-Site zum Herunterladen bereit. Die ebenfalls in der Ankündigung vorgestellten Pläne für 2019 zeigen, dass die Macher das Projekt nicht aufgeben, das nach der anfänglichen Euphorie doch deutlich an Zulauf verloren zu haben scheint, während sich zumindest Webentwickler vermehrt in Richtung TypeScript orientieren. Die langfristige Zukunft von Dart dürfte daher vermutlich sehr eng mit der von Flutter verknüpft sein. (rme)