Google heeft de release van de programmeertaal Dart 2.15 gepubliceerd, waarmee de ontwikkeling van de grondig herwerkte tak van Dart 2 wordt voortgezet. Dit verschilt van de oorspronkelijke versie van de Dart-taal door het gebruik van sterke statische typing (typen kunnen automatisch worden afgeleid, dus het opgeven van types is niet verplicht, maar dynamische typing wordt niet meer gebruikt en het oorspronkelijk afgeleide type wordt aan de variabele gekoppeld, met strikte typecontrole als gevolg).
Kenmerken van de Dart-taal:
- Vertrouwde en eenvoudig te leren syntaxis, natuurlijk voor programmeurs van JavaScript, C en Java.
- Zorgt voor snelle opstart en hoge prestaties voor alle moderne webbrowsers en verschillende omgevingen, van draagbare apparaten tot krachtige systemen. servers.
- Mogelijkheid om klassen en interfaces te definiƫren, waardoor encapsulatie kan worden gebruikt en bestaande methoden en gegevens hergebruikt kunnen worden.
- Het opgeven van typen vereenvoudigt debugging en detectie van fouten, maakt de code duidelijker en leesbaarder, en vergemakkelijkt de verdere ontwikkeling en analyse door externe ontwikkelaars.
- Ondersteunde types omvatten verschillende soorten hashes, arrays en lijsten, queues, numerieke en stringtypes, types voor het definiƫren van datum en tijd, en reguliere expressies (RegExp). Er is ook mogelijkheid om eigen types te creƫren.
- Voor het organiseren van parallelle uitvoering kunnen klassen met het attribuut isolate worden gebruikt, waarvan de code volledig wordt uitgevoerd in een geĆÆsoleerde ruimte in een apart geheugengebied, waarbij interactie met het hoofdproces gebeurt via berichtverzending.
- Ondersteuning voor het gebruik van bibliotheken die het onderhoud en de debugging van grote webprojecten vergemakkelijken. Externe implementaties van functies kunnen worden aangesloten als gedeelde bibliotheken. Toepassingen kunnen worden opgedeeld in delen, waarbij elke sectie aan een afzonderlijk team van programmeurs kan worden toegewezen.
- Een set kant-en-klare tools ter ondersteuning van de ontwikkeling in de Dart-taal, inclusief implementatie van dynamische ontwikkelings- en debuggingtools met on-the-fly codecorrectie ('edit-and-continue').
- Om de ontwikkeling in de Dart-taal te vereenvoudigen, wordt de SDK, de package manager pub, de statische code-analyzer dart_analyzer, een set bibliotheken, de geĆÆntegreerde ontwikkelomgeving DartPad, en plugins met Dart-ondersteuning voor IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 en Vim geleverd.
- Aanvullende pakketten met bibliotheken en hulpprogramma's worden verspreid via de pub-repository, die ongeveer 22.000 pakketten telt.
Belangrijkste wijzigingen in de release van Dart 2.15:
- Er zijn middelen beschikbaar gesteld voor snelle parallelle uitvoering van taken met isolatie van handlers. Op multicore-systemen voert de Dart-runtime standaard de applicatiecode uit op één CPU-core, terwijl andere cores worden ingezet voor het uitvoeren van systeemtaken, zoals asynchroon I/O, bestandsschrijven of netwerkaanroepen. Voor applicaties die hun handlers parallel moeten uitvoeren, zoals voor het renderen van animaties in de interface, is er de mogelijkheid om afzonderlijke codeblokken (isolate) uit te voeren, die van elkaar zijn geïsoleerd en gelijktijdig op andere CPU-cores worden uitgevoerd, samen met de hoofdthread van de applicatie. Om fouten te voorkomen die ontstaan bij gelijktijdige uitvoering van code die met een enkele set gegevens werkt, is het delen van wijzigbare objecten tussen verschillende isolate-blokken verboden, en wordt een model op basis van berichtoverdracht gebruikt voor interactie tussen handlers.
Dart 2.15 introduceert een nieuw concept ā groepen van geĆÆsoleerde blokken (isolate groups), waarmee gezamenlijke toegang tot verschillende interne datastructuren in de isolate-blokken binnen dezelfde groep wordt georganiseerd, wat de overhead bij interactie tussen handlers in de groep aanzienlijk verlaagt. Bijvoorbeeld, het starten van een extra isolate-blok in een bestaande groep gebeurt 100 keer sneller en vereist 10-100 keer minder geheugen dan het opstarten van een afzonderlijk isolate-blok, doordat de noodzaak voor het initialiseren van datastructuren van de applicatie wordt geĆ«limineerd.
Hoewel gedeelde toegang tot veranderlijke objecten nog steeds verboden is in isolate-blokken, wordt gedeeld heap-geheugen gebruikt in groepen, wat het mogelijk maakt om de overdracht van objecten van de ene blok naar de andere aanzienlijk te versnellen zonder de noodzaak van tijdrovende kopieeroperaties. In de nieuwe versie is het ook toegestaan om het resultaat van de handler mee te geven bij de aanroep van Isolate.exit() om gegevens naar de bovenliggende isolate-blok te sturen zonder kopieeroperaties. Bovendien is de mechanismen voor het verzenden van berichten geoptimaliseerd ā kleine en middelgrote berichten worden nu ongeveer 8 keer sneller verwerkt. Enkele objecttypes, zoals functies, closures en stack traces, kunnen nu worden overgedragen tussen isolate-blokken via de aanroep van SendPort.send().
- In de hulpmiddelen voor het maken van verwijzingen naar afzonderlijke functies in andere objecten (tear-off) zijn de beperkingen op het maken van dergelijke verwijzingen in constructorcode opgeheven, wat nuttig kan zijn bij het bouwen van interfaces op basis van de Flutter-bibliotheek. Bijvoorbeeld, om een widget Column te maken die meerdere Text-widgets bevat, kan je ā.map()ā aanroepen en de verwijzingen doorgeven aan de constructor Text.new van het Text-object: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [āAppleā, āOrangeā].map(Text.new).toList()); } }
- De mogelijkheden met betrekking tot het gebruik van functieverwijzingen zijn uitgebreid. Er is een mogelijkheid toegevoegd om generieke (generic) methoden en functieverwijzingen toe te passen om een niet-generieke methode en verwijzing te creëren: T id(T value) => value; var intId = id; // is toegestaan in versie 2.15 in plaats van «int Function(int) intId = id;» const fo = id; // verwijzing naar de functie id. const c1 = fo;
- In de bibliotheek dart:core is de ondersteuning voor enumeraties (enum) verbeterd, bijvoorbeeld, je kunt nu de stringwaarde van elke enum-waarde afleiden met behulp van de methode ā.nameā, waarden selecteren op naam, of paren van waarden vergelijken: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // zal āoneā afdrukken. print(MyEnum.values.byName(ātwoā) == MyEnum.two); // zal ātrueā afdrukken. final map = MyEnum.values.asNameMap(); print(map[āthreeā] == MyEnum.three); // ātrueā. }
- Er is een techniek voor het comprimeren van pointers geĆÆmplementeerd, waarmee een compactere weergave van pointers in 64-bits omgevingen kan worden gebruikt als een 32-bits adresruimte voldoende is voor adressering (niet meer dan 4 GB geheugen wordt gebruikt). Tests hebben aangetoond dat deze optimalisatie het mogelijk maakt om de grootte van de heap met ongeveer 10% te verkleinen. In de Flutter SDK is deze nieuwe modus standaard al ingeschakeld voor Android, en in een toekomstige release is deze ook gepland voor iOS.
- Het Dart SDK bevat nu tools voor debugging en prestatie-analyse (DevTools), die eerder in een afzonderlijk pakket werden aangeboden.
- Aan het commando 'dart pub' en de package repositories pub.dev zijn middelen toegevoegd om ongeplande publicatie van gevoelige informatie te volgen, bijvoorbeeld door het achterlaten van inloggegevens voor continue integratiesystemen en cloudomgevingen binnen een pakket. In het geval van het ontdekken van dergelijke lekken wordt de uitvoering van het commando 'dart pub publish' onderbroken met een foutmelding. In het geval van een vals alarm is er een mogelijkheid om de controle te omzeilen via een whitelist.
- Aan de pub.dev repository is de mogelijkheid toegevoegd om een reeds gepubliceerde versie van een pakket in te trekken, bijvoorbeeld in het geval van het ontdekken van gevaarlijke fouten of kwetsbaarheden. Eerder werd voor dergelijke correcties een opvolgende versie gepubliceerd, maar in sommige situaties is het nodig om een eerdere release daadwerkelijk in te trekken en de verdere verspreiding ervan snel stop te zetten (bijvoorbeeld als de correcties nog niet gereed zijn of als per ongeluk een volledige release in plaats van een testversie is gepubliceerd). Na intrekking kan het pakket niet meer worden herkend in de commando's 'pub get' en 'pub upgrade', en op systemen waar het al is geĆÆnstalleerd, wordt bij de volgende uitvoering van 'pub get' een speciale waarschuwing weergegeven.
- Er is bescherming toegevoegd tegen de kwetsbaarheid (CVE-2021-22567), veroorzaakt door het gebruik van unicode-tekens in de code die de weergavevolgorde wijzigen.
- De kwetsbaarheid (CVE-2021-22568) is verholpen, die het mogelijk maakte om zich voor te doen als een andere gebruiker van pub.dev bij het publiceren van pakketten op externe servers die oauth2-toegangstokens voor pub.dev accepteren. Bijvoorbeeld, deze kwetsbaarheid kan worden gebruikt voor aanvallen op interne en zakelijke pakketservers. Ontwikkelaars die pakketten alleen op pub.dev plaatsen, worden door dit probleem niet geraakt.
Tegelijkertijd is er een belangrijke release van het Flutter 2.8 framework voor de ontwikkeling van gebruikersinterfaces gepresenteerd, dat wordt beschouwd als een alternatief voor React Native en waarmee applicaties voor de platforms iOS, Android, Windows, macOS en Linux kunnen worden uitgebracht op basis van ƩƩn codebase, evenals het maken van applicaties die in browsers draaien. Op basis van Flutter is de gebruikersinterface gebouwd van het microkernel besturingssysteem Fuchsia, dat door Google wordt ontwikkeld. Het is opgemerkt dat het aantal applicaties op Flutter 2 in de Google Play Store in de afgelopen zes maanden is gestegen van 200.000 naar 375.000, oftewel bijna verdubbeld.
De meeste Flutter-code is geschreven in Dart, terwijl de runtime-engine voor het uitvoeren van applicaties is geschreven in C++. Bij het ontwikkelen van applicaties kan naast de standaard Dart-taal ook de Dart Foreign Function Interface worden gebruikt om C/C++-code aan te roepen. Hoge prestaties worden bereikt door applicaties te compileren naar machinecode voor de doelplatforms. Het programma hoeft niet opnieuw te worden gecompileerd na elke wijziging ā Dart biedt een hot reload-modus waarmee aanpassingen in een actieve applicatie kunnen worden aangebracht en direct het resultaat kan worden geĆ«valueerd.
De veranderingen in de nieuwe release van Flutter omvatten optimalisatie van de opstarttijd en het geheugengebruik op mobiele apparaten. Het aansluiten van applicaties op backend-services zoals Firebase en Google Cloud is vereenvoudigd. De tools voor integratie met Google Ads zijn gestabiliseerd. De ondersteuning voor camera's en web-plug-ins is aanzienlijk verbeterd. Nieuwe middelen zijn aangeboden om de ontwikkeling te vereenvoudigen, zoals een widget voor authenticatie met Firebase. De Flame-engine, die is bedoeld voor de ontwikkeling van 2D-games met Flutter, is bijgewerkt.
Bron: opennet.ru
