Google avaldas programmeerimiskeele Dart 2.14 väljaande, jätkates oluliselt ümber töötatud Dart 2 haru arengut, mis erineb algsest Dart keele versioonist tugeva staatilise tüübistiku kasutamise poolest (tüübid võivad olla automaatselt tuletatud, seetõttu pole tüüpide määramine kohustuslik, kuid dünaamilist tüübistamist ei kasutata enam ning algselt arvutatud tüüp kinnitatakse muutujale ning sellele rakendatakse ranget tüübi kontrolli).
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.
- Täiendavad paketid raamatukogudega ja utiliidid levitatakse pub reposti kaudu, mis sisaldab üle 20 000 paketi.
Peamised muudatused Dart 2.14 väljaandes:
- Uus kolmekordse nihke operaator (>>>) on lisatud, mis erineb operaatorist (>>), kuna see teostab mittearvulise, vaid loogilise nihke, töötades ilma märgibiti arvesse võtmiseta (nihke teostamine toimub eristamata positiivsete ja negatiivsete numbrite vahel).
- Eemaldatud on piirangud tüübi argumentidele, mis ei võimaldanud kasutada genereeritud tüüpide funktsioone tüübina argumentidena. Näiteks võib nüüd määrata: late List<T Function(T)> idFunctions; var callback = [(T value) => value]; late S Function<S extends T Function(T)>(S) f;
- Argumentide määramine, millel on tüübid annotatsioonides, nagu @Deprecated, on lubatud. Näiteks võib nüüd määrata: @TypeHelper(42, "Tähendus")
- Standardse teegi (core) klassile Object on lisatud staatilised meetodid hash, hashAll ja hashAllUnordered. Klassile DateTime on paranendatud kohaliku aja töötlemist suve- ja talveaja vahel, mis ei ole jagatav ühe tunniga (näiteks Austraalias kasutatakse 30-minutist nihket). Paketti ffi on lisatud mälu jagamise mehhanismi tugi, mis vabastab ressursid automaatselt. Paketti ffigen on lisatud võimalus genereerida typedef-tüübi määratlusi Dart keeles C-st.
- 250 kõige populaarsemat paketti pub.dev'i hoidlast ja 94% top-1000-st on tõlgitud nulli turva režiimi rakendamiseks, mis aitab vältida krahhe, mis on põhjustatud muutujate kasutamisest, mille väärtus on määramata ja seatud "null". Režiim eeldab, et muutujatel ei tohi olla määramatuid väärtusi, kui neile ei ole selgelt antud väärtust null. Režiimis arvestatakse rangelt muutuja tüüpe, mis võimaldab kompilaatoril rakendada täiendavaid optimiseerimisi. Tüüpide vastavust kontrollitakse kompileerimise käigus, näiteks juhul, kui proovite määrata "null" väärtuse muutujale, mille tüüp ei toeta määramatust olekut, nagu "int", tuleb viga.
- Pakuti välja ühtlustatud reeglite komplekt koodianalüsaatorile (linter), mis tagab samaaegse toe koodi stiilijuhiste järgimisele Dart'is ja Flutter'i raamistikus. Ajaloolistel põhjustel erinevad Flutter'i ja Dart'i koodi vormindamise reeglid, lisaks sellele oli Dart'is kasutuses kaks reeglite komplekti — Google'i peensuste jälgimise reeglid ja Dart arendajate kogukonna reeglid. Dart 2.14 toob uusi ühisreegleid linter'ile, mida otsustati rakendada vaikimisi uutest Dart projektidest ja Flutter SDK-s. Komplekt sisaldab põhireegleid (pakett lints/core.yaml), soovitatud lisareegleid (lints/recommended.yaml) ja Flutter'ile spetsiifilisi soovitusi (flutter_lints/flutter.yaml). Kasutajatele, kes järgivad peenike reegleid, soovitatakse üle minna uuele kodeerimisstiilile, mis põhineb Dart dokumentatsiooni soovitustel.
- Formatterisse on tehtud optimeerimisi kaskaadsete koodiblokkide vormindamisse, mis võimaldavad märkimisväärselt suurendada vormindamise jõudlust ja vältida elementide omaduste tõlgendamise mitmeti mõistmist. Näiteks väljend „..doIt” väljendis „var result = errorState ? foo : bad..doIt()” puudutab mitte tingimuslikku osa bloki „bad” puhul, vaid kogu väljendit, seega vormindamisel jagatakse nüüd: var result = errorState ? foo : bad ..doIt();
- SDK-sse on lisatud tugi Apple M1 (Silicon) protsessoritele, mis eeldab nii Dart VM, utiliitide ja SDK komponentide käitamise võimalust Apple Silicon protsessoriga süsteemidel kui ka käivitatavate failide kompileerimise toetust nimetatud kiipide jaoks.
- Darti pub komandasse on lisatud tugi uuele teenusfailile «.pubignore», mis võimaldab määrata failide loetelu, mida jäetakse välja paketi avaldamisel pub.dev repositooriumis. Määratud seaded ei kattuvad «.gitignore» ignoreerimisse loetletud failidega (teatud olukordades võib pub.dev nõuda, et faile, mis on vajalikud Git'is, näiteks arendustöös kasutatavad sisemised skriptid, ei edastataks).
- Tehtud on tööd «dart test» komanda jõudluse parandamiseks, nüüd ei nõuta testide uuesti kompileerimist pärast pubspeci muutmist, kui versiooninumber ei ole muutunud.
- Kompileerimise tugi režiimis ECMAScript 5 ühilduvuse lõpetamine (see muudatus toob kaasa ühilduvuse kaotamise brauseriga IE11).
- Ette on kuulutatud vananenuks eraldi utiliidid stagehand, dartfmt ja dart2native, asendatud nende kaasatud käskudega, mida saab kutsuda läbi dart utiliidi.
- VM Native Extensions mehhanism on kuulutatud vananenuks. Natiivse koodi kutsumiseks Dart keeles soovitatakse kasutada uut Dart FFI (Foreign Function Interface) liidese.
Samas esitleti olulist versiooni kasutajaliidese raamistiku Flutter 2.5, mis on vaadatud alternatiivina React Native'ile ja võimaldab ühe koodibaasi alusel luua rakendusi iOS, Android, Windows, macOS ja Linux platvormidele ning rakendusi, mis töötavad brauserites. Flutteri alusel on loodud Google'is arendatava mikrokerne operatsioonisüsteemi Fuchsia kasutajaliides.
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.
Flutter 2.5 peamised muudatused:
- Tehtud on märkimisväärseid jõudluse optimeerimisi. iOS ja macOS platvormidel on реализирован prekompileerimine Metal'i graafika API jaoks. Paranendatud on asünkroonsete sündmuste töötlemise efektiivsus. Lahendatud on probleemid mälu vabastamise viivitustega, kui prügikorjaja eemaldab mittevajalikud pildid (näiteks 20-sekundilise animatsiooni GIF mängimise ajal on prügikorjaja toimingute arv vähenenud 400-lt 4-le. Dart ja Objective-C/Swift (iOS) või Java/Kotlin (Android) vahelise sõnumite edastamise viivitused on vähenenud kuni 50%. Lisatud on tugi natiivsele kompileerimisele Apple Silicona põhinevatesse süsteemidesse.

- Android platvormil on sisse lülitatud toetuse rakenduste täisekraanirežiimis tööle. Jätkub 'Material You' kujunduskonseptsiooni elluviimine, mida pakutakse järgmise põlvkonna Material Design variandina. Uus olek MaterialState.scrolledUnder on lisatud, realiseeritud on dünaamiline ribade kuvamine, kui suurust muudetakse, ja pakkutud on uus liides teavituste bannerite kuvamiseks.
- Kaamera pistikprogrammi võimalusi on oluliselt laiendatud, lisandunud on vahendid autofookuse, ekspoosi, välgu, suurendamise, müra vähendamise ja eraldusvõime haldamiseks.
- Arendajatele (DevTools) on tööriistad paranenud, sealhulgas uus vidinate uurimise režiim ning vahendid, mis aitavad tuvastada viivitusi renderdamisel ja jälgida shaderite kompileerimist.

- Visual Studio Code'i ja IntelliJ/Android Studio pistikprogramme on parendatud.
Allikas: opennet.ru


