Společnost Google vydala verzi programovacího jazyka Dart 2.15, která pokračuje ve vývoji zásadně přepracované větve Dart 2, jež se od původní verze jazyka Dart liší používáním silné statické typizace (typy mohou být automaticky odvozeny, a proto není jejich uvedení povinné; dynamická typizace již není používána a původně určený typ je přiřazen 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 jsou k dispozici prostřednictvím repozitáře pub, který zahrnuje přibližně 22 tisíc balíčků.
Hlavní změny v vydání Dart 2.15:
- Byly poskytnuty nástroje pro rychlé paralelní vykonávání úloh s izolací zpracovatelů. Na vícejádrových systémech Dart runtime ve výchozím nastavení vykonává kód aplikace na jednom jádru CPU, zatímco ostatní jádra jsou vyhrazena pro systémové úlohy, jako je asynchronní vstup/výstup, zapisování do souborů nebo provádění síťových volání. Pro aplikace, které potřebují paralelně vykonávat své zpracovatele, například pro vykreslování animací v uživatelském rozhraní, je k dispozici možnost spuštění samostatných bloků kódu (isolate), které jsou od sebe izolované a mohou být vykonávány na jiných jádrech CPU současně s hlavním vláknem aplikace. Aby se předešlo chybám vznikajícím při současném vykonávání kódu pracujícího se stejným souborem dat v různých isolate-blocích, je zakázáno sdílení měnitelných objektů mezi nimi a pro interakci mezi zpracovateli se používá model založený na přenosu zpráv.
V Dart 2.15 byla představena nová koncepce - skupiny izolovaných bloků (isolate groups), která umožňuje organizovat společný přístup k různým interním datovým strukturám v izolovaných blocích patřících do jedné skupiny, což výrazně snižuje režijní náklady při interakci zpracovatelů ve skupině. Například spuštění dalšího isolate-bloku ve stávající skupině probíhá 100krát rychleji a vyžaduje 10-100krát méně paměti než spuštění samostatného isolate-bloku, díky vyloučení potřeby inicializace datových struktur programu.
I když je v isolate-blokách stále zakázán sdílený přístup k modifikovatelným objektům, v skupinách se používá sdílená heap paměť, což značně urychluje přenos objektů z jednoho bloku do druhého bez nutnosti provádění náročných operací kopírování. V nové verzi je také povoleno předávat výsledek zpracování handleru při volání Isolate.exit() pro přenos dat do rodičovského isolate-bloku bez operací kopírování. Kromě toho byla optimalizována mechanismus přenosu zpráv — malé a střední zprávy se nyní zpracovávají přibližně 8krát rychleji. Mezi objekty, které je možné předávat mezi isolate-bloky pomocí volání SendPort.send(), byly zahrnuty některé typy funkcí, uzávěrů a trasování zásobníku.
- V nástrojích pro vytváření ukazatelů na jednotlivé funkce v jiných objektech (tear-off) byla odstraněna omezení pro vytváření takových ukazatelů v konstruktorovém kódu, což může být užitečné při budování rozhraní na základě knihovny Flutter. Například pro vytvoření widgetu Column, který zahrnuje několik widgetů Text, můžete zavolat „.map()“ a předat ukazatele do konstruktoru Text.new objektu Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column(children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
- Byly rozšířeny možnosti související s používáním ukazatelů na funkce. Byla přidána možnost použít generické metody a ukazatele funkcí pro vytvoření ne-generic metody a ukazatele: T id(T value) => value; var intId = id; // povoleno v verzi 2.15 místo „int Function(int) intId = id;“ const fo = id; // ukazatel na funkci id. const c1 = fo;
- V knihovně dart:core byla vylepšena podpora enumerací (enum), například nyní lze získat řetězcovou hodnotu z každé hodnoty enum pomocí metody „.name“, provádět výběr hodnot podle názvu nebo vykonávat porovnání párů hodnot: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // bude vytištěno „one“. print(MyEnum.values.byName(‘two’) == MyEnum.two); // bude vytištěno „true“. final map = MyEnum.values.asNameMap(); print(map[‘three’] == MyEnum.three); // „true“. }
- Byla implementována technika komprese ukazatelů, která umožňuje použití kompaktnějšího zobrazení ukazatelů v 64bitových prostředích, pokud je pro adresaci dostatečný 32bitový adresní prostor (používá se maximálně 4 GB paměti). Testy ukázaly, že taková optimalizace umožňuje zmenšit velikost haldy přibližně o 10 %. V Flutter SDK je nově zapnutý režim již výchozí pro Android a v budoucí verzi je plánováno zapnutí pro iOS.
- Dart SDK zahrnuje nástroje pro ladění a analýzu výkonu (DevTools), které dříve byly dodávány v samostatném balíčku.
- Do příkazu "dart pub" a repozitářů balíčků pub.dev byly přidány prostředky pro sledování náhodného zveřejnění důvěrných informací, například ponechání údajů pro systémy kontinuální integrace a cloudová prostředí uvnitř balíčku. V případě zjištění podobných úniků bude provádění příkazu "dart pub publish" přerušeno s chybovým hlášením. Pokud dojde k falešnému poplachu, je poskytována možnost obcházení kontroly pomocí whitelistu.
- Do repozitáře pub.dev byla přidána možnost zrušení již zveřejněné verze balíčku, například v případě zjištění závažných chyb nebo zranitelností. Dříve pro takové opravy byla praktikována publikace následné opravené verze, ale v některých situacích je třeba přímo zrušit vydání a urgentně zastavit jeho další šíření (například pokud opravy nejsou ještě připraveny nebo pokud byla omylem zveřejněna plná verze místo testovací verze). Po zrušení balíček přestane být rozpoznáván v příkazech "pub get" a "pub upgrade", a na již nainstalovaných systémech při příštím provedení "pub get" se zobrazí speciální varování.
- Byla přidána ochrana proti zranitelnosti (CVE-2021-22567), způsobené použitím unicode symbolů v kódu, které mění pořadí zobrazování.
- Byla odstraněna zranitelnost (CVE-2021-22568), která umožňuje vydávat se za jiného uživatele pub.dev při publikaci balíčků na třetím serveru přijímajícím oauth2 přístupové tokeny pub.dev. Například může být tato zranitelnost využita k útoku na interní a firemní servery balíčků. Pro vývojáře, kteří zveřejňují balíčky pouze na pub.dev, se problém netýká.
Současně byl představen významný release frameworku pro vývoj uživatelského rozhraní Flutter 2.8, který je považován za alternativu k React Native a umožňuje na základě jednoho kódu vytvářet aplikace pro platformy iOS, Android, Windows, macOS a Linux, stejně jako vytvářet aplikace pro spuštění v prohlížečích. Na základě Flutter byla postavena uživatelská vrstva rozvíjeného mikro-jádrového operačního systému Fuchsia od Googlu. Během posledních šesti měsíců se počet aplikací na Flutter 2 v Google Play Store zvýšil z 200 tisíc na 375 tisíc, tedy téměř dvakrát.
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.
Mezi změnami v nové verzi Flutter je patrné zlepšení výkonu spouštění a spotřeby paměti na mobilních zařízeních. Bylo zjednodušeno připojení aplikací k backendovým službám jako jsou Firebase a Google Cloud. Nástroje pro integraci s Google Ads byly stabilizovány. Významně byla zlepšena podpora kamer a webových pluginů. Byly navrženy nové prostředky pro zjednodušení vývoje, například byl přidán widget pro autentizaci pomocí Firebase. Byla aktualizována platforma Flame zaměřená na vývoj 2D her s využitím Flutteru.
Zdroj: opennet.ru
