Google tegi avalikuks Dart 2.15 programmeerimiskeele versiooni, jätkates Dart 2 oluliselt ümberkujundatud haru arendamist, mis erineb originaalsest Dart keele versioonist kiire staatilise tüübistatistika rakendamise poolest (tüüpe saab automaatselt tuletada, seetõttu ei ole tüüpide määramine kohustuslik, Kuid dünaamilist tüübistatistikast ei kasutata enam, ja algselt tuletatud tüüp kinnitatakse muutuja külge ning seda kontrollitakse rangelt hiljem).
Darti keele omadused:
- Harjumuspärane ja lihtne õppida süntaks, mis on loomulik JavaScripti, C ja Java programmeerijatele.
- Kiire käivitamise ja kõrge jõudluse tagamine kõigis kaasaegsetes veebibrauserites ja erinevates keskkondades, alates kaasaskantavatest seadmetest kuni võimsate. serverid.
- Klasside ja liideste määratlemise võimalus, mis võimaldab kasutada kapseldamist ja olemasolevaid meetodeid ning andmete taaskasutamist.
- Tüüpide määramine lihtsustab tõrkeotsingut ja vigade tuvastamist, muudab koodi selgemaks ja arusaadavamaks, lihtsustab selle täiustamist ja kolmandate osapoolte arendajate analüüsi.
- Toetatavate tüüpide hulka kuuluvad erinevad hash'id, massiivide ja nimekirjade tüübid, järjekorrad, numbrilised ja stringi tüübid, kuupäeva jaotuse ning aja määramiseks mõeldud tüübid, regulaaravaldised (RegExp). On võimalik luua oma tüüpe.
- Paralleelse täitmise korraldamiseks soovitatakse kasutada klasse, mille atribuut on isolate, mille kood täidetakse täielikult isoleeritud ruumis, eraldi mälu piirkonnas, suheldes peaprotsessiga sõnumite saatmise kaudu.
- Raamatukogude toetamine, mis lihtsustab suurte veebiprojektide hooldust ja tõrkeotsingut. Kolmandate osapoolte rakendused saab lisada jagatud raamatukogudena. Rakendusi saab jagada osadeks ja igale osale võib määrata eraldi programmeerijate meeskonna arendamise.
- Valmiste tööriistade komplekt Darti keeles arenduse toetamiseks, sealhulgas dünaamilise arenduse ja tõrkeotsingu vahendite rakendamine jooksva koodi parandamisega («edit-and-continue»).
- Darti keele arendamise lihtsustamiseks on saadaval SDK, pakihaldur pub, staatiline koodianalüsaator dart_analyzer, raamatukogude komplekt, integreeritud arenduskeskkond DartPad ja Darti toetavad pistikprogrammid IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 ja Vim.
- Lisa ja utiliidid sisaldavad täiendavad paketid, mis jagatakse pub-repos, kus on ligikaudu 22 000 paketti.
Dart 2.15 versiooni peamised muudatused:
- Esitatud on vahendid ülesannete kiireks paralleelseks täitmiseks eraldatud töötlusprotsessoritega. Mitme südamikuga süsteemides Dart runtime käivitab vaikimisi rakenduse koodi ühel CPU südamikul, samas kui teised südamikud täidavad süsteemiülesandeid, nagu asünkroonne sisend/väljund, failide kirjutamine või võrgukutsed. Rakendustel, mis peavad oma töötlejat paralleelselt täitma, näiteks liidese animatsiooni joonistamise ajal, on võimalus käivitada eraldi koodiblokke (isolate), mis on üksteisest eraldatud ja mille täitmine toimub teistel CPU südamikel samaaegselt rakenduse põhivooga. Vigade eest kaitsmiseks, mis tekivad sama andmehulgaga töötava koodi samaaegsel täitmisel erinevates isolate-blokides, on muutuvate objektide jagamine erinevates isolate-blokides keelatud, ning töötlejate vaheliseks suhtluseks kasutatakse sõnumite edastamise mudelit.
Dart 2.15 toob välja uue kontseptsiooni — isoleeritud plokkide rühmad (isolate groups), mis võimaldab korraldada ühiskasutust erinevatele sisemistele andmestruktuuridele rühma kuuluvates isolate-blokides, mis vähendab märkimisväärselt töötlejate vahelise suhtluse üle pea. Näiteks käivitamine täiendavast isolate-blokist olemasolevas grupis on 100 korda kiirem ja vajab 10-100 korda vähem mälu kui eraldiseisva isolate-bloki käivitamine, kuna väheneb programmi andmestruktuuride algatamise vajadus.
Kuigi isolate-blokkides grupis on endiselt keelatud jagada muudetavaid objekte, kasutatakse gruppides ühiseid heap-mälu, mis võimaldab oluliselt kiirendada objektide edastamist ühest blokist teise ilma ressursimahukate kopeerimisoperatsioonide vajaduseta. Uues versioonis on samuti lubatud edastada käsitleja töö tulemused, kui kutsuda Isolate.exit(), et edastada andmeid vanemasse isolate-blokki ilma kopeerimisoperatsioonideta. Lisaks on optimeeritud sõnumite edastamise mehhanismi — väikesed ja keskmised sõnumid töödeldakse nüüd ligikaudu 8 korda kiiremini. Isolate-blokkide vahel edastatavate objektide hulka, kasutades SendPort.send() kutsumist, on lisatud mõned funktsioonide tüübid, sulgud ja virna jälgimine.
- Funktsioonide üksikute objektide viitamiseks (tear-off) konstruktori koodis loobumine piirangutest võimaldab selliste viidete loomist, mis võib olla kasulik Flutteri teegi põhjal liideste loomisel. Näiteks, et luua Column-widget, mis sisaldab mitmeid Text-widget'e, saate kutsuda „.map()” ja edastada viidatud Text.new konstruktorile: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [‘Apple’, ‘Orange’].map(Text.new).toList()); }}
- Funktsiooniviidete kasutamise võimalusi on laiendatud. Lisatud võimalus rakendada üldiseid (generic) meetodeid ja funktsiooniviiteid mitte-generic meetodi ja viidendi loomiseks: T id(T value) => value; var intId = id; // lubatud versioonis 2.15, mitte „int Function(int) intId = id;” const fo = id; // funktsiooniviide id. const c1 = fo;
- Raamatukogus dart:core on paranenud enumide (loendite) tugi, näiteks nüüd on võimalik iga enum'i väärtuse stringi väärtust välja printida meetodi „.name” abil, teha väärtuste valikut nime alusel või teostada väärtuste paaride vastavust: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // väljastatakse „one”. print(MyEnum.values.byName(‘two’) == MyEnum.two); // väljastatakse „true”. final map = MyEnum.values.asNameMap(); print(map[‘three’] == MyEnum.three); // „true”. }
- Tehnika näidikute tihendamiseks on rakendatud, võimaldades 64-bitistes keskkondades kasutada kompaktsemat näidikute esitamist, kui 32-bitine aadressiruumi on piisav (kasutatakse mitte rohkem kui 4 GB mälu). Testid on näidanud, et selline optimeerimine võimaldab vähendada kuhja suurust ligikaudu 10%. Flutter SDK-s on vaikimisi uus režiim juba aktiveeritud Androidi jaoks ja järgmises väljaandes on plaanis see sisse lülitada iOS-i jaoks.
- Dart SDK-s on lisatud tööriistad tõrkeotsimiseks ja jõudluse analüüsimiseks (DevTools), mis varem olid saadaval eraldi paketina.
- Dart pub meeskonda ja pakettide repoteid pub.dev on lisatud tööriistad juhuslike konfidentsiaalse teabe avaldamiste jälgimiseks, näiteks pideva integratsiooni süsteemide ja pilvesituatsioonide jaoks mõeldud sisselogimisandmete jätmine paketti. Kui sarnased lekked tuvastatakse, katkestatakse käsk 'dart pub publish' veateatega. Valehäirete korral on olemas võimalus kontrolli ümbersõiduks valge nimekirja kaudu.
- pub.dev repoteisse on lisatud võimalus juba avaldatud paketi versiooni tagasivõtmiseks, näiteks ohtlike vigade või haavatavuste avastamise korral. Varem praktiseeriti sarnaste paranduste tegemiseks korrigeerivat versiooni järgimist, kuid mõnel juhul on vajalik juba toimunud väljaande tühistamine ja selle edasise leviku kiire katkestamine (näiteks kui parandused ei ole veel valmis või kui täisversioon avaldati ekslikult testversiooni asemel). Pärast tagasivõtmist lakka pakett olemast saadaval käskudes 'pub get' ja 'pub upgrade', ning juba installitud süsteemides kuvatakse järgmise 'pub get' käivitamisel eriline hoiatusteade.
- Lisatud kaitse haavatavuse (CVE-2021-22567) vastu, mis on põhjustatud unicode-märkide kasutamisest koodis, mis muudavad kuvamist.
- Eemaldatud haavatavus (CVE-2021-22568), mis võimaldab end pub.dev'ile pakettide avaldamisel teiste kasutajatena esitada, kui kasutada kolmanda osapoole serverit, mis aktsepteerib pub.dev oauth2 juurdepääsutokenite puhul. Näiteks võib haavatavust kasutada rünnakuks sisemistele ja ettevõtte pakettide serveritele. Arendajad, kes avaldavad pakette ainult pub.dev-is, ei puutu probleemi.
Samal ajal esitleti olulist kasutajaliidese raamistikku Flutter 2.8, mida peetakse alternatiiviks React Native'ile ja mis võimaldab ühe koodibaasi põhjal luua rakendusi iOS, Android, Windows, macOS ja Linux platvormidele, samuti rakendusi, mis käivituvad brauserites. Flutteri põhjal on loodud Google'is arendatava mikrokerne operatsioonisüsteemi Fuchsia kasutajaliides. Märgitakse, et viimase kuue kuu jooksul on Flutter 2 rakenduste arv Google Play poes kasvanud 200 000-lt 375 000-ni, st peaaegu kahekordistunud.
Enamik Flutteri koodist on kirjutatud keeles Dart, samas kui rakenduste täitmiseks mõeldud runtime-mootor on kirjutatud C++. Rakenduste arendamisel, peale Flutteri põhikeele Dart, on võimalik kasutada Dart Foreign Function liidest C/C++ koodi kutsumiseks. Kõrge jõudlus saavutatakse rakenduste kompileerimise kaudu sihtplatvormidele masinkoodiks. Selle käigus ei pea programmi iga muudatuse järel uuesti kompileerima — Dart pakub kuumlaadimist, mis võimaldab muuta töötavat rakendust ja kohe tulemusi hinnata.
Uue Flutteri versiooni muudatustest on välja toodud käivitamise ja mälutarbimise optimeerimine mobiilseadmetes. Rakenduste ühendamine tagarakkude teenustega, nagu Firebase ja Google Cloud, on lihtsustatud. Google Adsi integreerimise tööriistad on stabiilSEM; suurenenud. Oluliselt on paranenud kaamerate ja veebipluginite tugi. Pakutakse uusi vahendeid arendamise lihtsustamiseks, näiteks on lisatud Firebase'i autentimise vidin. Uuendatud on mängumootor Flame, mis on mõeldud 2D-mängude arendamiseks Flutteri abil.
Allikas: opennet.ru
