Sunt disponibile limbajul de programare Dart 2.15 și frameworkul Flutter 2.8

Compania Google a publicat versiunea limbajului de programare Dart 2.15, continuând dezvoltarea unei ramuri radical revizuite a Dart 2, care se deosebește de varianta inițială a limbajului Dart prin utilizarea unei tipizări statice puternice (tipurile pot fi deduse automat, astfel încât specificarea tipurilor nu este obligatorie, dar tipizarea dinamică nu mai este utilizată, iar tipul dedus inițial este asociat variabilei și este supus unei verificări stricte a tipului).

Caracteristicile limbajului Dart:

  • Sintaxă familiară și simplă de învățat, naturală pentru programatorii de JavaScript, C și Java.
  • Asigurarea unui timp rapid de pornire și performanțe ridicate pentru toate browserele web moderne și diverse tipuri de medii, de la dispozitive portabile la cele puternice. servere.
  • Posibilitatea de a defini clase și interfețe, permițând utilizarea încapsulării și reutilizarea metodelor și datelor existente.
  • Specificarea tipurilor permite simplificarea depanării și identificarea erorilor, face codul mai clar și mai ușor de citit, facilitând îmbunătățirea și analiza codului de către alți dezvoltatori.
  • Printre tipurile acceptate se numără: diverse tipuri de hash-uri, array-uri și liste, cozi, tipuri numerice și de șiruri, tipuri pentru definirea datei și timpului, expresii regulate (RegExp). Există posibilitatea de a crea propriile tipuri.
  • Pentru organizarea executării paralele se recomandă utilizarea claselor cu atributul isolate, a căror cod rulează complet în spații izolate în zone separate de memorie, interacționând cu procesul principal prin trimiterea de mesaje.
  • Suport pentru utilizarea bibliotecilor, care facilitează mentenanța și depanarea proiectelor web mari. Implementările externe ale funcțiilor pot fi conectate sub formă de biblioteci partajate. Aplicațiile pot fi împărțite în părți, delegând dezvoltarea fiecărei părți unei echipe separate de programatori.
  • Un set de instrumente gata de utilizare pentru suportul dezvoltării în limbajul Dart, inclusiv implementarea unor unelte pentru dezvoltare dinamică și depanare cu corectarea codului în timp real („edit-and-continue”).
  • Pentru simplificarea dezvoltării în limbajul Dart, este livrat SDK-ul, managerul de pachete pub, analistul static de cod dart_analyzer, un set de biblioteci, mediu integrat de dezvoltare DartPad și plugin-uri cu suport Dart pentru IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 și Vim.
  • Pachetele suplimentare cu biblioteci și utilitare sunt distribuite prin intermediul repository-ului pub, care conține aproximativ 22.000 de pachete.

