Dostupan programski jezik Dart 2.15 i okvir Flutter 2.8

Google je objavio izdanje programskog jezika Dart 2.15, koji nastavlja razvoj radikalno redizajniranog ogranka Dart 2, koji se razlikuje od izvorne verzije jezika Dart u upotrebi snažnog statičkog tipkanja (tipovi se mogu zaključiti automatski, tako da se specificira tipovi nisu potrebni, ali dinamičko tipiziranje se više ne koristi i početni izračun tip se dodjeljuje varijabli i naknadno se primjenjuje stroga provjera tipa).

Značajke jezika Dart:

  • Poznata sintaksa laka za naučiti, prirodna za JavaScript, C i Java programere.
  • Osiguravanje brzog pokretanja i visokih performansi za sve moderne web preglednike i različite vrste okruženja, od prijenosnih uređaja do snažnih poslužitelja.
  • Sposobnost definiranja klasa i sučelja koja omogućuju enkapsulaciju i ponovnu upotrebu postojećih metoda i podataka.
  • Određivanje tipova olakšava otklanjanje pogrešaka i prepoznavanje pogrešaka, čini kod jasnijim i čitljivijim te pojednostavljuje njegovu izmjenu i analizu od strane programera trećih strana.
  • Podržani tipovi uključuju: razne vrste hashova, polja i liste, redove, numeričke i string tipove, tipove za određivanje datuma i vremena, regularne izraze (RegExp). Moguće je kreirati vlastite tipove.
  • Za organiziranje paralelnog izvođenja predlaže se korištenje klasa s atributom isolate, čiji se kod u potpunosti izvršava u izoliranom prostoru u zasebnom memorijskom području, u interakciji s glavnim procesom slanjem poruka.
  • Podrška za korištenje knjižnica koje pojednostavljuju podršku i otklanjanje pogrešaka velikih web projekata. Implementacije funkcija trećih strana mogu se uključiti u obliku zajedničkih knjižnica. Aplikacije je moguće podijeliti u dijelove i povjeriti razvoj svakog dijela posebnom timu programera.
  • Skup gotovih alata za podršku razvoju u Dart jeziku, uključujući implementaciju dinamičkog razvoja i alata za uklanjanje pogrešaka s korekcijom koda u hodu ("uredi i nastavi").
  • Kako bi se pojednostavio razvoj na Dart jeziku, dolazi sa SDK-om, pubom za upravljanje paketima, statičkim analizatorom koda dart_analyzer, skupom biblioteka, integriranim razvojnim okruženjem DartPad i dodacima omogućenim za Dart za IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 i Vim.
  • Dodatni paketi s bibliotekama i uslužnim programima distribuiraju se putem pub repozitorija koji ima oko 22 tisuće paketa.

