Dart 2.15 programmeringssprog og Flutter 2.8 framework til rådighed

Google har udgivet en udgivelse af programmeringssproget Dart 2.15, som fortsætter udviklingen af ​​en radikalt redesignet Dart 2-gren, som adskiller sig fra den originale version af Dart-sproget ved at bruge stærk statisk skrivning (typer kan automatisk udledes, så angivelse af typer er ikke påkrævet, men dynamisk indtastning bruges ikke længere og blev beregnet i første omgang, typen tildeles variablen, og derefter anvendes streng typekontrol).

Dart sprogfunktioner:

  • En velkendt og nem at lære syntaks, der er naturlig for JavaScript-, C- og Java-programmører.
  • Giver hurtig opstart og høj ydeevne til alle moderne webbrowsere og forskellige typer miljøer, fra bærbare enheder til kraftfulde servere.
  • Evnen til at definere klasser og grænseflader for at muliggøre indkapsling og genbruge eksisterende metoder og data.
  • Angivelse af typer gør det lettere at fejlfinde og opdage fejl, gør koden klarere og mere læsbar og gør det nemmere for tredjepartsudviklere at forfine og analysere den.
  • Blandt de understøttede typer: forskellige typer hashes, arrays og lister, køer, numeriske og strengtyper, dato- og tidstyper, regulære udtryk (RegExp). Det er muligt at lave dine egne typer.
  • For at organisere parallel eksekvering foreslås det at bruge klasser med isolate-attributten, hvis kode udføres helt i et isoleret rum i et separat hukommelsesområde, der interagerer med hovedprocessen ved at sende beskeder.
  • Support til brug af biblioteker, der forenkler support og fejlretning af store webprojekter. Tredjepartsimplementeringer af funktioner kan inkluderes som delte biblioteker. Applikationer kan opdeles i dele, og udviklingen af ​​hver del kan tildeles et separat team af programmører.
  • Et sæt af færdiglavede værktøjer til at understøtte udvikling i Dart-sproget, herunder implementering af dynamiske udviklingsværktøjer og fejlretning med kodekorrektion på farten ("rediger-og-fortsæt").
  • En SDK, en pub-pakkemanager, en dart_analyzer statisk kodeanalysator, et sæt biblioteker, en DartPad IDE og Dart-aktiverede plugins til IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 og Vim leveres for at forenkle Dart-udvikling.
  • Yderligere pakker med biblioteker og hjælpeprogrammer distribueres gennem pub-lageret, som har omkring 22 tusind pakker.

