Kompania Google publikoi një version të ri të gjuhës programimit Dart 2.15, duke vazhduar zhvillimin e degës së rigjeneruar radikalisht të Dart 2, e cila ndryshon nga versioni origjinal i gjuhës Dart duke aplikuar tipizim të fortë statik (tipet mund të nxirren automatikisht, prandaj përcaktimi i tipeve nuk është i detyrueshëm, por tipizimi dinamik nuk përdoret më dhe tipi i nxjerrë fillimisht mbahet prej variablit dhe përdoret më pas një kontroll i rreptë i tipit).
Karakteristikat e gjuhës Dart:
- Sintaksë e njohur dhe e thjeshtë për t'u mësuar, natyrale për programuesit në JavaScript, C dhe Java.
- Sigurimi i nisjes së shpejtë dhe performancës së lartë për të gjithë shfletuesit modernë dhe llojet e ndryshme të ambientit, nga pajisjet portative deri te ato të fuqishme. servera.
- Mundësia për të përcaktuar klasa dhe interface, duke lejuar përdorimin e kapsulimit dhe rikthimin e metodave dhe të dhënave ekzistuese.
- Përcaktimi i tipeve ndihmon në lehtësimin e debugging-ut dhe identifikimin e gabimeve, e bën kodin më të qartë dhe më të lexueshëm, e lehtëson përmirësimin dhe analizën nga zhvillues të tjerë.
- Mes tipeve të mbështetura janë: lloje të ndryshme hash-e, arrays dhe lista, radhë, tipet numerike dhe string, tipet për përcaktimin e datës dhe orës, shprehjet e rregullta (RegExp). Ka mundësi për të krijuar llojet e tua.
- Për organizimin e ekzekutimit paralel, propozohet përdorimi i klasave me atributin isolate, ku kodi ekzekutohet plotësisht në një hapësirë të izoluar në një zonë të veçantë memorie, duke ndërvepruar me procesin kryesor përmes dërgimit të mesazheve.
- Mbështetje për përdorimin e biblioteka që lehtësojnë mbështetje dhe debugging të projekteve të mëdha web. Zhvillime të jashtme funksionesh mund të lidhen si biblioteka të ndara. Aplikacionet mund të copëtohen në pjesë dhe caktimi i zhvillimit të çdo pjese mund t'i jepet një ekipi të veçantë programuesish.
- NjĂ« grup mjetesh tĂ« gatshme pĂ«r mbĂ«shtetje zhvillimi nĂ« gjuhĂ«n Dart, duke pĂ«rfshirĂ« implementimin e mjeteve pĂ«r zhvillim dinamik dhe debugging me korrigjimin e kodit nĂ« fluks (âedit-and-continueâ).
- Për lehtësimin e zhvillimit në gjuhën Dart vjen një SDK, një menaxher paketash pub, një analizues statik kodi dart_analyzer, një grup bibliotekash, mjedisi i integruar i zhvillimit DartPad dhe plugin-e që mbështesin Dart për IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 dhe Vim.
- Paketa shtesë me biblioteka dhe mjete shpërndahen përmes depozitës pub, e cila ka rreth 22 mijë paketa.
Ndryshimet kryesore në lëshimin e Dart 2.15:
- Janë ofruar mjete për ekzekutimin e shpejtë të detyrave me izolim të trajtuesve. Në sistemet me shumë bërthama, runtime i Dart në parazgjedhje ekzekuton kodin e aplikacionit në një bërthamë CPU, ndërsa bërthamat e tjera angazhohen për të përfunduar detyra sistemore si hyrje/dalje asinkrone, shkrimi në skedarë apo thirrje në rrjet. Për aplikacionet që nevojiten të ekzekutojnë përpunuesit e tyre në paralel, për shembull, për vizatimin e animacioneve në ndërfaqe, është e mundur të iniciohet bllok i veçantë kodi (isolate), të izoluara nga njëra-tjetra dhe që ekzekutohen në bërthama të tjera CPU, në mënyrë të njëkohshme me rrjedhën kryesore të aplikacionit. Për të mbrojtur nga gabimet që ndodhin nga ekzekutimi në mënyrë njëkohëshe të kodit që punon me një grup të dhënash, në blloqet isolate ndalohet ndarja e objekteve të ndryshueshme, dhe për ndërveprimin mes përpunuesve zbatohet një model i bazuar në dërgimin e mesazheve.
NĂ« Dart 2.15 Ă«shtĂ« propozuar njĂ« koncept i ri â grupe tĂ« blloqeve tĂ« izoluara (isolate groups), duke lejuar organizimin e aksesit tĂ« pĂ«rbashkĂ«t nĂ« strukturat e ndryshme tĂ« dhĂ«nash brenda blloqeve isolate qĂ« pĂ«rbĂ«jnĂ« njĂ« grup, çka ndihmon nĂ« uljen e kostove tĂ« ndĂ«rveprimit tĂ« pĂ«rpunuesve nĂ« grup. PĂ«r shembull, iniciimi i njĂ« blloku tĂ« shtuar isolate nĂ« njĂ« grup ekzistues Ă«shtĂ« 100 herĂ« mĂ« i shpejtĂ« dhe kĂ«rkon 10-100 herĂ« mĂ« pak memorie se sa iniciimi i njĂ« blloku isolate tĂ« izoluar, pĂ«r shkak tĂ« pĂ«rjashtimit tĂ« nevojĂ«s pĂ«r inicializimin e strukturave tĂ« dhĂ«nash tĂ« programit.
MegjithĂ«se ndarjet nĂ« grupe ende ndalojnĂ« ndarjen e objekteve tĂ« ndryshueshme, grupet pĂ«rdorin njĂ« memorie heap tĂ« pĂ«rbashkĂ«t, e cila lejon pĂ«rshpejtimin e ndarjes sĂ« objekteve nga njĂ« ndarje nĂ« tjetrĂ«n pa nevojĂ«n pĂ«r operacione tĂ« kĂ«rkuar, tĂ« tilla si kopjimi. NĂ« versionin e ri gjithashtu lejohet kalimi i rezultatit tĂ« punĂ«s sĂ« menaxherit kur thirret Isolate.exit() pĂ«r tĂ« kaluar tĂ« dhĂ«na nĂ« ndarjen prind pa operacione kopjimi. PĂ«r mĂ« tepĂ«r, Ă«shtĂ« optimizuar mekanizmi i kalimit tĂ« mesazheve â mesazhet e vogla dhe tĂ« mesme tani pĂ«rpunohen rreth 8 herĂ« mĂ« shpejt. NdĂ«r objektet qĂ« mund tĂ« kalohen midis ndarjeve pĂ«rmes thirrjes SendPort.send(), janĂ« pĂ«rfshirĂ« disa lloje funksionesh, mbyllje dhe gjurmimi i grumbujve.
- NĂ« mjetet pĂ«r krijimin e referencave nĂ« funksione tĂ« veçanta nĂ« objekte tĂ« tjera (tear-off) janĂ« hequr kufizimet pĂ«r krijimin e referencave tĂ« tilla nĂ« kodin e konstruktorĂ«ve, qĂ« mund tĂ« jetĂ« e dobishme kur ndĂ«rtojmĂ« ndĂ«rfaqe duke pĂ«rdorur bibliotekĂ«n Flutter. PĂ«r shembull, pĂ«r tĂ« krijuar njĂ« widget Column, qĂ« pĂ«rfshin disa widget Text, mund tĂ« thirret â.map()â dhe tĂ« kalohen referencat nĂ« konstruktorin 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Ă« qĂ« lidhen me pĂ«rdorimin e referencave nĂ« funksione. ĂshtĂ« shtuar mundĂ«sia e pĂ«rdorimit tĂ« metodave tĂ« pĂ«rgjithshme (generic) dhe referencave tĂ« funksioneve pĂ«r krijimin e njĂ« metode dhe reference qĂ« nuk janĂ« tĂ« pĂ«rgjithshme: T id<T>(T value) => value; var intId = id<int>; // lejohet nĂ« versionin 2.15 nĂ« vend tĂ« âint Function(int) intId = id;â const fo = id; // referencĂ« nĂ« funksionin id. const c1 = fo<int>;
- NĂ« bibliotekĂ«n dart:core Ă«shtĂ« pĂ«rmirĂ«suar mbĂ«shtetja pĂ«r enumeratat (enum), pĂ«r shembull tani mund tĂ« merret vlera string nga çdo vlerĂ« enum pĂ«rmes metodĂ«s â.nameâ, tĂ« bĂ«het seleksionimi i vlerave sipas emrit ose tĂ« bĂ«het kĂ«rcim i çiftĂ«ve 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â. }
- ĂshtĂ« zbatuar njĂ« teknikĂ« e kompresimit tĂ« referencave, e cila lejon pĂ«rdorimin e njĂ« paraqitjeje mĂ« kompakte tĂ« referencave nĂ« mjediset 64-bit, nĂ«se pĂ«r adresimin e mjafton hapĂ«sira adresore 32-bit (nuk pĂ«rdoret mĂ« shumĂ« se 4 GB memorie). Testet treguan se kjo optimizim mund tĂ« zvogĂ«lojĂ« madhĂ«sinĂ« e heaps rreth 10%. NĂ« Flutter SDK, pĂ«r default, mĂ«nyra e re Ă«shtĂ« aktivizuar pĂ«r Android, dhe nĂ« versionin e ardhshĂ«m planifikohet tĂ« aktivizohet pĂ«r iOS.
- Në paketën Dart SDK janë përfshirë mjete për debugin dhe analizën e performancës (DevTools), që më parë ishin ofruar në një paketë të veçantë.
- NĂ« komandĂ«n âdart pubâ dhe repositoriumet e paketave pub.dev janĂ« shtuar mjete pĂ«r tĂ« ndjekur publikimin aksidental tĂ« informacionit konfidencial, pĂ«r shembull, tĂ« lĂ«nies brenda paketĂ«s tĂ« kredencialeve pĂ«r sistemet e integrimit tĂ« vazhdueshĂ«m dhe mjediset nĂ« cloud. NĂ« rast se zbulohet ndonjĂ« rrjedhje e tillĂ«, ekzekutimi i komandĂ«s âdart pub publishâ do tĂ« ndalet me njĂ« mesazh gabimi. NĂ« rast se ka ndodhur njĂ« zbulim i rremĂ«, Ă«shtĂ« dhĂ«nĂ« mundĂ«sia e kalimit tĂ« kontrolleve pĂ«rmes njĂ« liste tĂ« bardhĂ«.
- NĂ« repositorin pub.dev Ă«shtĂ« shtuar mundĂ«sia pĂ«r tĂ« revokuar njĂ« version tĂ« publikuar tĂ« paketĂ«s, pĂ«r shembull, nĂ« rast se zbulohet ndonjĂ« gabim tĂ« rrezikshĂ«m ose vulnerabilitetesh. MĂ« parĂ« pĂ«r kĂ«to korrigjime ishte praktikuar publikimi i njĂ« versioni tĂ« korrigjuar nĂ« vazhdim, por nĂ« disa raste Ă«shtĂ« e nevojshme tĂ« revokohet njĂ« botim dhe tĂ« ndalohet shpĂ«rndarja e tij mĂ« tej (pĂ«r shembull, nĂ«se korrigjimet nuk janĂ« ende tĂ« gatshme ose nĂ«se pĂ«r njĂ« rast Ă«shtĂ« publikuar gabimisht njĂ« version i plotĂ« nĂ« vend tĂ« atij provues). Pas revokimit, paketa nuk do tĂ« identifikohet nĂ« komandat âpub getâ dhe âpub upgradeâ, dhe nĂ« sistemet qĂ« tashmĂ« e kanĂ« instaluar atĂ«, gjatĂ« ekzekutimit tĂ« ardhshĂ«m âpub getâ do tĂ« jepet njĂ« paralajmĂ«rim i veçantĂ«.
- ĂshtĂ« shtuar mbrojtja nga vulnerabiliteti (CVE-2021-22567) qĂ« shkaktohet nga pĂ«rdorimi i karaktereve unicode nĂ« kod qĂ« ndryshojnĂ« rendin e shfaqjes.
- ĂshtĂ« eliminuar vulnerabiliteti (CVE-2021-22568) qĂ« lejon tĂ« identifikohesh si njĂ« pĂ«rdorues tjetĂ«r pub.dev gjatĂ« publikimit tĂ« paketeve nĂ« njĂ« server tĂ« jashtĂ«m qĂ« pranon tokenet oauth2 tĂ« aksesit pĂ«r pub.dev. PĂ«r shembull, vulnerabiliteti mund tĂ« pĂ«rdoret pĂ«r tĂ« sulmuar serverĂ«t e paketeve tĂ« brendshme dhe korporative. Problemi nuk i prek zhvilluesit qĂ« publikojnĂ« paketa vetĂ«m nĂ« pub.dev.
Një version i rëndësishëm i kornizës së ndërtimit të ndërfaqeve të përdoruesit Flutter 2.8 është publikuar, i cili konsiderohet si një alternativë për React Native dhe lejon krijimin e aplikacioneve për platforma si iOS, Android, Windows, macOS dhe Linux nga një bazë e vetme kodimi, si dhe ndihmon në zhvillimin e aplikacioneve për shfletuesit. Një ndërfaqe përdoruesi ka qenë e ndërtuar mbi Flutter për mikro-platformën operuese Fuchsia që po zhvillohet nga Google. Kohët e fundit është raportuar se numri i aplikacioneve në Flutter 2 në Google Play Store është rritur nga 200 mijë në 375 mijë, që do të thotë se ka shënuar pothuajse dyfishim.
Pjesa kryesore e kodit Flutter Ă«shtĂ« realizuar nĂ« gjuhĂ«n Dart, ndĂ«rsa motori runtime pĂ«r ekzekutimin e aplikacioneve Ă«shtĂ« shkruar nĂ« C++. NĂ« zhvillimin e aplikacioneve, pĂ«rveç gjuhĂ«s Dart, qĂ« Ă«shtĂ« natyrale pĂ«r Flutter, mund tĂ« pĂ«rdoret ndĂ«rfaqja Dart Foreign Function pĂ«r tĂ« thirrur kod nĂ« C/C++. Performanca e lartĂ« e ekzekutimit arrihet pĂ«rmes kompilimit tĂ« aplikacioneve nĂ« kod makinor pĂ«r platformat e synuara. NĂ« tĂ« njĂ«jtĂ«n kohĂ«, programi nuk ka nevojĂ« tĂ« rikompilohet pas çdo ndryshimi â Dart ofron njĂ« mod tĂ« ngarkesĂ«s sĂ« nxehtĂ«, qĂ« lejon tĂ« bĂ«hen ndryshime nĂ« aplikacionin nĂ« punĂ« dhe tĂ« vlerĂ«sohet menjĂ«herĂ« rezultati.
Ndër ndryshimet e reja në versionin e ri të Flutter është optimizimi i shpejtësisë së nisjes dhe konsumit të memories në pajisjet mobile. Lidhja e aplikacioneve me shërbimet backend, si Firebase dhe Google Cloud, është lehtësuar. Mjetet për integrim me Google Ads janë stabilizuar. Mbështetje për kamerat dhe pluginët web është përmirësuar ndjeshëm. Janë ofruar mjete të reja për lehtësimin e zhvillimit, për shembull, është shtuar një widget për autentifikimin duke përdorur Firebase. Motori Flame, i cili është i dedikuar për zhvillimin e lojrave 2D duke përdorur Flutter, është përmirësuar.
Burimi: opennet.ru