Glavne promjene u izdanju Darta 2.15:

  • Pruža alate za brzo paralelno izvršavanje zadataka s izolacijom rukovatelja. Na višejezgrenim sustavima, Dart runtime prema zadanim postavkama pokreće kod aplikacije na jednoj CPU jezgri i koristi druge jezgre za izvođenje sistemskih zadataka kao što su asinkroni I/O, pisanje u datoteke ili upućivanje mrežnih poziva. Za aplikacije koje trebaju izvršavati svoje rukovatelje paralelno, na primjer, za renderiranje animacije u sučelju, moguće je pokrenuti zasebne blokove koda (izolirati), međusobno izolirane i izvršavati na drugim CPU jezgrama istovremeno s glavnom niti aplikacije . Za zaštitu od pogrešaka koje nastaju pri istodobnom izvođenju koda koji radi s istim skupom podataka, zabranjeno je dijeljenje promjenjivih objekata u različitim izoliranim blokovima, a za interakciju između rukovatelja koristi se model prosljeđivanja poruka.

    Dart 2.15 uvodi novi koncept - izolirane grupe blokova (izolirane grupe), koje vam omogućuju organiziranje zajedničkog pristupa različitim internim strukturama podataka u izoliranim blokovima koji su dio iste grupe, što može značajno smanjiti opterećenje prilikom interakcije između rukovatelja u grupi . Na primjer, pokretanje dodatnog izoliranog bloka u postojećoj grupi je 100 puta brže i zahtijeva 10-100 puta manje memorije od pokretanja zasebnog izoliranog bloka, zbog eliminacije potrebe za inicijalizacijom programskih struktura podataka.

    Unatoč činjenici da izolirani blokovi u grupi i dalje zabranjuju zajednički pristup promjenjivim objektima, grupe koriste zajedničku hrpu memorije, koja može značajno ubrzati prijenos objekata iz jednog bloka u drugi bez potrebe za izvođenjem operacija kopiranja koje zahtijevaju velike resurse. Nova verzija vam također omogućuje prosljeđivanje rezultata rukovatelja prilikom pozivanja Isolate.exit() za prijenos podataka u nadređeni blok izolacije bez operacija kopiranja. Osim toga, mehanizam prijenosa poruka je optimiziran - male i srednje poruke sada se obrađuju otprilike 8 puta brže. Objekti koji se mogu proslijediti između izolata korištenjem poziva SendPort.send() uključuju neke vrste funkcija, zatvaranja i tragove stogova.

  • 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 kod izgradnje sučelja temeljenih na Flutter biblioteci. Na primjer, da biste stvorili widget Stupac koji uključuje višestruke widgete za tekst, možete pozvati ".map()" i proslijediti pokazivače na Text.new konstruktor objekta Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); }}
  • Proširene su mogućnosti povezane s upotrebom funkcijskih pokazivača. Dodana je mogućnost korištenja generičkih metoda i pokazivača na funkcije za stvaranje negeneričke metode i pokazivača: T id (T vrijednost) => vrijednost; var intId = id ; // dopušteno u verziji 2.15 umjesto "int Function(int) intId = id;" const fo = id; // pokazivač na id funkcije. const c1 = fo ;
  • Biblioteka dart:core poboljšala je podršku za enume, na primjer, sada možete ispisati vrijednost niza iz svake enum vrijednosti pomoću metode ".name", odabrati vrijednosti po imenu ili spojiti parove vrijednosti: enum MyEnum { one , dva, tri } void main() { print(MyEnum.one.name); // "one" će biti ispisan. print(MyEnum.values.byName('two') == MyEnum.two); // ispisat će se "true". konačna karta = MyEnum.values.asNameMap(); print(map['three'] == MyEnum.three); // "točno". }
  • Implementirana je tehnika kompresije pokazivača koja omogućuje korištenje kompaktnijeg prikaza pokazivača u 64-bitnim okruženjima ako je za adresiranje dovoljan 32-bitni adresni prostor (ne koristi se više od 4 GB memorije). Ispitivanja su pokazala da takva optimizacija omogućuje smanjenje veličine gomile za približno 10%. U Flutter SDK-u, novi način je već omogućen za Android prema zadanim postavkama, a planira se da bude omogućen za iOS u budućem izdanju.
  • Dart SDK uključuje alate za otklanjanje pogrešaka i analizu performansi (DevTools), koji su prethodno bili isporučeni u zasebnom paketu.
  • Alati su dodani naredbi “dart pub” i spremištima paketa pub.dev za praćenje slučajnog objavljivanja povjerljivih informacija, na primjer, ostavljajući vjerodajnice za sustave kontinuirane integracije i okruženja oblaka unutar paketa. Ako se otkriju takva curenja, izvođenje naredbe "dart pub publish" bit će prekinuto porukom o pogrešci. Ako je došlo do lažnog pozitivnog rezultata, moguće je zaobići provjeru putem bijele liste.
  • U repozitorij pub.dev dodana je mogućnost opoziva već objavljene verzije paketa, primjerice, ako se otkriju opasne pogreške ili ranjivosti. Ranije je za takve ispravke bila praksa objavljivanje ispravne verzije, no u nekim situacijama potrebno je poništiti postojeće izdanje i hitno zaustaviti njegovu daljnju distribuciju (primjerice, ako ispravak još nije spreman ili ako je izdano potpuno izdanje objavljen greškom umjesto testne verzije). Nakon opoziva, paket se više ne identificira u naredbama “pub get” i “pub upgrade”, a na sustavima koji su ga već instalirali izdaje se posebno upozorenje kada se sljedeći put izvrši “pub get”.
  • Dodana 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ćuje lažno predstavljanje drugog pub.dev korisnika prilikom objavljivanja paketa na poslužitelju treće strane koji prihvaća pub.dev oauth2 pristupne tokene. Na primjer, ranjivost bi se mogla koristiti za napad na interne i korporativne poslužitelje paketa. Ovaj problem ne utječe na programere koji samo hostiraju pakete na pub.dev.

Istovremeno je predstavljeno značajno izdanje okvira korisničkog sučelja Flutter 2.8, koji se smatra alternativom React Nativeu i omogućuje, na temelju jedne baze koda, izdavanje aplikacija za iOS, Android, Windows, macOS i Linux platforme, kao i stvaranje aplikacija za pokretanje u preglednicima. Prilagođena ljuska za Fuchsia microkernel operativni sustav koji je razvio Google izgrađena je na temelju Fluttera. Napominje se da je u proteklih šest mjeseci broj aplikacija Flutter 2 u Google Play Storeu porastao s 200 tisuća na 375 tisuća, tj. gotovo dvaput.

Glavni dio Flutter koda implementiran je u Dart jeziku, a runtime engine za izvršavanje aplikacija napisan je u C++. Prilikom razvoja aplikacija, uz Flutterov izvorni Dart jezik, možete koristiti sučelje Dart Foreign Function za pozivanje C/C++ koda. Visoke izvedbene performanse postižu se kompajliranjem aplikacija u izvorni kod za ciljane platforme. U ovom slučaju, program ne treba ponovno kompajlirati nakon svake promjene - Dart nudi način ponovnog učitavanja u vrućem stanju koji vam omogućuje da napravite promjene u pokrenutoj aplikaciji i odmah procijenite rezultat.

Među promjenama u novom izdanju Fluttera navodi se optimizacija brzine pokretanja i potrošnje memorije na mobilnim uređajima. Lakše je povezati aplikacije s pozadinskim uslugama kao što su Firebase i Google Cloud. Alati za integraciju s Google Adsom su stabilizirani. Podrška za kamere i web dodatke značajno je poboljšana. Predloženi su novi alati za pojednostavljenje razvoja, na primjer, dodan je widget za autentifikaciju pomoću Firebasea. Motor Flame, dizajniran za razvoj 2D igara pomoću Fluttera, ažuriran je.

Izvor: opennet.ru

Dodajte komentar