Dart 2.15 programmeertaal en Flutter 2.8 framework beschikbaar

Google heeft de release gepubliceerd van de programmeertaal Dart 2.15, die de ontwikkeling voortzet van een radicaal opnieuw ontworpen tak van Dart 2, die verschilt van de originele versie van de Dart-taal door het gebruik van sterk statisch typen (typen kunnen automatisch worden afgeleid, dus het specificeren van typen is niet nodig, maar dynamisch typen wordt niet langer gebruikt en aanvankelijk wordt berekend dat het type aan de variabele wordt toegewezen en vervolgens wordt strikte typecontrole toegepast).

Kenmerken van de Dart-taal:

  • Bekende en gemakkelijk te leren syntaxis, natuurlijk voor JavaScript-, C- en Java-programmeurs.
  • Garandeert een snelle lancering en hoge prestaties voor alle moderne webbrowsers en verschillende soorten omgevingen, van draagbare apparaten tot krachtige servers.
  • De mogelijkheid om klassen en interfaces te definiëren die inkapseling en hergebruik van bestaande methoden en gegevens mogelijk maken.
  • Het specificeren van typen maakt het gemakkelijker om fouten te debuggen en te identificeren, maakt de code duidelijker en leesbaarder, en vereenvoudigt de wijziging en analyse ervan door externe ontwikkelaars.
  • Ondersteunde typen zijn onder meer: ​​verschillende soorten hashes, arrays en lijsten, wachtrijen, numerieke en stringtypen, typen voor het bepalen van datum en tijd, reguliere expressies (RegExp). Het is mogelijk om uw eigen typen te creëren.
  • Om parallelle uitvoering te organiseren, wordt voorgesteld om klassen te gebruiken met het isolate-attribuut, waarvan de code volledig in geïsoleerde ruimte in een apart geheugengebied wordt uitgevoerd, waarbij interactie met het hoofdproces plaatsvindt door het verzenden van berichten.
  • Ondersteuning voor het gebruik van bibliotheken die de ondersteuning en foutopsporing van grote webprojecten vereenvoudigen. Implementaties van functies door derden kunnen worden opgenomen in de vorm van gedeelde bibliotheken. Applicaties kunnen in delen worden opgedeeld en de ontwikkeling van elk deel aan een apart team van programmeurs toevertrouwen.
  • Een reeks kant-en-klare tools ter ondersteuning van de ontwikkeling in de Dart-taal, inclusief de implementatie van dynamische ontwikkelings- en foutopsporingstools met on-the-fly codecorrectie (“bewerken en doorgaan”).
  • Om de ontwikkeling in de Dart-taal te vereenvoudigen, wordt het geleverd met een SDK, een pakketbeheerder-pub, een statische code-analysator dart_analyzer, een reeks bibliotheken, een geïntegreerde ontwikkelomgeving DartPad en Dart-compatibele plug-ins voor IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 en Wim.
  • Extra pakketten met bibliotheken en hulpprogramma's worden gedistribueerd via de pub-repository, die ongeveer 22 pakketten bevat.

Grote veranderingen in Dart 2.15-release:

  • Biedt hulpmiddelen voor snelle parallelle uitvoering van taken met isolatie van handlers. Op multi-core systemen voert de Dart-runtime standaard applicatiecode uit op één CPU-kern en gebruikt andere kernen om systeemtaken uit te voeren, zoals asynchrone I/O, het schrijven naar bestanden of het maken van netwerkoproepen. Voor toepassingen die hun handlers parallel moeten uitvoeren, bijvoorbeeld om animaties in de interface weer te geven, is het mogelijk om afzonderlijke codeblokken te starten (isoleren), van elkaar geïsoleerd en gelijktijdig met de hoofdtoepassingsthread op andere CPU-kernen uit te voeren . Om te beschermen tegen fouten die optreden bij het gelijktijdig uitvoeren van code die met dezelfde set gegevens werkt, is het delen van veranderlijke objecten in verschillende geïsoleerde blokken verboden en wordt een model voor het doorgeven van berichten gebruikt voor interactie tussen handlers.

    Dart 2.15 introduceert een nieuw concept: geïsoleerde blokgroepen (isolate groups), waarmee u gedeelde toegang tot verschillende interne datastructuren kunt organiseren in geïsoleerde blokken die deel uitmaken van dezelfde groep, wat de overhead aanzienlijk kan verminderen bij interactie tussen handlers in een groep . Het starten van een extra isolate-blok in een bestaande groep is bijvoorbeeld 100 keer sneller en vereist 10-100 keer minder geheugen dan het starten van een afzonderlijk isolate-blok, omdat het niet meer nodig is om programmadatastructuren te initialiseren.

    Ondanks het feit dat geïsoleerde blokken in een groep nog steeds gedeelde toegang tot veranderlijke objecten verbieden, gebruiken de groepen een gedeeld heap-geheugen, dat de overdracht van objecten van het ene blok naar het andere aanzienlijk kan versnellen zonder de noodzaak om bronintensieve kopieerbewerkingen uit te voeren. Met de nieuwe versie kunt u ook het resultaat van de handler doorgeven bij het aanroepen van Isolate.exit() om gegevens over te dragen naar het bovenliggende isolate-blok zonder bewerkingen te kopiëren. Bovendien is het mechanisme voor berichtoverdracht geoptimaliseerd: kleine en middelgrote berichten worden nu ongeveer 8 keer sneller verwerkt. Objecten die tussen isolaten kunnen worden doorgegeven met behulp van de aanroep SendPort.send() omvatten bepaalde typen functies, sluitingen en stacktraces.

  • In de tools voor het maken van verwijzingen naar individuele functies in andere objecten (afscheuren) zijn de beperkingen voor het maken van vergelijkbare verwijzingen in constructorcode verwijderd, wat handig kan zijn bij het bouwen van interfaces op basis van de Flutter-bibliotheek. Als u bijvoorbeeld een Kolom-widget wilt maken die meerdere tekstwidgets bevat, kunt u ".map()" aanroepen en verwijzingen doorgeven naar de Text.new-constructor van het Text-object: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( kinderen: ['Apple', 'Oranje'].map(Text.new).toList()); } }
  • De mogelijkheden die samenhangen met het gebruik van functieaanwijzers zijn uitgebreid. De mogelijkheid toegevoegd om generieke methoden en functieaanwijzers te gebruiken om een ​​niet-generieke methode en aanwijzer te maken: T id (T-waarde) => waarde; var intId = id ; // toegestaan ​​in versie 2.15 in plaats van "int Function(int) intId = id;" const fo = id; // verwijzing naar functie-ID. const c1 = fo ;
  • De dart:core-bibliotheek heeft verbeterde ondersteuning voor enums. Je kunt nu bijvoorbeeld een stringwaarde van elke enum-waarde uitvoeren met behulp van de ".name"-methode, waarden op naam selecteren of waardenparen matchen: enum MyEnum { one , twee, drie } void main() { print(MyEnum.one.name); // "één" wordt afgedrukt. print(MijnEnum.values.byName('twee') == MijnEnum.two); // "true" wordt afgedrukt. definitieve kaart = MyEnum.values.asNameMap(); print(kaart['drie'] == MijnEnum.drie); // "WAAR". }
  • Er is een pointercompressietechniek geïmplementeerd die het gebruik van een compactere representatie van pointers in 64-bits omgevingen mogelijk maakt als een 32-bits adresruimte voldoende is voor adressering (er wordt niet meer dan 4 GB geheugen gebruikt). Uit tests is gebleken dat een dergelijke optimalisatie het mogelijk maakt de heap-grootte met ongeveer 10% te verkleinen. In de Flutter SDK is de nieuwe modus standaard al ingeschakeld voor Android, en het is de bedoeling dat deze in een toekomstige release ook voor iOS wordt ingeschakeld.
  • De Dart SDK bevat tools voor foutopsporing en prestatieanalyse (DevTools), die voorheen in een apart pakket werden geleverd.
  • Er zijn tools toegevoegd aan de opdracht “dart pub” en de pakketrepository's pub.dev om de onbedoelde publicatie van vertrouwelijke informatie op te sporen, waarbij bijvoorbeeld inloggegevens voor continue integratiesystemen en cloudomgevingen in het pakket achterblijven. Als dergelijke lekken worden gedetecteerd, wordt de uitvoering van het commando “dart pubpublish” onderbroken met een foutmelding. Als er een vals positief resultaat was, is het mogelijk om de controle te omzeilen via een witte lijst.
  • De mogelijkheid om een ​​reeds gepubliceerde versie van een pakket in te trekken is toegevoegd aan de pub.dev-repository, bijvoorbeeld als er gevaarlijke fouten of kwetsbaarheden worden ontdekt. Voorheen was het de gewoonte om voor dergelijke correcties een corrigerende versie te publiceren, maar in sommige situaties is het nodig om de bestaande release te annuleren en de verdere verspreiding ervan dringend te stoppen (bijvoorbeeld als de correctie nog niet gereed is of als er een volledige release beschikbaar is). per ongeluk gepubliceerd in plaats van een testversie). Na intrekking wordt het pakket niet langer geïdentificeerd in de opdrachten “pub get” en “pub upgrade”, en op systemen waarop het al is geïnstalleerd, wordt een speciale waarschuwing gegeven de volgende keer dat “pub get” wordt uitgevoerd.
  • Bescherming toegevoegd tegen een kwetsbaarheid (CVE-2021-22567) veroorzaakt door het gebruik van Unicode-tekens in de code die de weergavevolgorde wijzigen.
  • Er is een kwetsbaarheid opgelost (CVE-2021-22568) waardoor u zich kunt voordoen als een andere pub.dev-gebruiker bij het publiceren van pakketten naar een server van derden die pub.dev oauth2-toegangstokens accepteert. Het beveiligingslek kan bijvoorbeeld worden gebruikt om interne pakketservers en bedrijfspakketservers aan te vallen. Ontwikkelaars die alleen pakketten hosten op pub.dev hebben geen last van dit probleem.