Principalele modificări în versiunea Dart 2.15:

  • Sunt oferite instrumente pentru executarea rapidă și paralelă a sarcinilor cu izolarea handler-ilor. Pe sistemele multi-core, Dart runtime execută în mod implicit codul aplicației pe un singur nucleu CPU, iar celelalte nuclee sunt utilizate pentru a efectua sarcini sistemice, cum ar fi input/output asincron, scrierea în fișiere sau efectuarea apelurilor de rețea. Pentru aplicațiile care trebuie să execute în paralel handler-ii lor, cum ar fi pentru redarea animațiilor în interfață, este prevăzută posibilitatea de a porni blocuri de cod separate (isolate), izolate unele de altele și executate pe alte nuclee CPU simultan cu firul principal al aplicației. Pentru a preveni erorile care apar din execuția simultană a codului care lucrează cu un singur set de date, utilizarea obiectelor modificabile este interzisă între diferitele blocuri isolate, iar interacțiunea între handleri se realizează printr-un model bazat pe transmiterea mesajelor.

    În Dart 2.15, este propusă o nouă concept — grupurile de blocuri izolate (isolate groups), care permit organizarea accesului comun la diverse structuri interne de date în blocurile isolate care fac parte din aceeași grupă, ceea ce reduce semnificativ costurile legate de interacțiunea handlerilor în grup. De exemplu, pornirea unui bloc isolate suplimentar în cadrul unei grupi existente se realizează de 100 de ori mai repede și necesită de 10-100 de ori mai puțină memorie decât pornirea unui bloc isolate izolat, datorită eliminării necesității de inițializare a structurilor de date ale programului.

    Deși partajarea obiectelor modificabile rămâne interzisă în blocurile isolate din grup, se folosește o memorie heap comună în grupuri, ceea ce permite accelerarea semnificativă a transferului de obiecte între blocuri fără a necesita operațiuni costisitoare de copiere. În noua versiune, este permisă, de asemenea, transmiterea rezultatelor procesului de tratare la apelul Isolate.exit() pentru a transfera date în blocul părinte isolat fără operațiuni de copiere. În plus, mecanismul de transmitere a mesajelor a fost optimizat — mesajele mici și medii sunt acum procesate de aproximativ 8 ori mai rapid. Printre obiectele care pot fi transferate între blocurile izolate prin apelul SendPort.send(), au fost incluse unele tipuri de funcții, închideri și trasări de stivă.

  • Restricțiile privind crearea de referințe la funcții separate în alte obiecte (tear-off) au fost eliminate în instrumentele pentru crearea acestor referințe în codul constructorilor, ceea ce poate fi util în construirea interfețelor bazate pe biblioteca Flutter. De exemplu, pentru a crea un widget Column care include mai multe widget-uri Text, puteți apela „.map()” și transmite referințele în constructorul Text.new al obiectului Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column(children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
  • Funcționalitățile legate de utilizarea referințelor la funcții s-au extins. A fost adăugată posibilitatea de a aplica metode generice (generic) și referințe la funcții pentru a crea o metodă și o referință non-generică: T id(T value) => value; var intId = id; // permis în versiunea 2.15 în loc de „int Function(int) intId = id;” const fo = id; // referința la funcția id. const c1 = fo;
  • În biblioteca dart:core, suportul pentru enumerări (enum) a fost îmbunătățit, de exemplu, acum este posibil să extragi valoarea de tip string din fiecare valoare enum folosind metoda „.name”, să selecționezi valori după nume sau să efectuezi asocieri de perechi de valori: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // se va afișa „one”. print(MyEnum.values.byName(‘two’) == MyEnum.two); // se va afișa „true”. final map = MyEnum.values.asNameMap(); print(map[‘three’] == MyEnum.three); // „true”. }
  • A fost implementată tehnica de comprimare a pointerilor, care permite utilizarea unei reprezentări mai compacte a pointerilor în medii de 64 de biți, dacă pentru adresare este suficient un spațiu de adresare de 32 de biți (se utilizează nu mai mult de 4 GB de memorie). Testele au arătat că această optimizare permite reducerea dimensiunii heap-ului cu aproximativ 10%. În SDK-ul Flutter, noul mod este activat în mod implicit pentru Android, iar în viitorul release este planificată activarea și pentru iOS.
  • SDK-ul Dart include instrumente pentru depanare și analiză a performanței (DevTools), care anterior erau furnizate într-un pachet separat.
  • În comanda „dart pub” și în repositoriul de pachete pub.dev au fost adăugate instrumente pentru monitorizarea publicării accidentale a informațiilor confidențiale, cum ar fi păstrarea acreditivelor pentru sistemele de integrare continuă și mediile cloud în interiorul pachetului. În caz de detectare a unor astfel de scurgeri, execuția comenzii „dart pub publish” va fi oprită cu un mesaj de eroare. Dacă a existat o activare falsă, a fost oferită opțiunea de a ocoli verificația printr-o listă albă.
  • În repositoriul pub.dev a fost adăugată posibilitatea de a rechema o versiune deja publicată a pachetului, de exemplu, în caz de descoperire a unor erori grave sau vulnerabilități. Anterior, pentru astfel de corecții se practica publicarea unei versiuni corective ulterioare, dar în anumite situații este necesară anularea efectivă a unei publicații și stoparea urgentă a distribuirii acesteia (de exemplu, dacă corecțiile nu sunt încă gata sau dacă, din greșeală, a fost publicată o versiune completă în loc de una de testare). După rechemare, pachetul nu mai este definit în comenzi precum „pub get” și „pub upgrade”, iar pe sistemele care l-au instalat, la următoarea execuție a „pub get” este generat un avertisment special.
  • A fost adăugată o protecție împotriva vulnerabilității (CVE-2021-22567) cauzată de utilizarea simbolurilor unicode în cod care schimbă ordinea de afișare.
  • A fost eliminată o vulnerabilitate (CVE-2021-22568) care permitea impersonarea altui utilizator pub.dev la publicarea pachetelor pe un server terț care acceptă tokenuri de acces oauth2 pub.dev. De exemplu, vulnerabilitatea poate fi utilizată pentru atacuri asupra serverelor interne și corporative de pachete. Problema nu afectează dezvoltatorii care publică pachete doar pe pub.dev.

A fost lansată o versiune semnificativă a framework-ului pentru construirea interfețelor utilizatorului Flutter 2.8, care este considerat o alternativă la React Native și permite, pe baza unei singure baze de cod, lansarea de aplicații pentru platformele iOS, Android, Windows, macOS și Linux, precum și crearea de aplicații care să funcționeze în browsere. Pe baza Flutter, a fost construită interfața utilizatorului a sistemului de operare microkernel Fuchsia, dezvoltat de Google. Se menționează că, în ultimele șase luni, numărul aplicațiilor pe Flutter 2 din Google Play Store a crescut de la 200.000 la 375.000, adică aproape dublu.

Majoritatea codului Flutter este realizat în limbajul Dart, iar motorul runtime pentru executarea aplicațiilor este scris în C++. În dezvoltarea aplicațiilor, pe lângă limbajul Dart, nativ pentru Flutter, se poate utiliza interfața Dart Foreign Function pentru a apela cod în C/C++. Performanța înaltă este atinsă datorită compilării aplicațiilor în cod mașină pentru platformele țintă. În acest fel, programul nu trebuie recompilat după fiecare modificare — Dart oferă un mod de reîncărcare rapidă, permițând modificări în aplicația în funcțiune și evaluarea imediată a rezultatului.

Printre modificările din noul release Flutter se numără optimizarea vitezei de lansare și a consumului de memorie pe dispozitive mobile. A fost simplificată conectarea aplicațiilor la servicii backend, cum ar fi Firebase și Google Cloud. Instrumentele pentru integrarea cu Google Ads au fost stabilizate. Suportul pentru camere și pluginurile web a fost semnificativ îmbunătățit. Au fost propuse noi instrumente pentru simplificarea dezvoltării, cum ar fi widgetul pentru autentificare folosind Firebase. Motorul Flame, destinat dezvoltării de jocuri 2D folosind Flutter, a fost actualizat.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster