Sind verfügbar: die Programmiersprache Dart 2.15 und das Framework Flutter 2.8.

Google hat die Version 2.15 der Programmiersprache Dart veröffentlicht, die die Weiterentwicklung der grundlegend überarbeiteten Serie Dart 2 fortsetzt. Diese unterscheidet sich von der ursprünglichen Version der Sprache Dart durch die Anwendung einer starken statischen Typisierung (Typen können automatisch abgeleitet werden, sodass die Angabe von Typen nicht zwingend erforderlich ist. Dynamische Typisierung wird nicht mehr verwendet und der ursprünglich abgeleitete Typ wird an die Variable gebunden, wobei eine strenge Typprüfung angewendet 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 Tools werden über das Repository pub verteilt, das etwa 22.000 Pakete umfasst.

Die wichtigsten Änderungen in der Veröffentlichung Dart 2.15:

  • Ressourcen werden bereitgestellt, um eine schnelle parallele Ausführung von Aufgaben mit isolierten Handlern zu ermöglichen. In Mehrkernsystemen führt die Dart-Laufzeitumgebung standardmäßig den Anwendungscode auf einem CPU-Kern aus und nutzt andere Kerne für systembezogene Aufgaben wie asynchronen Eingabe/Ausgabe, Dateischreiboperationen oder Netzwerkaufrufe. Für Anwendungen, die ihre Handler parallel ausführen müssen, wie beispielsweise für das Rendering von Animationen in der Benutzeroberfläche, besteht die Möglichkeit, separate Codeblöcke (Isolates) zu starten, die voneinander isoliert sind und gleichzeitig auf anderen CPU-Kernen mit dem Hauptanwendungsthread ausgeführt werden. Um Fehler zu vermeiden, die durch die gleichzeitige Ausführung von Code entstehen, der mit derselben Datensammlung arbeitet, ist im Rahmen der Isolate-Blöcke das gemeinsame Nutzen von veränderbaren Objekten verboten, und für die Interaktion zwischen den Handlern wird ein nachrichtenbasiertes Modell verwendet.

    In Dart 2.15 wurde ein neues Konzept eingeführt – Gruppen isolierter Blöcke (isolate groups). Dies ermöglicht den gemeinsamen Zugriff auf verschiedene interne Datenstrukturen in den Isolate-Blöcken einer Gruppe und verringert die Kosten für die Interaktion der Handler innerhalb der Gruppe erheblich. Beispielsweise erfolgt das Starten eines zusätzlichen Isolate-Blocks in einer bestehenden Gruppe 100-mal schneller und benötigt 10- bis 100-mal weniger Speicher als das Starten eines isolierten Isolate-Blocks, da die Notwendigkeit der Initialisierung von Datenstrukturen der Anwendung entfällt.

    Obwohl in Isolate-Blöcken der Gruppe der gemeinsame Zugriff auf veränderbare Objekte weiterhin verboten ist, wird im Gruppenbetrieb der gemeinsame Heap-Speicher verwendet, was die Übertragung von Objekten von einem Block zum anderen erheblich beschleunigt, ohne dass ressourcenintensive Kopieroperationen erforderlich sind. In der neuen Version ist es auch erlaubt, das Ergebnis des Handlers bei der Aufruf von Isolate.exit() zu übermitteln, um Daten in den übergeordneten Isolate-Block ohne Kopieroperationen zu übertragen. Darüber hinaus wurde der Nachrichtenübertragungsmechanismus optimiert — kleine und mittlere Nachrichten werden jetzt etwa 8-mal schneller verarbeitet. Zu den Objekten, die zwischen Isolate-Blöcken mittels des Aufrufs SendPort.send() übertragen werden können, gehören nun auch einige Funktionsarten, Closures und Stack-Traces.

  • In den Mitteln zur Erstellung von Verweisen auf bestimmte Funktionen in anderen Objekten (Tear-Off) wurden die Einschränkungen für die Erstellung solcher Verweise im Konstruktor-Code aufgehoben, was beim Aufbau von Schnittstellen auf Basis der Flutter-Bibliothek nützlich sein kann. Zum Beispiel kann zur Erstellung eines Widgets Column, das mehrere Text-Widgets enthält, „.map()“ aufgerufen und die Verweise an den Konstruktor Text.new des Objekts Text übergeben werden: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
  • Die Möglichkeiten im Zusammenhang mit der Verwendung von Funktionsverweisen wurden erweitert. Es wurde die Möglichkeit hinzugefügt, generische (generic) Methoden und Funktionsverweise zur Erstellung einer nicht-generischen Methode und eines Verweises zu verwenden: T id(T value) => value; var intId = id; // erlaubt in Version 2.15 statt „int Function(int) intId = id;“ const fo = id; // Funktionsverweis id. const c1 = fo;
  • In der Bibliothek dart:core wurde die Unterstützung von Aufzählungen (enum) verbessert. Beispielsweise kann jetzt der Stringwert jeder enum-Instanz mit der Methode „.name“ ausgegeben werden, es ist möglich, Werte nach Namen auszuwählen oder Zuordnungen von Wert-Paaren durchzuführen: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // gibt „one“ aus. print(MyEnum.values.byName('two') == MyEnum.two); // ergibt „true“. final map = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // „true“. }
  • Eine Technik zur Kompression von Zeigern wurde implementiert, die eine kompaktere Darstellung von Zeigern in 64-Bit-Umgebungen ermöglicht, wenn für die Adressierung ein 32-Bit-Adressraum ausreichend ist (es werden nicht mehr als 4 GB RAM verwendet). Tests haben gezeigt, dass eine solche Optimierung die Größe des Heaps um etwa 10 % reduzieren kann. Im Flutter SDK ist der neue Modus standardmäßig bereits für Android aktiviert, und für die nächste Version ist eine Aktivierung für iOS geplant.
  • Das Dart SDK enthält jetzt Werkzeuge für das Debugging und die Leistungsanalyse (DevTools), die zuvor in einem separaten Paket geliefert wurden.
  • In das Team "dart pub" und die Paket-Repositorys pub.dev wurden Mittel zur Überwachung der zufälligen Veröffentlichung vertraulicher Informationen integriert, wie zum Beispiel das Hinterlassen von Anmeldedaten für Continuous-Integration-Systeme und Cloud-Umgebungen innerhalb eines Pakets. Bei der Feststellung solcher Lecks wird die Ausführung des Befehls "dart pub publish" mit einer Fehlermeldung abgebrochen. Für den Fall eines Fehlalarms besteht die Möglichkeit, die Überprüfung über eine Whitelist zu umgehen.
  • Im Repository pub.dev wurde die Möglichkeit hinzugefügt, bereits veröffentlichte Paketversionen zurückzuziehen, beispielsweise im Falle von kritischen Fehlern oder Sicherheitsanfälligkeiten. Zuvor wurde für solche Korrekturen die Veröffentlichung einer nachfolgenden, korrigierten Version praktiziert, jedoch ist in einigen Situationen ein Rückzug der bereits veröffentlichten Version erforderlich, um deren weitere Verbreitung sofort zu stoppen (zum Beispiel, wenn die Korrektur noch nicht bereit ist oder irrtümlich anstelle einer Testversion eine vollwertige Version veröffentlicht wurde). Nach dem Rückzug wird das Paket in den Befehlen 'pub get' und 'pub upgrade' nicht mehr erkannt, und auf bereits installierten Systemen wird bei der nächsten Ausführung von 'pub get' eine spezielle Warnung ausgegeben.
  • Es wurde ein Schutz gegen die Sicherheitsanfälligkeit (CVE-2021-22567) hinzugefügt, die durch die Verwendung von Unicode-Zeichen im Code verursacht wurde, die die Reihenfolge der Darstellung verändern.
  • Eine Sicherheitsanfälligkeit (CVE-2021-22568) wurde behoben, die es ermöglichte, sich auf pub.dev als ein anderer Benutzer auszugeben, wenn Pakete auf einem Drittanbieter-Server veröffentlicht wurden, der oauth2-Zugriffstoken von pub.dev akzeptiert. Diese Schwachstelle könnte beispielsweise für Angriffe auf interne und Unternehmens-Paketserver genutzt werden. Entwickler, die Pakete ausschließlich auf pub.dev hosten, sind von diesem Problem nicht betroffen.

Ebenfalls wurde ein bedeutendes Release des UI-Frameworks Flutter 2.8 vorgestellt, das als Alternative zu React Native betrachtet wird und es ermöglicht, mit einer einzigen Codebasis Anwendungen für die Plattformen iOS, Android, Windows, macOS und Linux zu erstellen sowie Anwendungen für den Browser zu entwickeln. Auf Flutter basiert die benutzerdefinierte Shell des in Google entwickelten Mikrokernel-Betriebssystems Fuchsia. Es wird darauf hingewiesen, dass die Anzahl der Anwendungen auf Flutter 2 im Google Play Store in den letzten sechs Monaten von 200.000 auf 375.000 gestiegen ist, also fast verdoppelt.

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 Änderungen in der neuen Version von Flutter umfassen Optimierungen der Startgeschwindigkeit und des Speicherverbrauchs auf mobilen Geräten. Die Anbindung von Anwendungen an Backend-Dienste wie Firebase und Google Cloud wurde vereinfacht. Die Werkzeuge zur Integration mit Google Ads wurden stabilisiert. Die Unterstützung für Kameras und Web-Plugins wurde erheblich verbessert. Neue Tools zur Vereinfachung der Entwicklung wurden angeboten, darunter ein Widget zur Authentifizierung mit Firebase. Die Engine Flame, die für die Entwicklung von 2D-Spielen mit Flutter gedacht ist, wurde aktualisiert.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster