Podjetje Google je objavilo izdajo programske jezika Dart 2.15, ki nadaljuje razvoj kardinalno predelane veje Darta 2, ki se razlikuje od izvirne različice jezika Dart z uporabo močne statične tipizacije (tipi se lahko samodejno izpeljejo, zato določanje tipov ni obvezno, vendar dinamična tipizacija več ni uporabljena in izvorni tip, ugotovljen pri dodelitvi, ostane vezan na spremenljivko ter se v nadaljevanju uporablja stroga preveritev tipa).
Značilnosti jezika Dart:
- Poznana in enostavna sintaksa za učenje, naravna za programerje v JavaScriptu, C in Javi.
- Zagotavljanje hitrega zagona in visoke zmogljivosti za vse sodobne spletne brskalnike in različne vrste okolij, od prenosnih naprav do zmogljivih. strežnikov.
- Možnost določanja razredov in vmesnikov, ki omogočajo uporabo enkapsulacije in ponovno uporabo obstoječih metod in podatkov.
- Določanje tipov poenostavi odpravljanje napak in odkrivanje težav, naredi kodo bolj jasno in berljivo, poenostavi njeno dopolnjevanje in analizo s strani drugih razvijalcev.
- Med podprtimi tipi: različne vrste hashev, tabel, seznamov, seznamov, numerične in nizovne tipe, tipe za določanje datumov in časov, regularni izrazi (RegExp). Možnost ustvarjanja lastnih tipov.
- Za organizacijo paralelnega izvrševanja se predlaga uporaba razredov s atributom isolate, katerega koda se izvaja v popolnoma izoliranem prostoru v ločenem pomnilniku, v interakciji z glavnim procesom prek pošiljanja sporočil.
- Podpora za uporabo knjižnic, ki poenostavljajo podporo in odpravljanje napak pri velikih spletnih projektih. Tuje implementacije funkcij se lahko vključijo kot deljene knjižnice. Aplikacije je mogoče razdeliti na dele in razvoj vsakega dela zaupati ločenim ekipam programerjev.
- Nabor pripravljenih orodij za podporo razvoju v jeziku Dart, vključno z implementacijo sredstev za dinamični razvoj in odpravljanje napak s popravkom kode v živo ("edit-and-continue").
- Za poenostavitev razvoja v jeziku Dart se dostavi SDK, paketni upravljalec pub, statični analizator kode dart_analyzer, nabor knjižnic, integrirano razvojno okolje DartPad in vtičniki z podporo za Dart za IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 in Vim.
- Dodatni paketi s knjižnicami in orodji se distribuirajo prek repozitorija pub, ki vsebuje približno 22.000 paketov.
Glavne spremembe v različici Dart 2.15:
- Na voljo so orodja za hitro paralelno izvajanje nalog z izolacijo procesorjev. Na večjedrnih sistemih Dart runtime privzeto izvaja kodo aplikacije na enem CPU jedru, druga jedra pa so uporabljena za izvajanje sistemskih nalog, kot so asinhrono vhodno/izhodno, zapisovanje v datoteke ali izvajanje omrežnih pozivov. Za aplikacije, ki morajo hkrati izvajati svoje procesorje, na primer za upodabljanje animacij v vmesniku, je na voljo možnost zagona ločenih blokov kode (isolate), ki so med seboj izolirani in se izvajajo na drugih CPU jedrih hkrati z glavnim tokom aplikacije. Za zaščito pred napakami, ki se pojavljajo pri sočasnem izvajanju kode, ki dela z enim naborom podatkov, je v različnih isolate-blokih prepovedano skupno uporabo spremenljivih objektov, med procesorji pa se uporablja model na osnovi pošiljanja sporočil.
V Dart 2.15 je predstavljena nova koncept - skupine izoliranih blokov (isolate groups), ki omogočajo organiziranje skupnega dostopa do različnih notranjih struktur podatkov v isolate-blokih, ki pripadajo isti skupini, kar znatno zmanjšuje stroške pri interakciji procesorjev v skupini. Na primer, zagon dodatnega isolate-bloka v obstoječi skupini poteka 100-krat hitreje in zahteva 10-100-krat manj pomnilnika kot zagon osamljenega isolate-bloka, saj odpravi potrebo po inicializaciji struktur podatkov programa.
Kljub temu da je v isolate-blokih še vedno prepovedano deljenje spremenljivih objektov, se v skupinah uporablja skupna heap-pomnilnika, kar omogoča znatno pospešitev prenosa predmetov iz enega bloka v drugega, ne da bi bilo treba izvajati zahtevne operacije kopiranja. V novi različici je prav tako dovoljeno prenašati rezultat obdelave obdelovalca pri klicu Isolate.exit() za prenos podatkov v nadrejeni isolate-blok brez operacij kopiranja. Poleg tega je bila optimizirana mehanika prenosa sporočil — majhna in srednja sporočila se zdaj obravnavajo približno 8-krat hitreje. Med objekti, ki jih je mogoče prenašati med isolate-bloki z uporabo klica SendPort.send(), so vključene nekatere vrste funkcij, zaprtij in sledilnikov skladov.
- V orodjih za ustvarjanje kazalcev na posamezne funkcije v drugih objektih (tear-off) so bile odpravljene omejitve pri ustvarjanju takšnih kazalcev v kodi konstruktorjev, kar je lahko koristno pri oblikovanju vmesnikov na osnovi knjižnice Flutter. Na primer, za ustvarjanje vidžeta Column, ki vsebuje več vidžetov Text, lahko pokličete '.map()' in prenesete kazalce v konstruktor Text.new objekta Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column(children: ['Apple', 'Orange'].map(Text.new).toList()); } }
- Razširjene so možnosti, povezane z uporabo kazalcev na funkcije. Dodana je bila možnost uporabe generičnih (generic) metod in kazalcev funkcij za ustvarjanje ne-generične metode in kazalca: T id(T value) => value; var intId = id; // dovoljeno v različici 2.15 namesto 'int Function(int) intId = id;' const fo = id; // kazalec na funkcijo id. const c1 = fo;
- V knjižnici dart:core je bila izboljšana podpora za enumeracije (enum), na primer, zdaj je mogoče izpisati nizovno vrednost iz vsake vrednosti enum s pomočjo metode '.name', izbirati vrednosti po imenu ali izvajati ujemanje parov vrednosti: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // bo izpisano 'one'. print(MyEnum.values.byName('two') == MyEnum.two); // bo izpisano 'true'. final map = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // 'true'. }
- Implemented a pointer compression technique that enables a more compact representation of pointers in 64-bit environments when a 32-bit address space (up to 4 GB of memory) is sufficient for addressing. Tests have shown that this optimization can reduce the heap size by approximately 10%. In the Flutter SDK, this new mode is enabled by default for Android, with plans for inclusion in the upcoming release for iOS.
- The Dart SDK now includes tools for debugging and performance analysis (DevTools) that were previously provided in a separate package.
- The 'dart pub' command and pub.dev package repository have added tools to track accidental publication of sensitive information, such as leaving continuous integration credentials and cloud environment details inside the package. If such leaks are detected, executing the 'dart pub publish' command will be interrupted with an error message. In case of a false positive, there is an option to bypass the check through a whitelist.
- The pub.dev repository has added the ability to revoke an already published package version, for example, in case of critical bugs or vulnerabilities. Previously, the practice was to publish a corrective version afterwards, but in some situations, it is necessary to cancel a release entirely and urgently stop its further distribution (for instance, if the fix is not yet ready or if a production release was mistakenly published instead of a test version). After the revocation, the package will no longer be recognized in the 'pub get' and 'pub upgrade' commands, and on systems that have installed it, a special warning will be issued during the next 'pub get' execution.
- Protection against the vulnerability (CVE-2021-22567) caused by the use of Unicode characters in the code that alter the display order has been added.
- The vulnerability (CVE-2021-22568) that allowed impersonation of another user on pub.dev when publishing packages to a third-party server accepting pub.dev oauth2 access tokens has been addressed. For example, this vulnerability could be used to attack internal and corporate package servers. Developers who only host packages on pub.dev are not affected by this issue.
Hkrati je predstavljen pomemben izid ogrodja za izgradnjo uporabniškega vmesnika Flutter 2.8, ki velja za alternativo React Native in omogoča izdelavo aplikacij za platforme iOS, Android, Windows, macOS in Linux na podlagi ene same izvorne kode, prav tako pa omogoča ustvarjanje aplikacij za zagon v brskalnikih. Na osnovi Flutterja je zgrajena uporabniška lupina mikrojedrne operacijske sistema Fuchsia, ki jo razvija Google. Opaženo je, da se je v zadnjih šestih mesecih število aplikacij na Flutter 2 v Google Play Store povečalo s 200 tisoč na 375 tisoč, kar pomeni, da se je skoraj podvojilo.
Večina kode Flutter je napisana v jeziku Dart, medtem ko je runtime motor za izvajanje aplikacij napisan v C++. Pri razvoju aplikacij je poleg nativnega jezika Dart mogoče uporabiti tudi Dart Foreign Function Interface za klicanje kode v C/C++. Visoka zmogljivost izvajanja se doseže s prevajanjem aplikacij v strojno kodo za ciljne platforme. Pri tem aplikacije ni treba ponovno prevajati po vsaki spremembi - Dart ponuja način vročega nalaganja, ki omogoča spremembe v aktivni aplikaciji in takojšnje ocenjevanje rezultatov.
Med spremembami v novem izidu Flutterja izstopa optimizacija hitrosti zagona in porabe pomnilnika na mobilnih napravah. Poenostavljeno je povezovanje aplikacij z backend storitvami, kot sta Firebase in Google Cloud. Stabilizirana so orodja za integracijo z Google Ads. Znatno je izboljšana podpora za kamere in spletne vtičnike. Ponujena so nova orodja za poenostavitev razvoja, na primer dodan je pripomoček za avtentikacijo s pomočjo Firebase. Posodobljen je bil tudi motor Flame, namenjen razvoju 2D iger z uporabo Flutterja.
Izvor: opennet.ru
