Google hat die Version 2.14 der Programmiersprache Dart veröffentlicht, die die Entwicklung des grundlegend überarbeiteten Dart 2 fortführt. Diese Version unterscheidet sich vom ursprünglichen Dart durch die Verwendung einer starken statischen Typisierung. Die Typen können automatisch abgeleitet werden, sodass die Angabe von Typen nicht zwingend erforderlich ist. Dynamische Typisierung wird jedoch nicht mehr verwendet, und der ursprünglich abgeleitete Typ wird einer Variable zugewiesen, die dann strengen Typprüfungen unterzogen wird.
Eigenschaften der Sprache Dart:
- Vertrauter und leicht erlernbarer Syntax, der für Programmierer in JavaScript, C und Java natürlich ist.
- Schneller Start und hohe Leistung für alle modernen Webbrowser und verschiedene Umgebungstypen, von tragbaren Geräten bis hin zu leistungsstarken Systemen. Server.
- Möglichkeit zur Definition von Klassen und Schnittstellen, die Kapselung ermöglichen und bestehende Methoden und Daten wiederverwendbar machen.
- Die Typangabe erleichtert das Debugging und die Fehlersuche, macht den Code klarer und lesbarer und vereinfacht die Weiterentwicklung sowie die Analyse durch externe Entwickler.
- Unter den unterstützten Typen sind verschiedene Arten von Hashes, Arrays und Listen, Warteschlangen, numerische und stringartige Typen sowie Datums- und Zeittypen und reguläre Ausdrücke (RegExp) aufgeführt. Es besteht die Möglichkeit, eigene Typen zu erstellen.
- Für die Organisation paralleler Ausführungen wird die Nutzung von Klassen mit dem Attribut isolate empfohlen, deren Code vollständig in einem isolierten Raum im separaten Speicher ausgeführt wird und über Nachrichten mit dem Hauptprozess kommuniziert.
- Unterstützung von Bibliotheken, die die Pflege und das Debugging großer Webprojekte vereinfachen. Externe Implementierungen von Funktionen können als Shared Libraries hinzugefügt werden. Anwendungen lassen sich in Teile aufteilen, wobei jede Teilentwicklung einem eigenen Team von Programmierern zugewiesen werden kann.
- Ein Satz von Werkzeugen zur Unterstützung der Entwicklung in der Programmiersprache Dart, einschließlich der Implementierung von dynamischen Entwicklungs- und Debugging-Tools mit der Möglichkeit zur Live-Code-Korrektur (‘edit-and-continue’).
- Um die Entwicklung in der Programmiersprache Dart zu vereinfachen, wird das SDK, der Paketmanager pub, der statische Code-Analyzer dart_analyzer, die integrierte Entwicklungsumgebung DartPad sowie Plugins mit Unterstützung für Dart für IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 und Vim bereitgestellt.
- Zusätzliche Pakete mit Bibliotheken und Hilfsprogrammen werden über das Repository pub verteilt, das mehr als 20.000 Pakete umfasst.
Die wichtigsten Änderungen in der Version Dart 2.14:
- Ein neuer Operator für den logischen Schiebeoperation (>>>) wurde hinzugefügt, der im Gegensatz zum Operator (>>) einen logischen und keinen arithmetischen Shift durchführt. Dabei wird das Vorzeichen nicht berücksichtigt (der Shift erfolgt ohne Trennung zwischen positiven und negativen Zahlen).
- Die Einschränkung der Typargumente wurde aufgehoben, die die Verwendung allgemeiner Function-Typen als Arguments mit Typen verhindert hat. Zum Beispiel kann nun angegeben werden: late List<T Function(T)> idFunctions; var callback = [(T value) => value]; late S Function<S extends T Function(T)>(S) f;
- Es ist nun erlaubt, Typargumente in Annotations zu verwenden, wie zum Beispiel @Deprecated. Jetzt kann angegeben werden: @TypeHelper(42, "Die Bedeutung")
- In die Standardbibliothek (Core) der Klasse Object wurden die statischen Methoden hash, hashAll und hashAllUnordered hinzugefügt. In der Klasse DateTime wurde die Verarbeitung lokaler Zeit verbessert, insbesondere beim Umstellen der Uhren zwischen Sommer- und Winterzeit, wenn diese nicht genau einer Stunde entsprechen (zum Beispiel wird in Australien eine Verschiebung von 30 Minuten verwendet). Im Paket ffi wurde die Unterstützung für den Arenaspeichermechanismus hinzugefügt, der Ressourcen automatisch freigibt. Im Paket ffigen wurde die Möglichkeit zur Generierung von typedef-Definitionen von Dart-Typen aus der Programmiersprache C integriert.
- 250 der beliebtesten Pakete aus dem Repository pub.dev und 94 % der Top-1000 sind auf die Nutzung des 'Null Safety'-Modus umgestellt. Dieser Modus hilft, Abstürze zu vermeiden, die durch den Zugriff auf Variablen mit undefinierten Werten entstehen können, die auf 'Null' gesetzt sind. Das Konzept bedeutet, dass Variablen keine undefinierten Werte haben dürfen, es sei denn, ihr wird explizit der Wert null zugewiesen. Im Modus wird streng auf die Typen der Variablen geachtet, was dem Compiler ermöglicht, zusätzliche Optimierungen einzusetzen. Die Typkompatibilität wird zur Compile-Zeit überprüft. Zum Beispiel führt der Versuch, einer Variable, deren Typ keinen undefinierten Zustand zulässt, wie 'int', den Wert 'Null' zuzuweisen, zu einem Fehler.
- Es wurden einheitliche Regelsets für den Code-Analyzer (Linter) vorgeschlagen, die gleichzeitig die Überprüfung der Einhaltung der Stilrichtlinien für Dart und das Flutter-Framework unterstützen. Historisch gesehen unterschieden sich die Formatierungsrichtlinien für Flutter und Dart. Zudem gab es für Dart zwei Regelsets — die pedantischen von Google und die Empfehlungen der Dart-Entwickler-Community. In Dart 2.14 wurde ein neues gemeinsames Regelset für den Linter eingeführt, das standardmäßig in neuen Dart-Projekten und im Flutter SDK angewendet werden soll. Dies umfasst grundlegende Regeln (Paket lints/core.yaml), empfohlene zusätzliche Regeln (lints/recommended.yaml) und spezifische Empfehlungen für Flutter (flutter_lints/flutter.yaml). Nutzern der pedantischen Regeln wird geraten, auf den neuen Kodierungsstil umzustellen, der auf den Empfehlungen aus der Dart-Dokumentation basiert.
- Im Formatter wurden Optimierungen für die Formatierung kaskadierter Codeblöcke vorgenommen, die die Formatierungsleistung deutlich steigern und eine mehrdeutige Interpretation der Zugehörigkeit von Ausdruckselementen vermeiden. Zum Beispiel betrifft der Aufruf „..doIt“ im Ausdruck „var result = errorState ? foo : bad..doIt()“ nicht den bedingten Teil des Blocks „bad“, sondern den gesamten Ausdruck, weshalb die Formatierung nun getrennt erfolgt: var result = errorState ? foo : bad ..doIt();
- Die SDK unterstützt jetzt Apple M1-Prozessoren (Silicon), was sowohl die Ausführung der Dart VM, der Tools und der SDK-Komponenten auf Systemen mit Apple Silicon-Prozessoren als auch die Unterstützung für die Kompilierung ausführbarer Dateien für diese Chips umfasst.
- Das Kommando „dart pub“ unterstützt jetzt die neue Hilfsdatei „.pubignore“, mit der eine Liste von Dateien definiert werden kann, die beim Veröffentlichen eines Pakets im Repository pub.dev übersprungen werden sollen. Die angegebenen Einstellungen überschneiden sich nicht mit der Ignorierliste „.gitignore“ (in bestimmten Situationen ist es erforderlich, Dateien in pub.dev nicht zu übergeben, die für Git benötigt werden, z. B. interne Skripte, die während der Entwicklung verwendet werden).
- Die Leistung des Teams „dart test“ wurde verbessert, sodass nun nach Änderungen an pubspec keine erneute Kompilierung der Tests erforderlich ist, solange die Versionsnummer gleich bleibt.
- Die Unterstützung für die Kompilierung im Modus Kompatibilität mit ECMAScript 5 wurde eingestellt (dieses Änderung führt zu einem Verlust der Kompatibilität mit dem Browser IE11).
- Die einzelnen Tools stagehand, dartfmt und dart2native wurden als veraltet erklärt, und es gibt jetzt integrierte Befehle, die über das dart-Tool aufgerufen werden.
- Der VM Native Extensions Mechanismus wurde ebenfalls als veraltet eingestuft. Für den Aufruf nativer Codes aus Dart-Code wird empfohlen, die neue Dart FFI (Foreign Function Interface) zu verwenden.
Gleichzeitig wurde ein bedeutendes Update des UI-Frameworks Flutter 2.5 veröffentlicht, das als Alternative zu React Native gilt und es ermöglicht, Anwendungen auf Basis einer einzigen Codebasis für die Plattformen iOS, Android, Windows, macOS und Linux zu erstellen sowie Anwendungen für die Ausführung in Browsern zu entwickeln. Flutter bildet auch die Grundlage für die benutzerdefinierte Shell des von Google entwickelten Mikrokernels Fuchsia.
Der Großteil des Flutter-Codes ist in der Programmiersprache Dart geschrieben, während die Laufzeit-Engine zur Ausführung der Anwendungen in C++ implementiert ist. Bei der Entwicklung von Anwendungen kann neben der nativen Sprache Dart auch die Dart Foreign Function Interface verwendet werden, um C/C++-Code aufzurufen. Die hohe Ausführungsleistung wird durch die Kompilierung der Anwendungen in Maschinencode für die Zielplattformen erreicht. Dabei muss das Programm nach jeder Änderung nicht neu kompiliert werden — Dart bietet den Modus der Hot Reload-Funktion, der es ermöglicht, Änderungen an einer laufenden Anwendung vorzunehmen und sofort die Ergebnisse zu sehen.
Die wichtigsten Änderungen in Flutter 2.5:
- Es wurden signifikante Leistungsoptimierungen vorgenommen. Auf den Plattformen iOS und macOS erfolgt nun eine Vorabkompilierung von Shadern für die Grafik-API Metal. Die Effizienz bei der Verarbeitung asynchroner Ereignisse wurde verbessert. Ein Problem mit Verzögerungen beim Freigeben von Speichern durch den Garbage Collector für ungenutzte Bilder wurde behoben (zum Beispiel wurde während der Wiedergabe eines 20-sekündigen animierten GIFs die Anzahl der Garbage Collection-Vorgänge von 400 auf 4 reduziert). Die Verzögerungen bei der Nachrichtenübertragung zwischen Dart und Objective-C/Swift (iOS) oder Java/Kotlin (Android) wurden um bis zu 50 % reduziert. Außerdem wurde die Unterstützung für die native Compilation auf Apple Silicon-basierten Systemen hinzugefügt.

- Für die Android-Plattform wurde die Unterstützung für Anwendungen im Vollbildmodus implementiert. Die Umsetzung des Designs „Material You“, als nächstes Generation Material Design, wurde fortgesetzt. Ein neuer Status MaterialState.scrolledUnder wurde hinzugefügt, die dynamische Anzeige von Bildlaufleisten bei Größenänderungen wurde realisiert und eine neue Benutzeroberfläche zur Anzeige von Benachrichtigungsbanner vorgeschlagen.
- Die Funktionen des Plugins zur Kamerasteuerung wurden deutlich erweitert, jetzt können Autofokus, Belichtung, Blitz, Zoom, Rauschunterdrückung und Auflösung gesteuert werden.
- Die Entwicklerwerkzeuge (DevTools) wurden verbessert, mit einem aktualisierten Widget-Inspektionsmodus sowie neuen Mitteln zur Identifizierung von Render-Verzögerungen und zur Überwachung der Shader-Kompilation.

- Die Plugins für Visual Studio Code und IntelliJ/Android Studio wurden optimiert.
Quelle: opennet.ru