Vigtigste ændringer i udgivelsen af ​​Dart 2.15:

  • Giver værktøjer til hurtig parallel udførelse af opgaver med isolering af handlere. På multi-core-systemer kører Dart-runtime som standard applikationskode på én CPU-kerne og bruger andre kerner til at udføre systemopgaver såsom asynkron I/O, skrivning til filer eller foretage netværksopkald. For applikationer, der skal udføre deres behandlere parallelt, for eksempel for at gengive animation i grænsefladen, er det muligt at starte separate kodeblokke (isolere), isoleret fra hinanden og eksekveret på andre CPU-kerner samtidigt med hovedapplikationstråden . For at beskytte mod fejl, der opstår, når samtidig udførelse af kode arbejder med det samme sæt data, er deling af mutable objekter i forskellige isolerede blokke forbudt, og en meddelelsesoverførselsmodel bruges til interaktion mellem behandlere.

    Dart 2.15 introducerer et nyt koncept - isolerede blokgrupper (isolerede grupper), som giver dig mulighed for at organisere delt adgang til forskellige interne datastrukturer i isolerede blokke, der er en del af den samme gruppe, hvilket kan reducere overhead betydeligt, når du interagerer mellem behandlere i en gruppe . For eksempel er lancering af en ekstra isoleret blok i en eksisterende gruppe 100 gange hurtigere og kræver 10-100 gange mindre hukommelse end at starte en separat isoleret blok, på grund af eliminering af behovet for at initialisere programdatastrukturer.

    På trods af at isolerede blokke i en gruppe stadig forbyder delt adgang til mutable objekter, bruger grupperne en delt heap-hukommelse, som markant kan fremskynde overførslen af ​​objekter fra en blok til en anden uden behov for at udføre ressourcekrævende kopieringsoperationer. Den nye version giver dig også mulighed for at videregive resultatet af behandleren, når du kalder Isolate.exit() for at overføre data til den overordnede isoleringsblok uden kopieringsoperationer. Derudover er beskedtransmissionsmekanismen blevet optimeret - små og mellemstore beskeder behandles nu cirka 8 gange hurtigere. Objekter, der kan sendes mellem isolater ved hjælp af SendPort.send()-kaldet inkluderer nogle typer funktioner, lukninger og stakspor.

  • I værktøjerne til at oprette pointere til individuelle funktioner i andre objekter (tear-off) er begrænsninger for at oprette lignende pointere i konstruktørkode blevet fjernet, hvilket kan være nyttigt, når man bygger grænseflader baseret på Flutter-biblioteket. For at oprette en Column-widget, der omfatter flere tekst-widgets, kan du f.eks. kalde ".map()" og sende pointere til Text.new-konstruktøren af ​​Text-objektet: klasse FruitWidget udvider StatelessWidget { @override Widget build(BuildContext context) { return Column( børn: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Mulighederne forbundet med brug af funktionspointere er blevet udvidet. Tilføjet muligheden for at bruge generiske metoder og funktionspointere til at skabe en ikke-generisk metode og pointer: T id (T værdi) => værdi; var intId = id ; // tilladt i version 2.15 i stedet for "int Function(int) intId = id;" const fo = id; // pointer til funktions-id. const c1 = fo ;
  • Dart:core-biblioteket har forbedret understøttelse af enums, for eksempel kan du nu udlæse en strengværdi fra hver enum-værdi ved hjælp af ".name"-metoden, vælge værdier efter navn eller matche værdipar: enum MyEnum { one , to, tre } void main() { print(MyEnum.one.name); // "en" vil blive udskrevet. print(MyEnum.values.byName('to') == MitEnum.to); // "true" vil blive udskrevet. final map = MyEnum.values.asNameMap(); print(kort['tre'] == MitEnum.tre); // "rigtigt". }
  • En pointer-komprimeringsteknik er blevet implementeret, der tillader brugen af ​​en mere kompakt repræsentation af pointere i 64-bit-miljøer, hvis et 32-bit adresserum er tilstrækkeligt til adressering (der bruges ikke mere end 4 GB hukommelse). Tests har vist, at en sådan optimering gør det muligt at reducere bunken med ca. 10 %. I Flutter SDK er den nye tilstand allerede aktiveret for Android som standard og er planlagt til at blive aktiveret til iOS i en fremtidig udgivelse.
  • Dart SDK indeholder værktøjer til fejlfinding og ydeevneanalyse (DevTools), som tidligere blev leveret i en separat pakke.
  • Værktøjer er blevet tilføjet til kommandoen "dart pub" og pub.dev-pakkelagrene for at spore utilsigtet offentliggørelse af fortrolige oplysninger, for eksempel ved at efterlade legitimationsoplysninger til kontinuerlige integrationssystemer og cloud-miljøer inde i pakken. Hvis sådanne lækage opdages, afbrydes udførelsen af ​​"dart pub publish"-kommandoen med en fejlmeddelelse. Hvis der var en falsk positiv, er det muligt at omgå kontrollen gennem en hvidliste.
  • Muligheden for at tilbagekalde en allerede offentliggjort version af en pakke er blevet tilføjet til pub.dev-lageret, for eksempel hvis der opdages farlige fejl eller sårbarheder. Tidligere, for sådanne rettelser, var praksis at offentliggøre en korrigerende version, men i nogle situationer er det nødvendigt at annullere den eksisterende udgivelse og omgående stoppe dens videre distribution (f.eks. hvis rettelsen endnu ikke er klar, eller hvis en fuld udgivelse var udgivet ved en fejl i stedet for en testversion). Efter tilbagekaldelse identificeres pakken ikke længere i kommandoerne "pub get" og "pub upgrade", og på systemer, der allerede har installeret den, udsendes en særlig advarsel, næste gang "pub get" udføres.
  • Tilføjet beskyttelse mod en sårbarhed (CVE-2021-22567) forårsaget af brugen af ​​unicode-tegn i koden, der ændrer visningsrækkefølgen.
  • Rettede en sårbarhed (CVE-2021-22568), der giver dig mulighed for at efterligne en anden pub.dev-bruger, når du udgiver pakker til en tredjepartsserver, der accepterer pub.dev oauth2-adgangstokens. For eksempel kan sårbarheden bruges til at angribe interne og virksomhedspakkeservere. Udviklere, der kun hoster pakker på pub.dev, er ikke berørt af dette problem.

Samtidig blev der præsenteret en væsentlig udgivelse af brugergrænsefladerammeværket Flutter 2.8, som betragtes som et alternativ til React Native og tillader, baseret på en enkelt kodebase, at frigive applikationer til iOS, Android, Windows, macOS og Linux-platforme, samt oprette applikationer til at køre i browsere. En brugerdefineret shell til Fuchsia-mikrokerne-operativsystemet udviklet af Google er bygget på basis af Flutter. Det bemærkes, at i løbet af de seneste seks måneder er antallet af Flutter 2-applikationer i Google Play Butik steget fra 200 tusind til 375 tusind, dvs. næsten to gange.

Størstedelen af ​​Flutter-koden er implementeret i Dart, og runtime-motoren til at køre applikationer er skrevet i C++. Når du udvikler applikationer, kan du ud over Flutters oprindelige Dart-sprog bruge Dart Foreign Function-grænsefladen til at kalde C/C++-kode. Høj runtime ydeevne opnås ved at kompilere applikationer til indbygget kode til målplatforme. Samtidig behøver programmet ikke at blive rekompileret efter hver ændring - Dart giver en hot reload-tilstand, der giver dig mulighed for at foretage ændringer i en kørende applikation og straks evaluere resultatet.

Blandt ændringerne i den nye udgivelse af Flutter bemærkes optimering af lanceringshastighed og hukommelsesforbrug på mobile enheder. Det er nemmere at forbinde apps til backend-tjenester som Firebase og Google Cloud. Værktøjer til integration med Google Ads er blevet stabiliseret. Understøttelse af kameraer og web-plugins er blevet væsentligt forbedret. Nye værktøjer er blevet foreslået for at forenkle udviklingen, for eksempel er der tilføjet en widget til godkendelse ved hjælp af Firebase. Flame-motoren, designet til at udvikle 2D-spil ved hjælp af Flutter, er blevet opdateret.

Kilde: opennet.ru

Tilføj en kommentar