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
