Dostupni programski jezik Dart 2.15 i Flutter 2.8 okvir

Google je objavio izdanje Dart 2.15 programskog jezika, kojim se nastavlja razvoj radikalno redizajniranog Dart 2 grane, koja se razlikuje od originalne verzije Dart jezika po upotrebi jakog statičkog kucanja (tipovi se mogu zaključiti automatski, tako da se specificira tipovi nisu neophodni, ali se više ne koristi dinamičko kucanje i početno izračunavanje tip se dodeljuje varijabli i naknadno se primenjuje stroga provera tipa).

Karakteristike Dart jezika:

  • Poznata i laka za učenje sintaksa, prirodna za JavaScript, C i Java programere.
  • Osiguravanje brzog pokretanja i visokih performansi za sve moderne web pretraživače i razne vrste okruženja, od prijenosnih uređaja do moćnih servera.
  • Sposobnost definisanja klasa i interfejsa koji dozvoljavaju inkapsulaciju i ponovnu upotrebu postojećih metoda i podataka.
  • Navođenje tipova olakšava otklanjanje grešaka i identifikaciju grešaka, čini kod jasnijim i čitljivijim i pojednostavljuje njegovu modifikaciju i analizu od strane programera trećih strana.
  • Podržani tipovi uključuju: različite tipove hashova, nizova i lista, redove, numeričke i nizove tipove, tipove za određivanje datuma i vremena, regularne izraze (RegExp). Moguće je kreirati vlastite tipove.
  • Da bi se organiziralo paralelno izvršavanje, predlaže se korištenje klasa s atributom isolate, čiji se kod izvršava u potpunosti u izolovanom prostoru u zasebnom memorijskom području, u interakciji s glavnim procesom slanjem poruka.
  • Podrška za korištenje biblioteka koje pojednostavljuju podršku i otklanjanje grešaka u velikim web projektima. Implementacije funkcija trećih strana mogu biti uključene u obliku zajedničkih biblioteka. Aplikacije se mogu podijeliti na dijelove i razvoj svakog dijela povjeriti posebnom timu programera.
  • Skup gotovih alata za podršku razvoju na Dart jeziku, uključujući implementaciju alata za dinamički razvoj i otklanjanje grešaka sa ispravkom koda u hodu („uredi i nastavi“).
  • Da bi se pojednostavio razvoj na Dart jeziku, dolazi sa SDK-om, pubom za upravljanje paketima, statičkim analizatorom koda dart_analyzer, skupom biblioteka, integrisanim razvojnim okruženjem DartPad i dodacima omogućenim za Dart za IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 i Vim.
  • Dodatni paketi sa bibliotekama i uslužnim programima distribuiraju se preko pub repozitorija, koji ima oko 22 hiljade paketa.

Glavne promjene u izdanju Dart 2.15:

  • Pruža alate za brzo paralelno izvršavanje zadataka sa izolacijom rukovalaca. Na sistemima sa više jezgara, Dart runtime podrazumevano pokreće kod aplikacije na jednom CPU jezgru i koristi druga jezgra za obavljanje sistemskih zadataka kao što su asinhroni I/O, pisanje u datoteke ili upućivanje mrežnih poziva. Za aplikacije koje treba da izvršavaju svoje rukovaoce paralelno, na primjer, za renderiranje animacije u sučelju, moguće je pokrenuti zasebne blokove koda (izolirati), izolovati jedan od drugog i izvršavati na drugim CPU jezgrama istovremeno s glavnom niti aplikacije . Radi zaštite od grešaka koje nastaju prilikom istovremenog izvršavanja koda koji radi sa istim skupom podataka, zabranjeno je dijeljenje promjenjivih objekata u različitim blokovima izolacije, a za interakciju između rukovatelja koristi se model prenošenja poruka.

    Dart 2.15 uvodi novi koncept - izolirane grupe blokova (izolirane grupe), koji vam omogućava da organizirate zajednički pristup različitim internim strukturama podataka u izolovanim blokovima koji su dio iste grupe, što može značajno smanjiti troškove prilikom interakcije između rukovatelja u grupi . Na primjer, pokretanje dodatnog izolatnog bloka u postojećoj grupi je 100 puta brže i zahtijeva 10-100 puta manje memorije od pokretanja zasebnog bloka izolacije, zbog eliminacije potrebe za inicijalizacijom struktura podataka programa.

    Unatoč činjenici da izolacijski blokovi u grupi i dalje zabranjuju zajednički pristup promjenjivim objektima, grupe koriste zajedničku hrpu memoriju, što može značajno ubrzati prijenos objekata iz jednog bloka u drugi bez potrebe za izvođenjem resursno intenzivnih operacija kopiranja. Nova verzija vam takođe omogućava da prosledite rezultat rukovaoca kada pozovete Isolate.exit() za prenos podataka u roditeljski blok izolacije bez operacija kopiranja. Osim toga, optimiziran je mehanizam prijenosa poruka - male i srednje poruke se sada obrađuju otprilike 8 puta brže. Objekti koji se mogu proslijediti između izolata pomoću poziva SendPort.send() uključuju neke tipove funkcija, zatvaranja i tragova steka.

  • U alatima za kreiranje pokazivača na pojedinačne funkcije u drugim objektima (tear-off), uklonjena su ograničenja za kreiranje sličnih pokazivača u kodu konstruktora, što može biti korisno pri izgradnji interfejsa zasnovanih na Flutter biblioteci. Na primjer, da biste kreirali widget Column koji uključuje više tekstualnih widgeta, možete pozvati ".map()" i proslijediti pokazivače na Text.new konstruktor Text objekta: klasa FruitWidget proširuje StatelessWidget { @override Widget build (BuildContext kontekst) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Mogućnosti povezane s korištenjem pokazivača funkcija su proširene. Dodana je mogućnost korištenja generičkih metoda i pokazivača funkcija za kreiranje negeneričke metode i pokazivača: T id (T vrijednost) => vrijednost; var intId = id ; // dozvoljeno u verziji 2.15 umjesto "int Function(int) intId = id;" const fo = id; // pokazivač na funkciju id. const c1 = fo ;
  • Biblioteka dart:core ima poboljšanu podršku za enume, na primjer, sada možete izbaciti vrijednost niza iz svake vrijednosti enum koristeći metodu ".name", odabrati vrijednosti po imenu ili uskladiti parove vrijednosti: enum MyEnum { one , dva, tri } void main() { print(MyEnum.one.name); // "jedan" će biti ispisan. print(MyEnum.values.byName('two') == MyEnum.two); // "true" će biti odštampano. konačna mapa = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // "istinito". }
  • Implementirana je tehnika kompresije pokazivača koja omogućava korištenje kompaktnijeg prikaza pokazivača u 64-bitnim okruženjima ako je 32-bitni adresni prostor dovoljan za adresiranje (ne koristi se više od 4 GB memorije). Testovi su pokazali da ovakva optimizacija omogućava smanjenje veličine hrpe za otprilike 10%. U Flutter SDK-u, novi način rada je već omogućen za Android prema zadanim postavkama, a planirano je da bude omogućen za iOS u budućem izdanju.
  • Dart SDK uključuje alate za otklanjanje grešaka i analizu performansi (DevTools), koji su prethodno bili isporučeni u zasebnom paketu.
  • Alati su dodati komandi “dart pub” i spremištima paketa pub.dev za praćenje slučajnog objavljivanja povjerljivih informacija, na primjer, ostavljajući vjerodajnice za sisteme kontinuirane integracije i okruženja u oblaku unutar paketa. Ako se otkriju takva curenja, izvršenje naredbe “dart pub publish” će biti prekinuto porukom o grešci. Ako je bilo lažno pozitivnog, moguće je zaobići provjeru putem bijele liste.
  • Mogućnost opoziva već objavljene verzije paketa je dodana u pub.dev spremište, na primjer, ako se otkriju opasne greške ili ranjivosti. Ranije je za takve ispravke praksa bila objavljivanje korektivne verzije, ali je u nekim situacijama potrebno otkazati postojeće izdanje i hitno zaustaviti njegovu daljnju distribuciju (npr. ako ispravak još nije spreman ili ako je potpuno izdanje objavljeno objavljeno greškom umjesto probne verzije). Nakon opoziva, paket se više ne identificira u naredbama "pub get" i "pub upgrade", a na sistemima koji su ga već instalirali, izdaje se posebno upozorenje sljedeći put kada se "pub get" izvrši.
  • Dodata zaštita od ranjivosti (CVE-2021-22567) uzrokovane upotrebom unicode znakova u kodu koji mijenjaju redoslijed prikaza.
  • Ispravljena je ranjivost (CVE-2021-22568) koja vam omogućava da se lažno predstavljate kao drugi pub.dev korisnik kada objavljujete pakete na serveru treće strane koji prihvata pub.dev oauth2 pristupne tokene. Na primjer, ranjivost bi se mogla koristiti za napad na interne i korporativne servere paketa. Ovaj problem ne utiče na programere koji samo hostuju pakete na pub.dev.

Istovremeno, predstavljeno je značajno izdanje okvira korisničkog interfejsa Flutter 2.8, koji se smatra alternativom React Native-u i omogućava, na osnovu jedne baze koda, izdavanje aplikacija za iOS, Android, Windows, macOS i Linux platforme, kao i kreiranje aplikacija za pokretanje u pretraživačima. Prilagođena ljuska za operativni sistem Fuchsia microkernel koji je razvio Google izgrađen je na bazi Flutter-a. Napominje se da je u proteklih šest mjeseci broj Flutter 2 aplikacija u Google Play Store-u porastao sa 200 hiljada na 375 hiljada, tj. skoro dva puta.

Glavni dio Flutter koda implementiran je u Dart jeziku, a runtime engine za izvršavanje aplikacija napisan je u C++. Prilikom razvoja aplikacija, pored Flutterovog izvornog Dart jezika, možete koristiti Dart Foreign Function interfejs za pozivanje C/C++ koda. Visoke performanse izvršenja se postižu kompajliranjem aplikacija u izvorni kod za ciljne platforme. U ovom slučaju, program ne treba ponovo kompajlirati nakon svake promjene - Dart pruža vrući režim ponovnog učitavanja koji vam omogućava da izvršite promjene u pokrenutoj aplikaciji i odmah procijenite rezultat.

Među promjenama u novom izdanju Fluttera, zapaža se optimizacija brzine pokretanja i potrošnje memorije na mobilnim uređajima. Lakše je povezati aplikacije sa pozadinskim uslugama kao što su Firebase i Google Cloud. Alati za integraciju sa Google Adsom su stabilizirani. Podrška za kamere i web dodatke je značajno poboljšana. Predloženi su novi alati kako bi se pojednostavio razvoj, na primjer, dodat je widget za autentifikaciju koristeći Firebase. Flame engine, dizajniran za razvoj 2D igara koristeći Flutter, je ažuriran.

izvor: opennet.ru

Dodajte komentar