Gjuhë programimi Dart 2.15 dhe kornizë Flutter 2.8 në dispozicion

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 lëshimit të shpejtë dhe performancës së lartë për të gjithë shfletuesit modern të uebit dhe lloje të ndryshme mjedisesh, nga pajisjet portative deri te serverët e fuqishëm.
  • 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 komunale shpërndahen përmes magazinës së pijetores, e cila ka rreth 22 mijë pako.

Ndryshimet kryesore në lëshimin e Dart 2.15:

  • Ofron mjete për ekzekutimin e shpejtë paralel të detyrave me izolim të mbajtësve. Në sistemet me shumë bërthama, koha e ekzekutimit të Dart si parazgjedhje ekzekuton kodin e aplikacionit në një bërthamë të CPU-së dhe përdor bërthama të tjera për të kryer detyra të sistemit si hyrje/dalja asinkrone, shkrimi në skedarë ose kryerja e thirrjeve në rrjet. Për aplikacionet që duhet të ekzekutojnë paralelisht mbajtësit e tyre, për shembull, për të dhënë animacion në ndërfaqe, është e mundur të hapen blloqe të veçanta kodi (izoluar), të izoluar nga njëri-tjetri dhe të ekzekutuar në bërthamat e tjera të CPU-së në të njëjtën kohë me fillin kryesor të aplikacionit. . Për të mbrojtur kundër gabimeve që lindin kur ekzekutimi i njëkohshëm i kodit që punon me të njëjtin grup të dhënash, ndarja e objekteve të ndryshueshme në blloqe të ndryshme të izolimit është e ndaluar dhe përdoret një model i kalimit të mesazheve për ndërveprim midis mbajtësve.

    Dart 2.15 prezanton një koncept të ri - grupet e bllokut të izoluar (grupet e izoluara), i cili ju lejon të organizoni qasje të përbashkët në struktura të ndryshme të brendshme të të dhënave në blloqe të izoluara që janë pjesë e të njëjtit grup, të cilat mund të zvogëlojnë ndjeshëm shpenzimet e larta kur ndërveproni midis mbajtësve në një grup . Për shembull, nisja e një blloku izolues shtesë në një grup ekzistues është 100 herë më i shpejtë dhe kërkon 10-100 herë më pak memorie sesa lëshimi i një blloku të veçantë izolues, për shkak të eliminimit të nevojës për të inicializuar strukturat e të dhënave të programit.

    Përkundër faktit se blloqet e izoluara në një grup ende ndalojnë aksesin e përbashkët në objekte të ndryshueshme, grupet përdorin një memorie të përbashkët të grumbullit, e cila mund të përshpejtojë ndjeshëm transferimin e objekteve nga një bllok në tjetrin pa pasur nevojë të kryejnë operacione kopjimi me burime intensive. Versioni i ri ju lejon gjithashtu të kaloni rezultatin e mbajtësit kur telefononi Isolate.exit() për të transferuar të dhëna në bllokun e izolimit prind pa operacione kopjimi. Përveç kësaj, mekanizmi i transmetimit 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 izolimeve duke përdorur thirrjen SendPort.send() përfshijnë disa lloje funksionesh, mbylljesh dhe gjurmimesh.

  • Në veglat për krijimin e treguesve për funksionet individuale në objekte të tjera (shqyerje), janë hequr kufizimet për krijimin e treguesve të ngjashëm në kodin e konstruktorit, gjë që mund të jetë e dobishme kur ndërtoni ndërfaqe të bazuara në bibliotekën Flutter. Për shembull, për të krijuar një miniaplikacion Column që përfshin shumë miniaplikacione të tekstit, mund të telefononi ".map()" dhe t'i kaloni treguesit konstruktorit Text.new të objektit Text: klasa FruitWidget zgjeron StatelessWidget { @override Ndërtimi i miniaplikacionit (BuildContext kontekst) { return Column( fëmijë: ['Mollë', 'Portokalli'].map(Text.new).toList()); } }
  • Mundësitë që lidhen me përdorimin e treguesve të funksionit janë zgjeruar. U shtua aftësia për të përdorur metoda të përgjithshme dhe tregues funksioni për të krijuar një metodë dhe tregues jo të përgjithshëm: T id (T vlera) => vlera; var intId = id ; // lejohet në versionin 2.15 në vend të "int Function(int) intId = id;" const fo = id; // treguesi në id të funksionit. konst c1 = për ;
  • Biblioteka dart:core ka përmirësuar mbështetjen për enums, për shembull, tani mund të nxirrni një vlerë vargu nga çdo vlerë enum duke përdorur metodën ".name", zgjidhni vlerat sipas emrit ose përputhni çifte vlerash: enum MyEnum { one , dy, tre } void main() { print(MyEnum.one.emri); // "një" do të shtypet. print(MyEnum.values.byName('dy') == MyEnum.two); // "e vërtetë" do të shtypet. harta përfundimtare = MyEnum.values.asNameMap(); print(harta['tre'] == MyEnum.tree); // "e vërtetë". }
  • Është zbatuar një teknikë e kompresimit të treguesit që lejon përdorimin e një paraqitjeje më kompakte të treguesve në mjediset 64-bitësh nëse një hapësirë ​​adrese 32-bitëshe është e mjaftueshme për adresim (përdoret jo më shumë se 4 GB memorie). Testet kanë treguar se një optimizim i tillë bën të mundur zvogëlimin e madhësisë së grumbullit me afërsisht 10%. Në Flutter SDK, modaliteti i ri tashmë është aktivizuar për Android si parazgjedhje dhe planifikohet të aktivizohet për iOS në një version të ardhshëm.
  • Dart SDK përfshin mjete për korrigjimin e gabimeve dhe analizën e performancës (DevTools), të cilat më parë ishin dhënë në një paketë të veçantë.
  • Mjete janë shtuar në komandën "dart pub" dhe në depot e paketave pub.dev për të gjurmuar publikimin aksidental të informacionit konfidencial, për shembull, duke lënë kredencialet për sistemet e integrimit të vazhdueshëm dhe mjediset cloud brenda paketës. Nëse zbulohen rrjedhje të tilla, ekzekutimi i komandës "dart pub publikoj" do të ndërpritet me një mesazh gabimi. Nëse ka pasur një pozitiv të rremë, është e mundur të anashkaloni kontrollin përmes një liste të bardhë.
  • Mundësia për të revokuar një version tashmë të publikuar të një pakete është shtuar në depon e pub.dev, për shembull, nëse zbulohen gabime ose dobësi të rrezikshme. Më parë, për korrigjime të tilla, praktika ishte publikimi i një versioni korrigjues, por në disa situata është e nevojshme të anulohet publikimi ekzistues dhe urgjentisht të ndalohet shpërndarja e tij e mëtejshme (për shembull, nëse korrigjimi nuk është ende gati ose nëse ishte një lëshim i plotë botuar gabimisht në vend të një versioni testues). Pas revokimit, paketa nuk identifikohet më në komandat "pub get" dhe "pub upgrade" dhe në sistemet që e kanë instaluar tashmë, një paralajmërim i veçantë lëshohet herën tjetër kur ekzekutohet "pub get".
  • Mbrojtje e shtuar kundër një cenueshmërie (CVE-2021-22567) të shkaktuar nga përdorimi i karaktereve unicode në kod që ndryshojnë rendin e ekranit.
  • Rregulloi një dobësi (CVE-2021-22568) që ju lejon të imitoni një përdorues tjetër të pub.dev kur publikoni paketa në një server të palës së tretë që pranon shenjat e aksesit pub.dev oauth2. Për shembull, dobësia mund të përdoret për të sulmuar serverët e paketave të brendshme dhe të korporatave. Zhvilluesit që presin vetëm paketa në pub.dev nuk preken nga kjo çështje.

Në të njëjtën kohë, u prezantua një version i rëndësishëm i kornizës së ndërfaqes së përdoruesit Flutter 2.8, i cili konsiderohet si një alternativë për React Native dhe lejon, bazuar në një bazë të vetme kodi, të lëshojë aplikacione për iOS, Android, Windows, macOS dhe Platformat Linux, si dhe të krijojnë aplikacione për t'u ekzekutuar në shfletues. Një guaskë e personalizuar për sistemin operativ të mikrokernelit Fuchsia e zhvilluar nga Google është ndërtuar në bazë të Flutter. Vihet re se gjatë gjashtë muajve të fundit, numri i aplikacioneve Flutter 2 në Google Play Store është rritur nga 200 mijë në 375 mijë, d.m.th. pothuajse dy herë.

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.

Ndër ndryshimet në versionin e ri të Flutter, vërehet optimizimi i shpejtësisë së nisjes dhe konsumit të kujtesës në pajisjet mobile. Është më e lehtë të lidhësh aplikacionet me shërbimet mbështetëse si Firebase dhe Google Cloud. Mjetet për integrimin me Google Ads janë stabilizuar. Mbështetja për kamerat dhe shtojcat në ueb është përmirësuar ndjeshëm. Janë propozuar mjete të reja për të thjeshtuar zhvillimin, për shembull, është shtuar një widget për vërtetim duke përdorur Firebase. Motori Flame, i krijuar për zhvillimin e lojërave 2D duke përdorur Flutter, është përditësuar.

Burimi: opennet.ru

Shto një koment