Die Programmiersprache Dart 2.15 und das Framework Flutter 2.8 sind verfügbar

Google hat die Veröffentlichung der Programmiersprache Dart 2.15 veröffentlicht, die die Entwicklung eines radikal neu gestalteten Dart 2-Zweigs fortsetzt, der sich von der Originalversion der Dart-Sprache durch die Verwendung starker statischer Typisierung unterscheidet (Typen können automatisch abgeleitet werden, also spezifizieren). (Typen sind nicht erforderlich, aber die dynamische Typisierung wird nicht mehr verwendet und bei der anfänglichen Berechnung wird der Typ der Variablen zugewiesen und anschließend wird eine strenge Typprüfung angewendet.)

Merkmale der Dart-Sprache:

  • Vertraute und leicht zu erlernende Syntax, selbstverständlich für JavaScript-, C- und Java-Programmierer.
  • Gewährleistung eines schnellen Starts und hoher Leistung für alle modernen Webbrowser und verschiedene Arten von Umgebungen, von tragbaren Geräten bis hin zu leistungsstarken Servern.
  • Die Möglichkeit, Klassen und Schnittstellen zu definieren, die die Kapselung und Wiederverwendung vorhandener Methoden und Daten ermöglichen.
  • Die Angabe von Typen erleichtert das Debuggen und Identifizieren von Fehlern, macht den Code klarer und lesbarer und vereinfacht seine Änderung und Analyse durch Drittentwickler.
  • Zu den unterstützten Typen gehören: verschiedene Arten von Hashes, Arrays und Listen, Warteschlangen, numerische und String-Typen, Typen zur Bestimmung von Datum und Uhrzeit, reguläre Ausdrücke (RegExp). Es ist möglich, eigene Typen zu erstellen.
  • Um die parallele Ausführung zu organisieren, wird vorgeschlagen, Klassen mit dem Attribut „isolate“ zu verwenden, deren Code vollständig in einem isolierten Raum in einem separaten Speicherbereich ausgeführt wird und mit dem Hauptprozess durch das Senden von Nachrichten interagiert.
  • Unterstützung für die Verwendung von Bibliotheken, die die Unterstützung und das Debuggen großer Webprojekte vereinfachen. Implementierungen von Funktionen von Drittanbietern können in Form von gemeinsam genutzten Bibliotheken eingebunden werden. Anwendungen können in Teile unterteilt werden und die Entwicklung jedes Teils einem separaten Programmiererteam anvertrauen.
  • Eine Reihe vorgefertigter Tools zur Unterstützung der Entwicklung in der Dart-Sprache, einschließlich der Implementierung dynamischer Entwicklungs- und Debugging-Tools mit Codekorrektur im laufenden Betrieb („Bearbeiten und Fortfahren“).
  • Um die Entwicklung in der Dart-Sprache zu vereinfachen, werden ein SDK, ein Paketmanager-Pub, ein statischer Code-Analysator dart_analyzer, eine Reihe von Bibliotheken, eine integrierte Entwicklungsumgebung DartPad und Dart-fähige Plugins für IntelliJ IDEA, WebStorm, Emacs und Sublime Text mitgeliefert 2 und Vim.
  • Zusätzliche Pakete mit Bibliotheken und Dienstprogrammen werden über das Pub-Repository verteilt, das etwa 22 Pakete enthält.

Wichtige Änderungen in der Dart-Version 2.15:

  • Bietet Tools für die schnelle parallele Ausführung von Aufgaben mit Isolierung von Handlern. Auf Mehrkernsystemen führt die Dart-Laufzeitumgebung standardmäßig Anwendungscode auf einem CPU-Kern aus und nutzt andere Kerne, um Systemaufgaben wie asynchrone E/A, Schreiben in Dateien oder Tätigen von Netzwerkaufrufen auszuführen. Für Anwendungen, die ihre Handler parallel ausführen müssen, um beispielsweise Animationen in der Schnittstelle zu rendern, ist es möglich, separate Codeblöcke zu starten (zu isolieren), voneinander isoliert und auf anderen CPU-Kernen gleichzeitig mit dem Hauptanwendungsthread auszuführen . Zum Schutz vor Fehlern, die bei der gleichzeitigen Ausführung von Code auftreten, der mit demselben Datensatz arbeitet, ist die gemeinsame Nutzung veränderlicher Objekte in verschiedenen isolierten Blöcken verboten und für die Interaktion zwischen Handlern wird ein Message-Passing-Modell verwendet.

    Dart 2.15 führt ein neues Konzept ein – isolierte Blockgruppen (Isolate Groups), mit denen Sie den gemeinsamen Zugriff auf verschiedene interne Datenstrukturen in isolierten Blöcken organisieren können, die Teil derselben Gruppe sind, was den Overhead bei der Interaktion zwischen Handlern in einer Gruppe erheblich reduzieren kann . Beispielsweise ist das Starten eines zusätzlichen Isolierblocks in einer vorhandenen Gruppe 100-mal schneller und erfordert 10-100-mal weniger Speicher als das Starten eines separaten Isolierblocks, da die Initialisierung von Programmdatenstrukturen entfällt.

    Obwohl isolierte Blöcke in einer Gruppe den gemeinsamen Zugriff auf veränderliche Objekte immer noch verhindern, verwenden die Gruppen einen gemeinsam genutzten Heap-Speicher, der die Übertragung von Objekten von einem Block auf einen anderen erheblich beschleunigen kann, ohne dass ressourcenintensive Kopiervorgänge durchgeführt werden müssen. Die neue Version ermöglicht es Ihnen auch, das Ergebnis des Handlers beim Aufruf von Isolate.exit() zu übergeben, um Daten ohne Kopiervorgänge an den übergeordneten Isolate-Block zu übertragen. Darüber hinaus wurde der Nachrichtenübertragungsmechanismus optimiert – kleine und mittlere Nachrichten werden nun etwa achtmal schneller verarbeitet. Zu den Objekten, die mit dem Aufruf SendPort.send() zwischen Isolaten übergeben werden können, gehören einige Arten von Funktionen, Abschlüssen und Stack-Traces.

  • In den Tools zum Erstellen von Zeigern auf einzelne Funktionen in anderen Objekten (Tear-off) wurden Einschränkungen beim Erstellen ähnlicher Zeiger im Konstruktorcode entfernt, was beim Erstellen von Schnittstellen auf Basis der Flutter-Bibliothek hilfreich sein kann. Um beispielsweise ein Spalten-Widget zu erstellen, das mehrere Text-Widgets enthält, können Sie „.map()“ aufrufen und Zeiger an den Text.new-Konstruktor des Text-Objekts übergeben: class FruitWidget erweitert StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Die Möglichkeiten der Verwendung von Funktionszeigern wurden erweitert. Es wurde die Möglichkeit hinzugefügt, generische Methoden und Funktionszeiger zu verwenden, um eine nicht generische Methode und einen nicht generischen Zeiger zu erstellen: T-ID (T-Wert) => Wert; var intId = id ; // erlaubt in Version 2.15 statt „int Function(int) intId = id;“ const fo = id; // Zeiger auf Funktions-ID. const c1 = fo ;
  • Die dart:core-Bibliothek hat die Unterstützung für Aufzählungen verbessert. Sie können beispielsweise jetzt mit der Methode „.name“ aus jedem Aufzählungswert einen Zeichenfolgenwert ausgeben, Werte nach Namen auswählen oder Wertepaare abgleichen: enum MyEnum { one , zwei, drei } void main() { print(MyEnum.one.name); // „one“ wird gedruckt. print(MyEnum.values.byName('two') == MyEnum.two); // „true“ wird ausgegeben. final map = MyEnum.values.asNameMap(); print(map['drei'] == MyEnum.drei); // "WAHR". }
  • Es wurde eine Zeigerkomprimierungstechnik implementiert, die die Verwendung einer kompakteren Darstellung von Zeigern in 64-Bit-Umgebungen ermöglicht, wenn ein 32-Bit-Adressraum für die Adressierung ausreicht (es werden nicht mehr als 4 GB Speicher verwendet). Tests haben gezeigt, dass eine solche Optimierung eine Reduzierung der Heap-Größe um etwa 10 % ermöglicht. Im Flutter SDK ist der neue Modus bereits standardmäßig für Android aktiviert und soll in einer zukünftigen Version auch für iOS aktiviert werden.
  • Das Dart SDK umfasst Tools zum Debuggen und zur Leistungsanalyse (DevTools), die zuvor in einem separaten Paket bereitgestellt wurden.
  • Dem Befehl „dart pub“ und den Paket-Repositorys pub.dev wurden Tools hinzugefügt, um die versehentliche Veröffentlichung vertraulicher Informationen zu verfolgen, beispielsweise indem Anmeldeinformationen für kontinuierliche Integrationssysteme und Cloud-Umgebungen im Paket zurückgelassen werden. Wenn solche Lecks entdeckt werden, wird die Ausführung des Befehls „Dart Pub Publish“ mit einer Fehlermeldung unterbrochen. Bei einem Fehlalarm besteht die Möglichkeit, die Prüfung durch eine Whitelist zu umgehen.
  • Dem pub.dev-Repository wurde die Möglichkeit hinzugefügt, eine bereits veröffentlichte Version eines Pakets zu widerrufen, beispielsweise wenn gefährliche Fehler oder Schwachstellen entdeckt werden. Früher war es für solche Korrekturen üblich, eine Korrekturversion zu veröffentlichen, aber in manchen Situationen ist es notwendig, die bestehende Version zu stornieren und ihre weitere Verbreitung dringend zu stoppen (z. B. wenn die Korrektur noch nicht fertig ist oder wenn eine Vollversion vorliegt). versehentlich anstelle einer Testversion veröffentlicht). Nach dem Widerruf wird das Paket in den Befehlen „pub get“ und „pub upgrade“ nicht mehr identifiziert und auf Systemen, auf denen es bereits installiert ist, wird bei der nächsten Ausführung von „pub get“ eine spezielle Warnung ausgegeben.
  • Zusätzlicher Schutz vor einer Schwachstelle (CVE-2021-22567), die durch die Verwendung von Unicode-Zeichen im Code verursacht wird, die die Anzeigereihenfolge ändern.
  • Es wurde eine Sicherheitslücke (CVE-2021-22568) behoben, die es Ihnen ermöglicht, sich als ein anderer pub.dev-Benutzer auszugeben, wenn Sie Pakete auf einem Drittanbieterserver veröffentlichen, der pub.dev-oauth2-Zugriffstoken akzeptiert. Beispielsweise könnte die Schwachstelle genutzt werden, um interne und unternehmensinterne Paketserver anzugreifen. Entwickler, die nur Pakete auf pub.dev hosten, sind von diesem Problem nicht betroffen.