Tegelijkertijd werd een belangrijke release van het gebruikersinterfaceframework Flutter 2.8 gepresenteerd, dat wordt beschouwd als een alternatief voor React Native en waarmee, op basis van een enkele codebasis, applicaties kunnen worden vrijgegeven voor iOS, Android, Windows, macOS en Linux-platforms, maar ook applicaties maken die in browsers kunnen worden uitgevoerd. Op basis van Flutter is een aangepaste shell voor het door Google ontwikkelde Fuchsia microkernel-besturingssysteem gebouwd. Opgemerkt wordt dat het aantal Flutter 2-applicaties in de Google Play Store de afgelopen zes maanden is toegenomen van 200 duizend naar 375 duizend, d.w.z. bijna twee keer.

Het grootste deel van de Flutter-code is geïmplementeerd in de Dart-taal en de runtime-engine voor het uitvoeren van applicaties is geschreven in C++. Bij het ontwikkelen van applicaties kunt u, naast de eigen Dart-taal van Flutter, de Dart Foreign Function-interface gebruiken om C/C++-code aan te roepen. Hoge uitvoeringsprestaties worden bereikt door applicaties te compileren naar native code voor doelplatforms. In dit geval hoeft het programma niet na elke wijziging opnieuw te worden gecompileerd - Dart biedt een hot reload-modus waarmee u wijzigingen kunt aanbrengen in een actieve applicatie en het resultaat onmiddellijk kunt evalueren.

Onder de veranderingen in de nieuwe release van Flutter wordt de optimalisatie van de opstartsnelheid en het geheugenverbruik op mobiele apparaten opgemerkt. Het is eenvoudiger om apps te verbinden met backend-services zoals Firebase en Google Cloud. Tools voor integratie met Google Ads zijn gestabiliseerd. Ondersteuning voor camera's en webplug-ins is aanzienlijk verbeterd. Er zijn nieuwe tools voorgesteld om de ontwikkeling te vereenvoudigen. Er is bijvoorbeeld een widget toegevoegd voor authenticatie met behulp van Firebase. De Flame-engine, ontworpen voor het ontwikkelen van 2D-games met Flutter, is bijgewerkt.

Bron: opennet.ru

Voeg een reactie