Spoločnosť Google vydala jazyk programovania Dart 2.15, čím pokračuje vo vývoji radikálne prepracovanej vetvy Dart 2, ktorá sa líši od pôvodnej verzie jazyka Dart použitím silnej statickej typizácie (typy môžu byť odvodené automaticky, takže uvedenie typov nie je povinné, ale dynamická typizácia sa už viac nepoužíva a pôvodne vyhodnotený typ sa viaže na premennú a potom je aplikovaná striktnejšia kontrola typu).
Charakteristiky jazyka Dart:
- Známa a jednoduchá syntax, prirodzene pre programátorov na JavaScript, C a Java.
- Zabezpečenie rýchleho spustenia a vysokého výkonu pre všetky moderné webové prehliadače a rôzne typy prostredí, od prenosných zariadení po výkonné. serverov.
- Možnosť definovania tried a rozhraní, ktoré umožňujú použitie zapuzdrenia a opätovné využitie existujúcich metód a údajov.
- Uvedenie typov umožňuje zjednodušiť ladenie a odhaľovanie chýb, robí kód prehľadnejším a čitateľnejším, uľahčuje jeho rozširovanie a analýzu externými developermi.
- Medzi podporované typy patria: rôzne druhy hashov, polí a zoznamov, fronty, číselné a reťazcové typy, typy na definovanie dátumu a času, regulárne výrazy (RegExp). Existuje možnosť vytvorenia vlastných typov.
- Na organizovanie paralelného vykonávania sa odporúča používať triedy s atribútom isolate, ktorých kód sa vykonáva úplne v izolovanom priestore v samostatnej oblasti pamäte, pričom interaguje s hlavným procesom prostredníctvom odosielania správ.
- Podpora používania knižníc, ktoré uľahčujú údržbu a ladenie veľkých webových projektov. Externé implementácie funkcií môžu byť pripojené vo forme zdieľaných knižníc. Aplikácie je možné rozdeliť na časti a zveriť vývoj každej z častí samostatnej skupine programátorov.
- Súbor hotových nástrojov na podporu vývoja v jazyku Dart, vrátane implementácie prostriedkov pre dynamický vývoj a ladenie s opravou kódu za behu („edit-and-continue“).
- Na zjednodušenie vývoja v jazyku Dart je dodávané SDK, balíčkový manažér pub, statický analyzátor kódu dart_analyzer, súbor knižníc, integrované vývojové prostredie DartPad a pluginy s podporou Dart pre IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 a Vim.
- Ďalšie balíky s knižnicami a nástrojmi sú distribuované cez repozitár pub, ktorý obsahuje približne 22 tisíc balíkov.
Hlavné zmeny vo verzii Dart 2.15:
- Bol zavedený nástroj na rýchle paralelné vykonávanie úloh s izoláciou spracovateľov. Na viacjaderných systémoch Dart runtime predvolene vykonáva kód aplikácie na jednom jadrách CPU a ostatné jadrá využíva na vykonávanie systémových úloh, ako je asymetrické vstup/výstup, zápis do súborov alebo uskutočňovanie sieťových volaní. Pre aplikácie, ktoré potrebujú paralelne vykonávať svoje spracovateľské úlohy, ako je vykresľovanie animácií v užívateľskom rozhraní, je k dispozícii možnosť spustiť samostatné bloky kódu (isolate), ktoré sú izolované navzájom a vykonávajú sa na iných jadrách CPU súčasne s hlavným tokom aplikácie. Na ochranu pred chybami, ktoré vznikajú pri súčasnom vykonávaní kódu pracujúceho s jedným súborom údajov v rôznych blokoch isolate, je zakázané zdieľať meniteľné objekty medzi izolátmi a na interakciu medzi spracovateľmi sa používa model založený na posielaní správ.
V Dart 2.15 bola predstavená nová koncepcia — skupiny izolovaných blokov (isolate groups), ktorá umožňuje organizovať zdieľaný prístup k rôznym vnútorným štruktúram dát v blokoch isolate, ktoré patria do jednej skupiny, čím sa významne znižuje nákladovosť pri interakcii spracovateľov v skupine. Napríklad spustenie ďalšieho bloku isolate v existujúcej skupine prebieha 100-krát rýchlejšie a vyžaduje 10-100-krát menej pamäte ako spustenie izolovaného bloku isolate, a to vďaka vylúčeniu potreby inicializácie dátových štruktúr programu.
Hoci na blokoch isolate ostáva zakázané zdieľanie mutable objektov, v skupinách sa používa zdieľaná heap pamäť, čo spôsobuje výrazné zrýchlenie prenosu objektov z jedného bloku do druhého bez potreby náročných kopírovacích operácií. V novej verzii je tiež povolené prenášať výsledok spracovania obslužného programu pri volaní Isolate.exit() na prenos údajov do rodičovského bloku isolate bez kopírovacích operácií. Okrem toho bola optimalizovaná mechanika prenosu správ — malé a stredné správy sa teraz spracovávajú približne 8-krát rýchlejšie. Medzi objekty, ktoré je možné prenášať medzi blokmi isolate pomocou volania SendPort.send(), sú zahrnuté niektoré typy funkcií, uzávierky a stopár.
- Obmedzenia na vytváranie ukazovateľov na jednotlivé funkcie v iných objektoch (tear-off) boli odstránené, čo môže byť užitočné pri vytváraní rozhraní na základe knižnice Flutter. Napríklad na vytvorenie widgetu Column, ktorý obsahuje niekoľko widgetov Text, môžete zavolať „.map()“ a preniesť ukazovatele do konštruktora Text.new objektu Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column(children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
- Možnosti súvisiace s použitím ukazovateľov na funkcie boli rozšírené. Bola pridaná možnosť aplikovať generické (generic) metódy a ukazovatele funkcií na vytvorenie ne-generic metódy a ukazovateľa: T id(T value) => value; var intId = id; // povolené v verzii 2.15 namiesto „int Function(int) intId = id;“ const fo = id; // ukazovateľ na funkciu id. const c1 = fo;
- V knižnici dart:core bola vylepšená podpora výčtov (enum), napríklad teraz je možné získať reťazcovú hodnotu z každého výčtového hodnoty pomocou metódy „.name“, vykonávať výber hodnôt podľa názvu alebo vykonávať párovanie hodnôt: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // bude vyvedené „one“. print(MyEnum.values.byName(‘two’) == MyEnum.two); // bude vyvedené „true“. final map = MyEnum.values.asNameMap(); print(map[‘three’] == MyEnum.three); // „true“. }
- Implementovaná technika kompresie ukazovateľov, ktorá umožňuje používať kompaktnejšie zastúpenie ukazovateľov v 64-bitových prostrediach, ak je na adresovanie dostatočný 32-bitový adresný priestor (používa sa maximálne 4 GB pamäte). Testy ukázali, že táto optimalizácia umožňuje skrátiť veľkosť haldy približne o 10 %. V Flutter SDK je predvolene nový režim už aktivovaný pre Android a v budúcej verzii sa plánuje aktivácia pre iOS.
- Dart SDK obsahuje nástroje na ladenie a analýzu výkonu (DevTools), ktoré predtým prichádzali v samostatnom balíku.
- Do príkazového nástroja „dart pub“ a repozitárov balíkov pub.dev boli pridané prostriedky na sledovanie náhodného zverejnenia dôverných informácií, napríklad ponechanie poverení pre systémy kontinuálnej integrácie a cloudové prostredia v rámci balíka. Ak sa zistia takéto úniky, vykonanie príkazu „dart pub publish“ bude prerušené s chybovým hlásením. V prípade falošného poplachu je k dispozícii možnosť obísť kontrolu prostredníctvom bieleho zoznamu.
- Do repozitára pub.dev bola pridaná možnosť stiahnuť už publikovanú verziu balíka, napríklad pri zistení nebezpečných chýb alebo zraniteľností. Predtým sa na takéto opravy praktizovalo zverejnenie nasledujúcej opravnenej verzie, ale v niektorých situáciách je potrebné konkrétne zrušiť vykonaný vydanie a naliehavo zastaviť jeho ďalšie šírenie (napríklad ak opravy ešte nie sú pripravené alebo ak bola omylom zverejnená plnohodnotná verzia namiesto testovacej verzie). Po stiahnutí prestáva balík byť určený v príkazoch „pub get“ a „pub upgrade“, a na už nainštalovaných systémoch pri nasledujúcom vykonaní „pub get“ sa zobrazuje špeciálne upozornenie.
- Pridaná ochrana pred zraniteľnosťou (CVE-2021-22567), spôsobenou použítím unicode symbolov v kóde, ktoré menia poradie zobrazenia.
- Opravená zraniteľnosť (CVE-2021-22568), ktorá umožnila predstierať, že ide o iného používateľa pub.dev pri publikovaní balíkov na externý server prijímajúci oauth2 prístupové tokeny pub.dev. Napríklad zraniteľnosť sa môže použiť na útok na interné a firemné servery balíkov. Problém sa netýka vývojárov, ktorí publikujú balíky len na pub.dev.
Zároveň bol predstavený významný release frameworku pre tvorbu používateľského rozhrania Flutter 2.8, ktorý je považovaný za alternatívu k React Native a umožňuje na základe jedného kódu vydávať aplikácie pre platformy iOS, Android, Windows, macOS a Linux, rovnako ako vytvárať aplikácie spustiteľné v prehliadačoch. Na základe Flutter je postavené používateľské rozhranie vyvíjanej v Google mikro-jadrinnej operačnej sústavy Fuchsia. Poznamenáva sa, že za posledných šesť mesiacov sa počet aplikácií na Flutter 2 v Google Play Store zvýšil z 200 tisíc na 375 tisíc, t.j. takmer dvakrát.
Hlavná časť kódu Flutter je napísaná v jazyku Dart, a runtime engine pre vykonávanie aplikácií je napísaný v C++. Pri vývoji aplikácií, okrem natívneho jazyka Dart, možno použiť rozhranie Dart Foreign Function na volanie kódu v C/C++. Vysoký výkon vykonávania je dosiahnutý kompiláciou aplikácií do strojového kódu pre cieľové platformy. Program sa pritom nemusí prekompilovať po každej zmene — Dart poskytuje režim hot reload, ktorý umožňuje vykonávať zmeny v bežiacej aplikácii a okamžite hodnotiť výsledok.
Medzi zmenami v novej verzii Flutter sa uvádza optimalizácia rýchlosti spustenia a spotreby pamäte na mobilných zariadeniach. Zjednodušené pripojenie aplikácií k backendovým službám, ako sú Firebase a Google Cloud. Stabilizované nástroje na integráciu s Google Ads. Výrazne zlepšená podpora kamier a webových plug-inov. Navrhnuté nové prostriedky na zjednodušenie vývoja, napríklad pridaný widget na autentifikáciu pomocou Firebase. Aktualizovaný engine Flame, určený na vývoj 2D hier pomocou Flutter.
Zdroj: opennet.ru
