Spoločnosť Google uverejnila vydanie programovacieho jazyka Dart 2.14, čím pokračovala vo vývoji radikálne prepracovanej vetvy Dart 2, ktorá sa od pôvodnej verzie jazyka Dart líši použitím silnej statickej typizácie (typy môžu byť automaticky odvodzované, preto zadanie typov nie je povinné, no dynamická typizácia sa už nepoužíva, a odvodený typ je trvalo priradený k premennej s následnou prísnou kontrolou 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 knihovňami a utilitami sa distribuujú prostredníctvom repozitára pub, ktorý obsahuje viac ako 20 tisíc balíkov.
Hlavné zmeny vo vydaní Dart 2.14:
- Pridaný nový operátor trojitého posunu (>>>) , ktorý na rozdiel od operátora „>>“ vykonáva nie aritmetický, ale logický posun, ktorý pracuje bez ohľadu na znamienkový bit (posun sa vykonáva bez rozdelenia na kladné a záporné čísla).
- Zrušené obmedzenie na argumenty typu, ktoré nedovolili používať generické typy funkcií ako argument s typom. Napríklad, teraz je možné uviesť: late List<T Function(T)> idFunctions; var callback = [(T value) => value]; late S Function<S extends T Function(T)>(S) f;
- Povolené uvádzanie argumentov s typmi v anotáciách, ako napríklad @Deprecated. Napríklad, teraz je možné uviesť: @TypeHelper(42, „Význam“)
- Do štandardnej knižnice (core) bola do triedy Object pridaná statická metóda hash, hashAll a hashAllUnordered. V triede DateTime bola vylepšená správa lokálneho času pri prechode medzi letným a zimným časom, ktorý nie je násobkom jednej hodiny (napríklad v Austrálii sa používa posun o 30 minút). Do balíka ffi bola pridaná podpora mechanizmu pridelenia pamäte arena, ktorý automaticky uvoľňuje zdroje. Do balíka ffigen bola pridaná možnosť generovania typedef-definícií typov Dart z jazyka C.
- 250 najpopulárnejších balíčkov z repozitára pub.dev a 94 % z top-1000 sú preložené na využitie režimu bezpečného používania hodnoty „Null“ (null safety), ktorý umožňuje vyhnúť sa pádu spôsobenému pokusmi o použitie premenných, ktorých hodnota nie je definovaná a je nastavená na „Null“. Režim predpokladá, že premenne nemôžu mať nedefinované hodnoty, pokiaľ im výslovne nepridelíte hodnotu null. V režime sa striktne zohľadňujú typy premenných, čo umožňuje kompilátoru aplikovať ďalšie optimalizácie. Zhodnosť typov sa kontroluje počas kompilácie, napríklad pri pokuse o priradenie hodnoty „Null“ premennej s typom, ktorý nepripúšťa nedefinovaný stav, ako je „int“, sa zobrazí chyba.
- Navrhnuté sú univerzálne súbory pravidiel pre analyzátor kódu (linter), ktoré zabezpečujú súčasnú podporu kontroly dodržiavania odporúčaní pre štýl kódovania pre Dart a framework Flutter. Z historických dôvodov sa pravidlá kódovania pre Flutter a Dart líšili, okrem toho existovali pre Dart dva súbory pravidiel — pedantné od Googlu a pravidlá od komunity vývojárov Dart. V Dart 2.14 bol predstavený nový spoločný súbor pravidiel pre linter, ktorý sa rozhodlo aplikovať ako predvolené v nových projektoch Dart a v Flutter SDK. Súbor obsahuje základné pravidlá (balík lints/core.yaml), odporúčané dodatočné pravidlá (lints/recommended.yaml) a špecifické odporúčania pre Flutter (flutter_lints/flutter.yaml). Používateľom pedantných pravidiel sa odporúča prejsť na nový štýl kódovania, založený na odporúčaniach z dokumentácie Dart.
- Do formátovača boli pridané optimalizácie vo formátovaní kaskádových blokov kódu, ktoré výrazne zvyšujú výkonnosť formátovania a zabraňujú nejednoznačnej interpretácii príslušnosti prvkov výrazu. Napríklad, volanie „..doIt“ vo výraze „var result = errorState ? foo : bad..doIt()“ sa týka nielen podmienkovej časti bloku „bad“, ale celého výrazu, takže pri formátovaní sa teraz rozdeľuje: var result = errorState ? foo : bad ..doIt();
- Do SDK bola pridaná podpora procesorov Apple M1 (Silicon), čo zahŕňa ako možnosť spúšťania Dart VM, utilít a komponentov SDK na systémoch s procesorom Apple Silicon, tak aj podporu kompilácie spustiteľných súborov pre uvedené čipy.
- Do tímu „dart pub“ bola pridaná podpora pre nový pomocný súbor „.pubignore“, ktorý umožňuje určiť zoznam súborov, ktoré budú preskočené pri publikovaní balíka v repozitári pub.dev. Uvedené nastavenia sa neprekrývajú so zoznamom ignorovania „.gitignore“ (v niektorých situáciách je na pub.dev potrebné nemať súbory, ktoré sú potrebné v Gite, ako napríklad interné skripty používané pri vývoji).
- Bola vykonaná práca na zvýšení výkonu tímu „dart test“, ktorý teraz nevyžaduje opätovnú kompiláciu testov po zmene pubspec, ak sa číslo verzie nezmenilo.
- Podpora kompilácie v režime kompatibility s ECMAScript 5 bola zrušená (táto zmena povedie k strate kompatibility s prehliadačom IE11).
- Boli vyhlásené za zastarané samostatné utilitky stagehand, dartfmt a dart2native, ktoré nahradili vstavané príkazy volané cez utilitu dart.
- Bol zaradený medzi zastarané mechanizmus VM Native Extensions. Na volanie nativneho kódu z kódu v jazyku Dart sa odporúča používať nové rozhranie Dart FFI (Foreign Function Interface).
Zároveň bol predstavený významný release frameworku na zostavovanie používateľských rozhraní Flutter 2.5, ktorý sa považuje za alternatívu k React Native a umožňuje na základe jedného kódu vydať aplikácie pre platformy iOS, Android, Windows, macOS a Linux, ako aj vytvárať aplikácie na spustenie v prehliadačoch. Na základe Flutter bola postavená používateľská nadstavba rozvíjanej v Google mikro-jadrovej operačnej sústavy Fuchsia.
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.
Hlavné zmeny vo Flutter 2.5:
- Boli vykonané významné optimalizácie výkonu. Na platformách iOS a macOS bola realizovaná predkompilácia shaderov pre grafické API Metal. Zefektívnila sa efektivita spracovania asynchrónnych udalostí. Bola vyriešená otázka oneskorenia počas uvoľnenia pamäte správcovi pamäte od nepoužívaných obrázkov (napríklad počas prehrávania 20-sekundového animovaného GIFu sa počet operácií správy pamäte znížil z 400 na 4. Až o 50% sa znížili oneskorenia pri prenosoch správ medzi Dart a Objective-C/Swift (iOS) alebo Java/Kotlin (Android). Bola pridaná podpora natívnej kompilácie pre systémy založené na čipe Apple Silicon.

- Pre platformu Android bola zavedená podpora pre aplikácie v celoobrazovkovom režime. Pokračuje realizácia konceptu dizajnu „Material You“, ktorý sa predstavuje ako verzia Material Design ďalšej generácie. Pridaný bol nový stav MaterialState.scrolledUnder, implementované dynamické zobrazenie posuvníkov pri zmene veľkosti, a navrhnuté nové rozhranie na zobrazovanie bannerov s upozorneniami.
- Možnosti pluginu pre prácu s kamerou boli výrazne rozšírené, pričom pribudli prostriedky na ovládanie automatického zaostrovania, expozície, blesku, priblíženia, potlačenia šumu a rozlíšenia.
- Nástroje pre vývojárov (DevTools) boli vylepšené, pričom bol pridaný aktualizovaný režim inšpekcie widgetov a boli poskytnuté prostriedky na zistenie zdržania pri vykresľovaní a sledovanie kompilácie shaderov.

- Pluginy pre Visual Studio Code a IntelliJ/Android Studio boli vylepšené.
Zdroj: opennet.ru