Gleichzeitig wurde ein bedeutendes Release des User Interface Frameworks Flutter 2.8 vorgestellt, das als Alternative zu React Native gilt und auf Basis einer einzigen Codebasis die Veröffentlichung von Anwendungen für iOS, Android, Windows, macOS und ermöglicht Linux-Plattformen sowie die Erstellung von Anwendungen zur Ausführung in Browsern. Eine benutzerdefinierte Shell für das von Google entwickelte Mikrokernel-Betriebssystem Fuchsia basiert auf Flutter. Es wird darauf hingewiesen, dass die Anzahl der Flutter 2-Anwendungen im Google Play Store in den letzten sechs Monaten von 200 auf 375 gestiegen ist, d. h. fast zweimal.

Der Hauptteil des Flutter-Codes ist in der Dart-Sprache implementiert und die Laufzeit-Engine zum Ausführen von Anwendungen ist in C++ geschrieben. Bei der Entwicklung von Anwendungen können Sie zusätzlich zur nativen Dart-Sprache von Flutter die Dart-Fremdfunktionsschnittstelle verwenden, um C/C++-Code aufzurufen. Durch die Kompilierung von Anwendungen in nativen Code für Zielplattformen wird eine hohe Ausführungsleistung erreicht. In diesem Fall muss das Programm nicht nach jeder Änderung neu kompiliert werden – Dart bietet einen Hot-Reload-Modus, der es Ihnen ermöglicht, Änderungen an einer laufenden Anwendung vorzunehmen und das Ergebnis sofort auszuwerten.

Zu den Änderungen in der neuen Flutter-Version zählt die Optimierung der Startgeschwindigkeit und des Speicherverbrauchs auf Mobilgeräten. Es ist einfacher, Apps mit Backend-Diensten wie Firebase und Google Cloud zu verbinden. Tools zur Integration mit Google Ads wurden stabilisiert. Die Unterstützung für Kameras und Web-Plugins wurde deutlich verbessert. Zur Vereinfachung der Entwicklung wurden neue Tools vorgeschlagen, beispielsweise wurde ein Widget für die Authentifizierung mithilfe von Firebase hinzugefügt. Die Flame-Engine, die für die Entwicklung von 2D-Spielen mit Flutter entwickelt wurde, wurde aktualisiert.

Source: opennet.ru

Kommentar hinzufügen