Google ka publikuar lëshimin e gjuhës së programimit Dart 2.15, e cila vazhdon zhvillimin e një dege të ridizajnuar rrënjësisht të Dart 2, e cila ndryshon nga versioni origjinal i gjuhës Dart nga përdorimi i shtypjes së fortë statike (llojet mund të konkludohen automatikisht, kështu që specifikimi i llojeve nuk është i nevojshëm, por shtypja dinamike nuk përdoret më dhe e llogaritur fillimisht lloji i caktohet variablës dhe më pas zbatohet kontrolli i rreptë i tipit).
Karakteristikat e gjuhës Dart:
- Sintaksë e njohur dhe e lehtë për t'u mësuar, e natyrshme për programuesit JavaScript, C dhe Java.
- Sigurimi i një nisjeje të shpejtë dhe performancës së lartë për të gjithë shfletuesit modernë të internetit dhe lloje të ndryshme mjedisesh, nga pajisjet portative deri te ato të fuqishme. serverat.
- Aftësia për të përcaktuar klasat dhe ndërfaqet që lejojnë kapsulimin dhe ripërdorimin e metodave dhe të dhënave ekzistuese.
- Specifikimi i llojeve e bën më të lehtë korrigjimin dhe identifikimin e gabimeve, e bën kodin më të qartë dhe më të lexueshëm dhe thjeshton modifikimin dhe analizën e tij nga zhvilluesit e palëve të treta.
- Llojet e mbështetura përfshijnë: lloje të ndryshme hasesh, vargje dhe lista, radhë, lloje numerike dhe vargjesh, lloje për përcaktimin e datës dhe orës, shprehje të rregullta (RegExp). Është e mundur të krijoni llojet tuaja.
- Për të organizuar ekzekutimin paralel, propozohet përdorimi i klasave me atributin izolues, kodi i të cilave ekzekutohet tërësisht në hapësirë të izoluar në një zonë të veçantë memorie, duke ndërvepruar me procesin kryesor duke dërguar mesazhe.
- Mbështetje për përdorimin e bibliotekave që thjeshtojnë mbështetjen dhe korrigjimin e projekteve të mëdha në internet. Implementimet e funksioneve nga palët e treta mund të përfshihen në formën e bibliotekave të përbashkëta. Aplikacionet mund të ndahen në pjesë dhe t'i besojnë zhvillimin e secilës pjesë një ekipi të veçantë programuesish.
- Një grup mjetesh të gatshme për të mbështetur zhvillimin në gjuhën Dart, duke përfshirë zbatimin e mjeteve dinamike të zhvillimit dhe korrigjimit me korrigjim kodi në fluturim ("redakto dhe vazhdo").
- Për të thjeshtuar zhvillimin në gjuhën Dart, ai vjen me një SDK, një lokal të menaxherit të paketave, një analizues statik të kodit dart_analyzer, një grup bibliotekash, një mjedis zhvillimi të integruar DartPad dhe shtojca të aktivizuara me Dart për IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 dhe Vim.
- Paketa shtesë me biblioteka dhe shërbime shpërndahen përmes repozitorit pub, i cili përmban afërsisht 22 paketa.
Ndryshimet kryesore në lëshimin e Dart 2.15:
- Ofrohen mjete për ekzekutim të shpejtë dhe paralel të detyrave me izolim të punonjësve. Në sistemet me shumë bërthama, koha e ekzekutimit Dart ekzekuton si parazgjedhje kodin e aplikacionit në një bërthamë CPU-je, ndërsa bërthamat e tjera përdoren për detyra të sistemit, të tilla si I/O asinkrone, shkrimi i skedarëve ose thirrjet në rrjet. Për aplikacionet që kërkojnë ekzekutim paralel të punonjësve të tyre, të tilla si renderimi i animacioneve të ndërfaqes, ofrohet mundësia për të nisur blloqe të ndara kodi (izolate). Këto blloqe janë të izoluara nga njëra-tjetra dhe funksionojnë në bërthama të ndryshme CPU-je njëkohësisht me fijen kryesore të aplikacionit. Për t'u mbrojtur nga gabimet që ndodhin kur kodi që qaset në të njëjtin grup të dhënash ekzekutohet njëkohësisht, blloqeve të ndryshme të izoluara u ndalohet të ndajnë objekte të ndryshueshme dhe një model i kalimit të mesazheve përdoret për komunikim midis punonjësve.
Dart 2.15 prezanton një koncept të ri - grupe të izoluara - që lejojnë akses të përbashkët në struktura të ndryshme të të dhënave të brendshme brenda blloqeve të izoluara brenda një grupi, duke zvogëluar ndjeshëm mbingarkesën e ndërveprimeve midis trajtuesve brenda një grupi. Për shembull, nisja e një blloku shtesë të izoluar brenda një grupi ekzistues është 100 herë më e shpejtë dhe kërkon 10-100 herë më pak memorie sesa nisja e një blloku të izoluar të pavarur, duke eliminuar nevojën për të inicializuar strukturat e të dhënave të programit.
Edhe pse qasja e përbashkët në objektet e ndryshueshme është ende e ndaluar në blloqet e izoluara brenda një grupi, grupet ndajnë memorien e grumbullit, duke përshpejtuar ndjeshëm transferimin e objekteve nga një bllok në tjetrin pa pasur nevojë për operacione kopjimi që kërkojnë shumë burime. Versioni i ri gjithashtu lejon kalimin e rezultatit të një trajtuesi kur thirret Isolate.exit() për të transferuar të dhëna në bllokun prind të izoluar pa kopjuar. Për më tepër, mekanizmi i kalimit të mesazheve është optimizuar - mesazhet e vogla dhe të mesme tani përpunohen afërsisht 8 herë më shpejt. Objektet që mund të kalohen midis blloqeve të izoluara duke përdorur SendPort.send() tani përfshijnë lloje të caktuara funksionesh, mbylljesh dhe gjurmësh të pirgut.
- Funksioni i shkëputjes heq kufizimet në krijimin e treguesve të tillë në kodin e konstruktorit, gjë që mund të jetë e dobishme kur ndërtohen ndërfaqe bazuar në bibliotekën Flutter. Për shembull, për të krijuar një vegël Column që përfshin shumë vegëla Teksti, mund të thirrni .map() dhe t'i kaloni treguesit te konstruktori Text.new i objektit Tekst: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
- Kapacitetet e treguesit të funksionit janë zgjeruar. Është shtuar mundësia për të përdorur metoda gjenerike dhe tregues funksioni për të krijuar një metodë dhe tregues jo-gjenerik: T id (Vlera T) => vlera; var intId = id ; // lejohet në versionin 2.15 në vend të "int Function(int) intId = id;" const fo = id; // tregues në funksionin id. const c1 = fo ;
- Biblioteka dart:core ka mbështetje të përmirësuar për enum-et, siç është aftësia për të printuar vlerën e vargut të secilës vlerë enum-i duke përdorur metodën .name, për të zgjedhur vlerat sipas emrit ose për të krahasuar çifte vlerash: enum MyEnum { një, dy, tre } void main() { print(MyEnum. një. emër); // printon "një". print(MyEnum.values.byName('dy') == MyEnum.two); // printon "true". final map = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // "true". }
- Është zbatuar një teknikë e kompresimit të treguesit, duke mundësuar përdorimin e një përfaqësimi më kompakt të treguesit në mjedise 64-bit nëse një hapësirë adrese 32-bit është e mjaftueshme për adresim (duke përdorur jo më shumë se 4 GB memorie). Testet kanë treguar se ky optimizim mund ta zvogëlojë madhësinë e heap-it me afërsisht 10%. Modaliteti i ri është aktivizuar tashmë si parazgjedhje në Flutter SDK. Android, dhe është planifikuar të përfshihet për iOS në një version të ardhshëm.
- SDK-ja Dart përfshin mjete për debugging dhe analizë të performancës (DevTools), të cilat më parë ofroheshin në një paketë të veçantë.
- Komanda "dart pub" dhe depoja e paketës pub.dev janë përditësuar me mjete për të zbuluar publikimin aksidental të informacionit të ndjeshëm, siç është lënia e kredencialeve për sistemet e integrimit të vazhdueshëm dhe mjediset cloud brenda një pakete. Nëse zbulohen rrjedhje të tilla, komanda "dart pub publish" do të ndërpritet me një mesazh gabimi. Në rast të një pozitivi të rremë, tani është i disponueshëm një opsion i vendosjes në listën e bardhë për të anashkaluar këtë kontroll.
- Depozita pub.dev tani ju lejon të tërhiqni një version të publikuar më parë të një pakete, për shembull, nëse zbulohen gabime ose dobësi të rrezikshme. Më parë, rregullime të tilla adresoheshin duke publikuar një version korrigjues pasues, por në disa situata, është e nevojshme të anuloni versionin ekzistues dhe të ndaloni urgjentisht shpërndarjen e tij të mëtejshme (për shembull, nëse rregullimi nuk është ende gati ose nëse një version i plotë është publikuar gabimisht në vend të një versioni testimi). Pas tërheqjes, paketa nuk zbulohet më nga komandat "pub get" dhe "pub upgrade", dhe në sistemet që e kanë tashmë të instaluar, lëshohet një paralajmërim i veçantë herën tjetër që ekzekutoni "pub get".
- U shtua mbrojtje kundër një dobësie (CVE-2021-22567) të shkaktuar nga përdorimi i karaktereve Unicode në kod që ndryshojnë rendin e shfaqjes.
- Është rregulluar një dobësi (CVE-2021-22568) që i lejon një sulmuesi të imitojë një përdorues tjetër të pub.dev kur publikon paketa në një server të palës së tretë që pranon tokena aksesi OAuth2 të pub.dev. Për shembull, kjo dobësi mund të përdoret për të sulmuar serverat e paketave të brendshëm dhe të korporatave. Zhvilluesit që publikojnë paketa vetëm në pub.dev nuk preken nga ky problem.
Në të njëjtën kohë, u prezantua një lëshim i rëndësishëm i kornizës së zhvillimit të ndërfaqes së përdoruesit Flutter 2.8, i cili konsiderohet një alternativë ndaj React Native dhe lejon lëshimin e aplikacioneve për platformat iOS bazuar në një bazë të vetme kodi. Android, Windows, macOS и Linux, si dhe të krijojnë aplikacione për t'u ekzekutuar në shfletues. Flutter është themeli për ndërfaqen e përdoruesit të sistemit operativ mikrobërthamor të Google, Fuchsia. Është vënë re se gjatë gjashtë muajve të fundit, numri i aplikacioneve Flutter 2 në Google Play Store është rritur nga 200 në 375, pothuajse dyfishuar.
Pjesa kryesore e kodit Flutter zbatohet në gjuhën Dart, dhe motori i ekzekutimit për ekzekutimin e aplikacioneve është i shkruar në C++. Kur zhvilloni aplikacione, përveç gjuhës Dart amtare të Flutter, mund të përdorni ndërfaqen e funksionit të huaj Dart për të thirrur kodin C/C++. Performanca e lartë e ekzekutimit arrihet duke përpiluar aplikacione në kodin vendas për platformat e synuara. Në këtë rast, programi nuk ka nevojë të ripërpilohet pas çdo ndryshimi - Dart ofron një modalitet të nxehtë të rifreskimit që ju lejon të bëni ndryshime në një aplikacion që funksionon dhe të vlerësoni menjëherë rezultatin.
Ndryshimet në versionin e ri të Flutter përfshijnë optimizime për shpejtësinë e nisjes dhe konsumin e memories në pajisjet mobile. Lidhja e aplikacioneve me shërbimet e backend-it si Firebase dhe Google Cloud është thjeshtuar. Mjetet për integrimin me Google Ads janë stabilizuar. Mbështetja për kamerat dhe shtojcat e uebit është përmirësuar ndjeshëm. Ofrohen mjete të reja për të thjeshtuar zhvillimin, siç është shtimi i një vegël për autentifikim duke përdorur Firebase. Motori Flame, i projektuar për zhvillimin e lojërave 2D duke përdorur Flutter, është përditësuar.
Burimi: opennet.ru
