Saadaval on programmeerimiskeel Dart 2.15 ja raamistik Flutter 2.8

Google on välja andnud programmikeele Dart 2.15, mis jätkab oluliselt ümber kujundatud Dart 2 haru arendamist. See erineb algsest Dart'i versioonist tugeva staatilise tüübistamise kasutamise poolest (tüübid võivad automaatselt tuvastuda, mistõttu tüüpide määramine ei ole kohustuslik, kuid dünaamilist tüübistamist enam ei kasutata ning algselt määratud tüüp kinnitatakse muutujale, rakendades hiljem range tüübikontrolli).

Darti keele omadused:

  • Tuttav ja lihtne õppida süntaks, mis on loomulik JavaScripti, C ja Java programmeerijatele.
  • Kiire käivitamine ja kõrge jõudlus kõigis kaasaegsetes veebibrauserites ja erinevates keskkondades, alates kantavatest seadmetest kuni võimsate süsteemideni. serverite.
  • Klasside ja liideste määramine, mis võimaldab kapseldamist ja olemasolevate meetodite ning andmete taaskasutamist.
  • Tüüpide määramine muudab tõrkeotsingu ja vigade avastamise lihtsamaks, teeb koodi selgemaks ja loetavamaks, lihtsustab selle täiendamist ja analüüsi teiste arendajate poolt.
  • Toetatud tüüpide seas: erinevad hash'id, massiivid ja nimekirjad, järjekorrad, numbrilised ja stringitüübid, kuupäeva ja aja määramise tüübid, regulaaravaldised (RegExp). On võimalus luua oma tüüpe.
  • Paralleelse täitmise korraldamiseks soovitatakse kasutada klasse, millel on atribuut isolate, mille kood täidetakse täielikult isoleeritud ruumis eraldi mälu piirkonnas, suheldes põhiprotsessiga sõnumite saatmise kaudu.
  • Toetatakse raamatukogude kasutamist, mis lihtsustavad suurte veebiprojektide hooldust ja tõrkeotsingut. Kolmandate osapoolte funktsioonide rakendused võivad olla integreeritud jagatud raamatukogudena. Rakendusi saab jagada osadeks ja iga osa arendamine võib olla usaldatud eraldi programmeerijate meeskonnale.
  • Valmis tööriistade kogum arenduseks Dart keeles, sealhulgas dünaamilise arenduse ja tõrkeotsingu vahendite rakendamine jooksva koodi parandamisega ('edit-and-continue').
  • Darti arendamise lihtsustamiseks on saadaval SDK, pakettide haldur pub, staatiline koodianalüsaator dart_analyzer, raamatukogude komplekt, integreeritud arenduskeskkond DartPad ning Dart toetavad pistikprogrammid IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 ja Vim jaoks.
  • Lisapakettide raamatukogud ja utiliidid levitatakse pubi hoidla kaudu, mis sisaldab umbes 22 tuhat paketti.

Darti versiooni 2.15 põhimuudatused:

  • Pakutakse vahendeid ülesannete kiireks paralleelseks täitmiseks eraldatud töötlejatega. Mitme tuumaga süsteemides käitab Dart runtime vaikimisi rakenduse koodi ühel CPU tuumal, samas kui muud tuumad kasutatakse süsteemi ülesannete, nagu sünkroonsed sisend/väljund, failide kirjutamine või võrguühenduste loomine, täitmiseks. Rakenduste jaoks, mis vajavad töötlejate paralleelset täitmist, näiteks animatsioonide joonistamiseks liideses, on ette nähtud võimalus käivitada eraldi koodiplokke (isolate), mis on üksteisest eraldatud ja täidetakse teistel CPU tuumadel samaaegselt rakenduse põhivooluga. Vigade vältimiseks, mis tekivad sama andmekogumiga töötava koodi samaaegsel täitmisel erinevates isolate-blokkides, on muudetavate objektide jagamine keelatud, ja töötlejatevaheline suhtlemine toimub sõnumite edastamise mudeli alusel.

    Dart 2.15 toob uue kontseptsiooni — isoleeritud plokkide rühmad (isolate groups), mis võimaldavad korraldada ühisjuurdepääsu erinevatele andmestruktuuridele rühma kuuluvates isoleeritud plokkides. See aitab märkimisväärselt vähendada kulusid, kui töötlejad suhtlevad grupis. Näiteks käivitamine täiendava isoleeritud ploki olemasolevas rühmas toimub 100 korda kiiremini ning vajab 10–100 korda vähem mälu kui isoleeritud isoleeritud ploki käivitamine, kuna välistatakse programmis andmestruktuuride initsialiseerimise vajadus.

    Kuigi isolatsiooni blokides on endiselt keelatud jagada muutuvaid objekte, kasutatakse gruppides ühte jagatud heap-mälu, mis võimaldab oluliselt kiirendada objektide edastamist ühest plokist teise, vältides ressursimahukaid kopeerimise operatsioone. Uues versioonis on samuti lubatud edastada töötluriigi tulemust, kui kutsuda Isolate.exit(), et edastada andmeid vanemasse isolatsiooni plokki ilma kopeerimise operatsioonideta. Lisaks on sõnumi edastamise mehhanismi optimeeritud — väikesed ja keskmised sõnumid töödeldakse nüüd ligikaudu 8 korda kiiremini. Isolatsiooni plokkide vahel edastatavate objektide hulka SendPort.send() abil on lisatud mõned funktsioonitüübid, sulgud ja virnastuse jälgimine.

  • Erinevate objektide funktsioonide sihtmärkide (tear-off) loomise vahendites on eemaldatud piirangud sihtmärkide loomisele konstruktorite koodis, mis võib olla kasulik Flutteri raamatukogu põhjal liideste ehitamisel. Näiteks, et luua Column vidjet, mis sisaldab mitmeid Text vidjede hulgast, saab kutsuda „.map()” ja edastada sihtmärgid Text.new konstruktorile: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
  • Funktsioonide sihtmärkide kasutamisega seotud võimalusi on laiendatud. On lisatud võimalus rakendada üldisi (generic) meetodeid ja funktsioonide sihtmärke mitte-generic meetodi ja sihtmärkide loomiseks: T id<T>(T value) => value; var intId = id<int>; // lubatud versioonis 2.15 asemel „int Function(int) intId = id;” const fo = id; // funktsiooni id sihtmärk. const c1 = fo<int>;
  • Teegib dart:core toimetajate toetuse parandamine (enum), näiteks on võimalik välja printida iga enum'i väärtuse stringiline väärtus, kasutades meetodit ".name", teostada väärtuste valikut nime järgi või teostada väärtuste paaride sobitamist: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // tõlgitakse "one". print(MyEnum.values.byName('two') == MyEnum.two); // tõlgitakse "true". final map = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // "true". }
  • Rakendatud on näidikute tihendamise tehnika, mis võimaldab kasutada kompaktsemat esitusviisi näidikutest 64-bitistes keskkondades, kui aadressimiseks piisab 32-bitise aadressiruumi olemasolust (kuni 4 GB mälu). Testid on näidanud, et selline optimeerimine suudab vähendada mälu suurust ligikaudu 10%. Flutter SDK-s on uus režiim vaikimisi aktiveeritud Androidi jaoks ja tulevases väljaandes on plaanis see aktiveerida ka iOS-i jaoks.
  • Dart SDK koosneb tööriistadest tõrkeotsinguks ja jõudluse analüüsimiseks (DevTools), mis varem pakuti eraldi paketina.
  • Komandisse «dart pub» ja pub.dev paketite hoidlatest on lisatud vahendid, et jälgida juhuslikku tundliku teabe avaldamist, näiteks jätmist paketti pideva integreerimise ja pilvekeskkondade jaoks mõeldud mandaate. Kui sarnaseid lekkeid tuvastatakse, katkestatakse käsu «dart pub publish» täitmine veateatega. Vale positiivse puhul on võimalus kontrollida musta nimekirja kaudu.
  • pub.dev repole on nüüd võimalus tagasi võtta juba avaldatud paketiversioon, näiteks ohtlike vigade või haavatavuste tuvastamise korral. Varasemalt praktiseeriti selliste paranduste jaoks järgnevate versioonide avaldamist, kuid mõnel juhul on vajalik varasema väljaande tühistamine ja selle edasise leviku peatamine (näiteks kui parandused ei ole veel valmis või kui täielik väljaanne avaldati ekslikult katseversiooni asemel). Pärast tagasivõtmist ei tuvastata paketti "pub get" ja "pub upgrade" käskude kaudu ning juba installeeritud süsteemides annab järgmise "pub get" käivitamise korral ilmse hoiatuse.
  • Lisatud kaitse haavatavuse (CVE-2021-22567) eest, mis on põhjustatud unicode-märkide kasutamisest koodis, mis muudavad kuvamise järjekorda.
  • Parandatud haavatavust (CVE-2021-22568), mis võimaldas end teiste kasutajatena esitleda pub.dev-is pakettide avaldamisel kolmandale serverile, mis aktsepteerib pub.dev-i oauth2-juurdepääsukontosid. Näiteks võib haavatavust kasutada rünnakuks sisemistele ja ettevõtte paketiserveritele. Arendajaid, kes avaldavad pakette ainult pub.dev-is, see probleem ei puuduta.

Samaaegselt tutvustati märkimisväärset Flutter 2.8 kasutajaliidese loomise raamistiku versiooni, mida näidatakse kui alternatiivi React Native’ile ja mis võimaldab ühe koodibaasi põhjal toota rakendusi platvormidele iOS, Android, Windows, macOS ja Linux, samuti luua rakendusi brauseris käivitamiseks. Flutter põhjal on loodud kasutajaliides Google'is arendatavale mikrokerne operatsioonisüsteemile Fuchsia. Märgitakse, et viimase kuue kuu jooksul on Flutter 2 rakenduste arv Google Play poes kasvanud 200 tuhandelt 375 tuhandele, st pea kahekordistunud.

Flutteri põhikood on kirjutatud Dart-keeles, samas kui rakenduste käitusmootor on kirjutatud C++-s. Rakenduste arendamisel on Flutteri natiivset Dart-keelt lisaks võimalik kasutada Dart Foreign Functioni liidest C/C++ koodi kutsumiseks. Suurt jõudlust saavutatakse rakenduste kompileerimise kaudu sihtruumi masina koodiks. Samuti ei ole programmi pärast iga muudatust vaja uuesti kompileerida — Dart pakub kuuma taaskäivitamise režiimi, mis võimaldab teha muudatusi töötavas rakenduses ja kohe tulemusi hinnata.

Uues Flutteri versioonis on märgitud käivitamise ja mälu kasutuse optimeerimist mobiilseadmetes. Rakenduste ühendamine tagateenustega, nagu Firebase ja Google Cloud, on lihtsustatud. Google Adsi integreerimise tööriistad on stabiilsemad. Oluliselt on paranenud kaamerate ja veebiplaginatega tugi. Pakutakse uusi tööriistu arendamise lihtsustamiseks, näiteks on lisatud Firebase autentimise vidin. Flame'i mootor, mis mõeldud 2D-mängude arendamiseks Flutteri abil, on uuendatud.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster