Kompania Google publikoi versionin e gjuhës së programimit Dart 2.15, duke vazhduar zhvillimin e një dege të rëndësishme të rishikuar të Dart 2, e cila dallon nga versioni origjinal i gjuhës Dart me përdorimin e tipizimit të fortë statik (tipet mund të inferohen automatikisht, kështu që deklarimi i tipave nuk është obligativ, por tipizimi dinamik nuk përdoret më dhe tipi i inferuar qëndron i ngjitur me variablën dhe më pas zbatohet një kontroll i fortë i tipit).
Veçoritë e gjuhës Dart:
- Sintaksë e njohur dhe e thjeshtë për t'u mësuar, e natyrshme për programuesit në JavaScript, C dhe Java.
- Sigurimi i një fillimi të shpejtë dhe performance të lartë për të gjitha shfletuesit modernë dhe llojet e ndryshme të mjediseve, nga pajisjet portative deri te ato të fuqishme. serverësh.
- Mundësia për të përcaktuar klasa dhe interface, duke lejuar përdorimin e inkapsulimit dhe ripërdorimin e metodave dhe të dhënave ekzistuese.
- Shënimi i tipave lejon thjeshtimin e procesit të debugimit dhe identifikimit të gabimeve, e bën kodin më të qartë dhe më të lexueshëm, e lehtëson përmirësimin dhe analizën nga zhvilluesit e jashtëm.
- Mes tipeve të mbështetur janë: llojet e ndryshme të hash-eve, masivave dhe listave, radhët, llojet numerike dhe string, tipet për përcaktimin e datës dhe orës, shprehjet e rregullta (RegExp). Ka mundësinë e krijimit të tipave të vet.
- Për organizimin e ekzekutimit paralel, propozohet përdorimi i klasave me atributin isolate, kodi i të cilëve ekzekutohet plotësisht në një hapësirë të izoluar në një zonë të veçantë të memories, duke bashkëpunuar me procesin kryesor nëpërmjet dërgimit të mesazheve.
- Mbështetje për përdorimin e bibliotekave që thjeshtojnë mbështetje dhe debugimin e projekteve të mëdha web. Implementimet e jashtme të funksioneve mund të lidhen si biblioteka të ndara. Aplikacionet mund të ndahen në pjesë dhe t'i besohet zhvillimi i secilës pjesë një ekipi të veçantë programuesish.
- Një grup mjetesh të gatshme për mbështetje të zhvillimit në gjuhën Dart, duke përfshirë implementimin e mjeteve të zhvillimit dinamik dhe debugimit me korrigjimin e kodit në flukso («edit-and-continue»).
- Për lehtësimin e zhvillimit në gjuhën Dart, ofrohet SDK, menaxheri i paketave pub, analizatori statik i kodit dart_analyzer, një grup bibliotekash, ambienti i integruar i zhvillimit DartPad dhe shtesat me mbështetje për Dart për IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 dhe Vim.
- Paketa shtesë me biblioteka dhe utilitete shpërndahen përmes depozitës pub, e cila ka rreth 22 mijë paketa.
Ndryshimet kryesore në lëshimin Dart 2.15:
- Janë ofruar mjete për ekzekutimin e shpejtë paralele të detyrave me izolimin e përpunuesve. Në sistemet me shumë bashkëpronarë, runtime i Dart për (default) ekzekuton kodin e aplikacionit në një bërthamë CPU, ndërsa bërthama të tjera angazhohen për të kryer detyra sistemore, të tilla si hyrje/dalje asinkrone, shkrimi në skedarë ose realizimi i thirrjeve rrjetit. Për aplikacionet që duhet të ekzekutojnë përpunues të tyre paralelisht, si për shembull për vizatimin e animacioneve në ndërfaqe, është parashikuar mundësia e nisjes së blloqeve të veçanta të kodit (isolate), të izoluara nga njëra-tjetra dhe të ekzekutuara në bërthama të tjera CPU paralelisht me rrjedhën kryesore të aplikacionit. Për të mbrojtur nga gabimet që ndodhin gjatë ekzekutimit të përbashkët të kodit që punon me një grup të dhënash, ndalohet ndarja e objekteve të modifikueshme në blloqet e ndryshme isolate, ndërsa për ndërveprimin midis përpunuesve përdoret një model i bazuar në transmetimin e mesazheve.
NĂ« Dart 2.15, Ă«shtĂ« propozuar njĂ« koncept i ri â grupet e blloqeve izoluese (isolate groups), duke lejuar organizimin e qasjes sĂ« pĂ«rbashkĂ«t nĂ« struktura tĂ« ndryshme tĂ« dhĂ«nash tĂ« brendshme nĂ« blloqet izoluese qĂ« kontribuojnĂ« nĂ« njĂ« grup, çka lejon njĂ« ulje tĂ« konsiderueshme tĂ« kostove pĂ«r ndĂ«rveprimin e pĂ«rpunuesve nĂ« grup. PĂ«r shembull, nisja e njĂ« blloku tĂ« shtuar isolate nĂ« njĂ« grup ekzistues kryhet 100 herĂ« mĂ« shpejt dhe kĂ«rkon 10-100 herĂ« mĂ« pak memorie, pĂ«r shkak tĂ« eliminimit tĂ« nevojĂ«s pĂ«r inicializimin e strukturave tĂ« dhĂ«nash tĂ« programit.
MegjithĂ«se ndalimi i ndarjes sĂ« objekteve tĂ« modifikueshme vazhdon tĂ« jetĂ« nĂ« izolatet e grupeve, grupet pĂ«rdorin njĂ« memorie heap tĂ« pĂ«rbashkĂ«t, e cila lejon qĂ« transmetimi i objekteve nga njĂ« bllok nĂ« tjetrin tĂ« bĂ«het dukshĂ«m mĂ« shpejt pa nevojĂ«n e operacioneve tĂ« shpenzueshme tĂ« kopjimit. NĂ« versionin e ri gjithashtu lejohet kalimi i rezultateve tĂ« funksionit gjatĂ« thirrjes sĂ« Isolate.exit() pĂ«r tĂ« kaluar tĂ« dhĂ«na nĂ« bllokun prind tĂ« izolates pa operacione kopjimi. PĂ«rveç kĂ«saj, Ă«shtĂ« optimizuar mekanizmi pĂ«r transmetimin e mesazheve â mesazhet e vogla dhe tĂ« mesme tani procesohen rreth 8 herĂ« mĂ« shpejt. NĂ« grupin e objekteve qĂ« mund tĂ« transmetohen mes bllokesh aislates pĂ«rmes thirrjes SendPort.send(), pĂ«rfshihen disa lloje funksionesh, mbyllje dhe gjurmime tĂ« stack-ut.
- NĂ« mjete pĂ«r tĂ« krijuar tregues pĂ«r funksione tĂ« veçanta nĂ« objekte tĂ« tjera (tear-off) janĂ« hequr kufizimet pĂ«r krijimin e treguesve tĂ« tillĂ« nĂ« kodin e ndĂ«rtuesve, çka mund tĂ« jetĂ« e dobishme pĂ«r ndĂ«rtimin e ndĂ«rfaqeve mbi bazĂ«n e bibliotekĂ«s Flutter. PĂ«r shembull, pĂ«r tĂ« krijuar njĂ« widget Column, duke pĂ«rfshirĂ« disa widgets Text, mund tĂ« thĂ«rrisni " .map()" dhe tĂ« kaloni treguesit nĂ« ndĂ«rtuesin Text.new tĂ« objektit Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: [âAppleâ, âOrangeâ].map(Text.new).toList()); } }
- JanĂ« zgjeruar mundĂ«sitĂ« lidhur me pĂ«rdorimin e treguesve tĂ« funksioneve. ĂshtĂ« shtuar mundĂ«sia pĂ«r tĂ« aplikuar metoda tĂ« pĂ«rgjithshme (generic) dhe tregues funksionesh pĂ«r krijimin e njĂ« metode dhe treguesi jo-gjenerik: T id<T>(T value) => value; var intId = id<int>; // e lejuar nĂ« versionin 2.15 nĂ« vend tĂ« âint Function(int) intId = id;â const fo = id; // tregues pĂ«r funksionin id. const c1 = fo<int>;
- NĂ« bibliotekĂ«n dart:core Ă«shtĂ« pĂ«rmirĂ«suar mbĂ«shtetje pĂ«r enumeracionet (enum), pĂ«r shembull, tani Ă«shtĂ« e mundur tĂ« nxjerrĂ«sh vlerĂ«n string nga çdo vlerĂ« enum pĂ«rmes metodĂ«s " .name ", tĂ« kryesh filtrimin e vlerave sipas emrit ose tĂ« realizosh pĂ«rputhjen e çiftit tĂ« vlerave: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // do tĂ« printohet "one". print(MyEnum.values.byName(âtwoâ) == MyEnum.two); // do tĂ« printohet "true". final map = MyEnum.values.asNameMap(); print(map[âthreeâ] == MyEnum.three); // "true". }
- Eshte implementuar teknika e kompresimit të treguesve, duke lejuar përfaqësimin më të kompakt të treguesve në mjedise 64-bit, nëse për adresimin mjafton hapësira adresuese 32-bit (nuk përdoren më shumë se 4 GB memorie). Testet tregojnë se një optimizim i tillë mund të reduktojë madhësinë e grumbullit me rreth 10%. Në Flutter SDK, modaliteti i ri është aktivizuar si parazgjedhje për Android dhe në versionin e ardhshëm planifikohet të aktivizohet edhe për iOS.
- Dart SDK tani përfshin mjete për debuggim dhe analizën e performancës (DevTools), të cilat më parë ishin ofruar në një paketë të veçantë.
- Në komandën 'dart pub' dhe në repozitoritë e pakove pub.dev janë shtuar mjete për ndjekjen e publikimit të rastësishëm të informacionit konfidencial, për shembull, lënia brenda paketës e kredencialeve për sistemet e integrimit të vazhdueshëm dhe mjediset cloud. Në rastin e zbulimit të rrjedhjeve të tilla, ekzekutimi i komandës 'dart pub publish' do të ndalohet me një mesazh gabimi. Nëse ka ndodhur një falsifikim, ofrohet mundësia e kalimit të kontrollit përmes një liste të bardhë.
- Në repozitorin pub.dev është shtuar mundësia për të anuluar një version të publikuar tashmë të paketës, për shembull, në rastin e zbulimit të gabimeve të rrezikshme ose dobësive. Më parë, për këto korrigjime praktikoheshin publikimi i një versioni tjetër të korrigjuar, por në disa situata kërkohet pikërisht anulimi i një publikimi të bërë dhe ndalimi urgjent i shpërndarjes së tij të mëtejshme (p.sh., nëse korrigjimi ende nuk është gati ose nëse gabimisht është publikuar një version i plotë në vend të atij për testim). Pas anulimit, paketa nuk identifikohet më në komandat 'pub get' dhe 'pub upgrade', dhe në sistemet që kanë vendosur atë do të jepet një paralajmërim të veçantë gjatë ekzekutimit të ardhshëm të 'pub get'.
- është shtuar mbrojtja nga dobësia (CVE-2021-22567), e cila shkaktohet nga përdorimi në kod të simboleve unicode që ndryshojnë renditjen e shfaqjes.
- është eliminuar dobësia (CVE-2021-22568) që lejonte një përdorues të paraqitet si një përdorues tjetër në pub.dev gjatë publikimit të pakove në një server të tretë që pranon tokenet oauth2 të aksesit pub.dev. Për shembull, dobësia mund të përdoret për sulme në serverët e brendshëm dhe korporativë të pakove. Problemi nuk prek zhvilluesit që publikojnë pakot vetëm në pub.dev.
Një lëshim i rëndësishëm i strukturës së ndërtimit të ndërfaqeve të përdoruesit Flutter 2.8 është paraqitur, i cili konsiderohet si një alternativë ndaj React Native dhe lejon që me një bazë kodimi të prodhohen aplikacione për platformat iOS, Android, Windows, macOS dhe Linux, si dhe të krijohen aplikacione për të funksionuar në shfletues. Flutter është bazuar në ndërfaqen e përdoruesit të sistemit operativ mikro-kernel Fuchsia, i zhvilluar nga Google. Vërehet se gjatë gjashtë muajve të fundit, numri i aplikacioneve në Flutter 2 në Google Play Store është rritur nga 200 mijë në 375 mijë, pra, pothuajse dyfish.
Pjesa kryesore e kodit tĂ« Flutter Ă«shtĂ« realizuar nĂ« gjuhĂ«n Dart, ndĂ«rsa motori runtime pĂ«r ekzekutimin e aplikacioneve Ă«shtĂ« shkruar nĂ« C++. GjatĂ« zhvillimit tĂ« aplikacioneve, pĂ«rveç gjuhĂ«s natyrale pĂ«r Flutter, Dart, mund tĂ« pĂ«rdoret ndĂ«rfaqja Dart Foreign Function pĂ«r tĂ« calls kodin nĂ« C/C++. Performanca e lartĂ« e ekzekutimit arrihet falĂ« kompilimit tĂ« aplikacioneve nĂ« kodin machine pĂ«r platformat e synuara. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, programi nuk ka nevojĂ« tĂ« riprogramohet pas çdo ndryshimi â Dart ofron modalitetin e rifreskimit tĂ« nxehtĂ«, i cili lejon tĂ« bĂ«hen ndryshime nĂ« aplikacionin qĂ« Ă«shtĂ« duke punuar dhe menjĂ«herĂ« tĂ« vlerĂ«sohet rezultati.
Ndryshimet nĂ« lĂ«shimin e ri tĂ« Flutter shĂ«nojnĂ« optimizimin e shpejtĂ«sisĂ« sĂ« nisjes dhe konsumit tĂ« memories nĂ« pajisjet mobile. E lehtĂ«son lidhjen e aplikacioneve me shĂ«rbimet backend, siç janĂ« Firebase dhe Google Cloud. Stabilizohen mjetet pĂ«r integrimin me Google Ads. ĂshtĂ« pĂ«rmirĂ«suar ndjeshĂ«m mbĂ«shtetja pĂ«r kamerat dhe web-pluginet. JanĂ« ofruar mjete tĂ« reja pĂ«r tĂ« lehtĂ«suar zhvillimin, pĂ«r shembull, Ă«shtĂ« shtuar njĂ« widget pĂ«r autentifikimin duke pĂ«rdorur Firebase. ĂshtĂ« pĂ«rditĂ«suar motori Flame, i cili Ă«shtĂ« i destinuar pĂ«r zhvillimin e lojrave 2D me Flutter.
Burimi: opennet.ru
