Společnost Google zveřejnila verzi programovacího jazyka Dart 2.14, která pokračuje ve vývoji radikálně přepracované větve Dart 2, která se od původní verze jazyka Dart liší použitím silné statické typizace (typy mohou být odvozeny automaticky, takže není povinné uvádět typy, ale dynamická typizace už není používána a původně odvozený typ je přidělen k proměnné a následně se provádí přísná kontrola typu).
Vlastnosti jazyka Dart:
- Pohodlná a jednoduchá syntaxe, přirozená pro programátory v JavaScriptu, C a Javě.
- Zajištění rychlého spuštění a vysokého výkonu pro všechny moderní webové prohlížeče a různé typy prostředí, od přenosných zařízení po výkonné servery.
- Možnost definice tříd a rozhraní, které umožňují použití zapouzdření a opětovné použití stávajících metod a dat.
- Určení typů usnadňuje ladění a odhalování chyb, činí kód jasnějším a čitelnějším, zjednodušuje jeho další zpracování a analýzu jinými vývojáři.
- Mezi podporované typy patří: různé druhy hashů, polí a seznamů, fronty, číselné a textové typy, typy pro určení data a času, regulární výrazy (RegExp). Existuje možnost vytváření vlastních typů.
- Pro organizaci paralelního vykonávání se doporučuje používat třídy s atributem isolate, jejichž kód je vykonáván zcela v izolovaném prostoru v oddělené oblasti paměti, přičemž interaguje s hlavním procesem prostřednictvím odesílání zpráv.
- Podpora používání knihoven, které usnadňují správu a ladění velkých webových projektů. Třetí strany mohou implementovat funkce jako sdílené knihovny. Aplikace mohou být rozděleny na části a vývoj každé části může být svěřen jiné týmu programátorů.
- Sada hotových nástrojů pro podporu vývoje v jazyce Dart, včetně implementace prostředků pro dynamický vývoj a ladění s opravou kódu za běhu („edit-and-continue“).
- Pro usnadnění vývoje v jazyce Dart je k dispozici SDK, správce balíčků pub, statický analyzátor kódu dart_analyzer, sada knihoven, integrované vývojové prostředí DartPad a pluginy s podporou Dart pro IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 a Vim.
- Další balíčky s knihovnami a utilitami se distribuují prostřednictvím repozitáře pub, který obsahuje více než 20 000 balíčků.
Hlavní změny ve verzi Dart 2.14:
- Byl přidán nový operátor trojitého posunu (>>>), který na rozdíl od operátoru »>>« provádí nikoli aritmetický, ale logický posun, který nebere v úvahu znaménkový bit (posun se provádí bez rozdělení na kladná a záporná čísla).
- Bylo odstraněno omezení na argumenty typu, které neumožňovalo používat generické typy funkcí jako argument s typem. Například teď je možné uvést: late List<T Function(T)> idFunctions; var callback = [(T value) => value]; late S Function<S extends T Function(T)>(S) f;
- Bylo povoleno uvádět argumenty s typy v anotacích, jako je @Deprecated. Například teď je možné uvést: @TypeHelper(42, "Význam")
- Do standardní knihovny (core) byla do třídy Object přidána statická metoda hash, hashAll a hashAllUnordered. V třídě DateTime bylo vylepšeno zpracování místního času při překládání hodin mezi letním a zimním časem, který není násobkem jedné hodiny (například v Austrálii se používá posun o 30 minut). Do balíčku ffi byla přidána podpora mechanismu alokace paměti arena, který automaticky uvolňuje zdroje. Do balíčku ffigen byla přidána možnost generovat typedef-definice typů Dart z jazyka C.
- 250 nejpopulárnějších balíčků z repozitáře pub.dev a 94 % z top-1000 bylo převedeno na režim bezpečného používání hodnoty „Null“ (null safety), který umožňuje vyhnout se pádům způsobeným pokusy o použití proměnných, jejichž hodnota není definována a je nastavena na „Null“. Režim předpokládá, že proměnné nemohou mít neurčité hodnoty, pokud jim není výslovně přiřazena hodnota null. V režimu se striktně zohledňují typy proměnných, což umožňuje kompilátoru aplikovat další optimalizace. Shoda typů je kontrolována v době kompilace, například v případě pokusu o přiřazení hodnoty „Null“ proměnné s typem, který neumožňuje neurčitý stav, jako je „int“, se zobrazí chyba.
- Byly navrženy sjednocené soubory pravidel pro analyzátor kódu (linter), které zajišťují současnou podporu kontroly dodržování doporučení pro styl formátování kódu pro Dart a framework Flutter. Z historických důvodů se pravidla formátování kódu pro Flutter a Dart lišila, navíc existovaly pro Dart dva soubory pravidel – pedantické od Googlu a pravidla od komunity vývojářů Dart. V Dart 2.14 byl představen nová společná sada pravidel pro linter, která se rozhodlo používat v nových projektech Dart a v Flutter SDK jako výchozí. Sada zahrnuje základní pravidla (balíček lints/core.yaml), doporučená doplňková pravidla (lints/recommended.yaml) a specifická doporučení pro Flutter (flutter_lints/flutter.yaml). Uživatelům pedantických pravidel se doporučuje přejít na používání nového stylu kódování, který je založen na doporučeních z dokumentace Dart.
- Do formátovače byly přidány optimalizace pro formátování kaskádových bloků kódu, které výrazně zvyšují výkon formátování a vyhýbají se nejednoznačnému výkladu příslušnosti prvků výrazu. Například, volání „..doIt“ ve výrazu „var result = errorState ? foo : bad..doIt()“ se týká celé výrazu, nikoli podmínkové části bloku „bad“, proto je při formátování nyní odděleno: var result = errorState ? foo : bad ..doIt();
- Do SDK byla přidána podpora procesorů Apple M1 (Silicon), která zahrnuje jak možnost spuštění Dart VM, utilit a komponent SDK na systémech s procesorem Apple Silicon, tak podporu kompilace spustitelných souborů pro uvedené čipy.
- Do týmu „dart pub“ byla přidána podpora nového souboru „.pubignore“, který umožňuje definovat seznam souborů, které budou při publikaci balíčku v repozitáři pub.dev vynechány. Uvedená nastavení se nepřekrývají se seznamem ignorovaných souborů „.gitignore“ (v některých případech je v pub.dev potřeba nepředávat soubory, které jsou potřeba v Gitu, například interní skripty používané při vývoji).
- Byla provedena práce na zvýšení výkonu příkazu „dart test“, který nyní nevyžaduje opětovnou kompilaci testů po změně pubspec, pokud se číslo verze nezměnilo.
- Byla ukončena podpora kompilace v režimu kompatibility s ECMAScript 5 (tato změna povede ke ztrátě kompatibility s prohlížečem IE11).
- Byly vyhlášeny za zastaralé samostatné utility stagehand, dartfmt a dart2native, které nahradily vestavěné příkazy, které lze volat prostřednictvím utility dart.
- Mechanismus VM Native Extensions byl převeden do kategorie zastaralých. Pro volání nativního kódu z kódu v jazyce Dart se doporučuje používat rozhraní Dart FFI (Foreign Function Interface).
Současně byla představena významná verze frameworku pro tvorbu uživatelského rozhraní Flutter 2.5, který je považován za alternativu k React Native a umožňuje na základě jedné kódové základny vydávat aplikace pro platformy iOS, Android, Windows, macOS a Linux, stejně jako vytvářet aplikace pro spuštění v prohlížečích. Aplikace Flutter tvoří uživatelské rozhraní rozvíjeného v Google mikrojádrového operačního systému Fuchsia.
Hlavní část kódu Flutter je napsána v jazyce Dart, zatímco runtime engine pro provádění aplikací je napsán v C++. Při vývoji aplikací lze kromě nativního jazyka Dart použít rozhraní Dart Foreign Function pro volání kódu v C/C++. Vysokého výkonu provádění je dosaženo díky kompilaci aplikací do strojového kódu pro cílové platformy. Program není třeba překompilovat po každé změně – Dart poskytuje režim horkého restartu, který umožňuje provádět změny v běžící aplikaci a okamžitě hodnotit výsledek.
Hlavní změny ve Flutter 2.5:
- Byly provedeny významné optimalizace výkonu. Na platformách iOS a macOS byla implementována předkompilace shaderů pro grafické API Metal. Byla zvýšena účinnost zpracování asynchronních událostí. Byla vyřešena otázka zpoždění při uvolňování paměti shromažďovačem odpadu od nepoužívaných obrázků (například během přehrávání 20sekundového animovaného GIFu bylo sníženo počet operací shromažďovače odpadu z 400 na 4. Zpoždění při přenosu zpráv mezi Dart a Objective-C/Swift (iOS) nebo Java/Kotlin (Android) byla snížena až o 50 %. Byla přidána podpora nativního sestavení pro systémy na bázi čipu Apple Silicon.

- Na platformě Android byla zavedena podpora pro aplikace běžící na celou obrazovku. Pokračuje implementace konceptu designu „Material You“, který je prezentován jako varianta další generace Material Designu. Přidán nový stav MaterialState.scrolledUnder, zrealizováno dynamické zobrazení posuvníků při změně velikosti a navržen nové rozhraní pro zobrazování bannerů s upozorněními.
- Možnosti pluginu pro práci s kamerou byly výrazně rozšířeny, nyní zahrnují nástroje pro ovládání automatického zaostření, expozice, blesku, přiblížení, potlačení šumu a rozlišení.
- Nástroje pro vývojáře (DevTools) byly vylepšeny, nyní obsahují aktualizovaný režim inspekce widgetů a také nástroje pro odhalování prodlev při vykreslování a sledování kompilace shaderů.

- Pluginy pro Visual Studio Code a IntelliJ/Android Studio byly vylepšeny.
Zdroj: opennet.ru


