Gjuhë programimi Dart 2.15 dhe framework Flutter 2.8 janë në dispozicion

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

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster