Dart 2.15 programazio-lengoaia eta Flutter 2.8 markoa eskuragarri daude

Google-k Dart 2.15 programazio-lengoaia argitaratu du, Dart 2-ren errotik birdiseinatu den adar baten garapenarekin jarraitzen duena, Dart hizkuntzaren jatorrizko bertsiotik desberdintzen dena idazketa estatiko sendoa erabiltzeagatik (motak automatikoki ondoriozta daitezke, beraz. motak zehaztea ez da beharrezkoa, baina idazketa dinamikoa jada ez da erabiltzen eta hasieran kalkulatzen da mota aldagaiari esleitzen zaio eta ondoren mota egiaztatze zorrotza aplikatzen da).

Dart hizkuntzaren ezaugarriak:

  • Sintaxi ezaguna eta ikasteko erraza, JavaScript, C eta Java programatzaileentzat naturala.
  • Abiarazte azkarra eta errendimendu handia bermatzea web arakatzaile moderno guztientzat eta hainbat ingurune motarentzat, gailu eramangarrietatik hasi eta zerbitzari indartsuetaraino.
  • Lehendik dauden metodoak eta datuak kapsulatzea eta berrerabiltzea ahalbidetzen duten klaseak eta interfazeak definitzeko gaitasuna.
  • Motak zehazteak erroreak araztea eta identifikatzea errazten du, kodea argiago eta irakurgarriagoa egiten du eta hirugarrenen garatzaileek aldatzea eta aztertzea errazten du.
  • Onartutako motak honako hauek dira: hainbat hash, matrize eta zerrenda motak, ilarak, zenbakizko eta kate motak, data eta ordua zehazteko motak, adierazpen erregularrak (RegExp). Posible da zure motak sortzea.
  • Exekuzio paraleloa antolatzeko, isolatu atributua duten klaseak erabiltzea proposatzen da, eta horien kodea osorik espazio isolatu batean exekutatzen da aparteko memoria-eremu batean, prozesu nagusiarekin elkarreraginean mezuak bidaliz.
  • Web proiektu handien laguntza eta arazketa errazten duten liburutegiak erabiltzeko laguntza. Hirugarrenen funtzioen inplementazioak liburutegi partekatuen moduan sar daitezke. Aplikazioak zatitan banatu daitezke eta zati bakoitzaren garapena programatzaile talde bereizi baten esku utzi.
  • Dart lengoaian garapena laguntzeko prest egindako tresna multzoa, garapen dinamikoa eta arazketa tresnak inplementatzea barne, kode-zuzenketarekin batera ("editatu eta jarraitu").
  • Dart hizkuntzan garapena sinplifikatzeko, SDK bat, pakete kudeatzaile pub bat, kode analizatzaile estatiko bat dart_analyzer, liburutegi multzo bat, garapen-ingurune integratua DartPad eta IntelliJ IDEA, WebStorm, Emacs, Sublime Text-erako Dart-en gaitutako pluginak ditu. 2 eta Vim.
  • Liburutegiak eta utilitateak dituzten pakete gehigarriak pub biltegiaren bidez banatzen dira, 22 mila pakete inguru dituena.

Aldaketa nagusiak Dart 2.15 bertsioan:

  • Zereginen exekuzio paralelo azkarra egiteko tresnak eskaintzen ditu kudeatzaileak isolatuta. Nukleo anitzeko sistemetan, Dart exekuzio-denborak lehenespenez aplikazio-kodea exekutatzen du CPU-nukleo batean eta beste nukleo batzuk erabiltzen ditu sistema-zereginak egiteko, hala nola I/O asinkronoak, fitxategietan idaztea edo sareko deiak egiteko. Beren kudeatzaileak paraleloan exekutatu behar dituzten aplikazioetarako, adibidez, animazioa interfazean errendatzeko, posible da kode-bloke bereiziak abiarazi (isolatu), elkarrengandik isolatuta eta beste CPU-nukleoetan exekutatuta aplikazioaren hari nagusiarekin aldi berean. . Kodea datu-multzo berdinarekin lan egiten denean aldibereko exekuzioan sortzen diren akatsen aurka babesteko, bloke isolatu ezberdinetan objektu aldagarriak partekatzea debekatuta dago eta mezuak pasatzeko eredua erabiltzen da kudeatzaileen arteko elkarrekintzarako.

    Dart 2.15-k kontzeptu berri bat aurkezten du: bloke-talde isolatuak (talde isolatuak), zeinak barneko datu-egituretarako sarbide partekatua antolatzeko aukera ematen baitu talde bereko bloke isolatuetan, eta horrek nabarmen murrizten du gainkostua talde bateko kudeatzaileen artean elkarreraginean. . Esaterako, lehendik dagoen talde batean isolamendu-bloke gehigarri bat abiaraztea 100 aldiz azkarragoa da eta 10-100 aldiz memoria gutxiago behar du bereizi bloke bat abiarazteko baino, programaren datuen egiturak hasieratzeko beharra ezabatzen duelako.

    Talde bateko bloke isolatuek objektu aldagarrietarako partekatutako sarbidea debekatzen duten arren, taldeek partekatutako memoria pila bat erabiltzen dute, eta horrek nabarmen bizkortu dezake objektuak bloke batetik bestera transferitzea, baliabide askoko kopia-eragiketak egin beharrik gabe. Bertsio berriak Isolate.exit() deitzean kudeatzailearen emaitza pasatzeko aukera ere ematen du, datuak isolatu bloke nagusira transferitzeko eragiketak kopiatu gabe. Horrez gain, mezuen transmisio-mekanismoa optimizatu egin da: mezu txikiak eta ertainak 8 aldiz azkarrago prozesatzen dira orain. SendPort.send() deia erabiliz isolatuen artean pasa daitezkeen objektuek funtzio, itxiera eta pila-aztarnak dituzte.

  • Beste objektu batzuetan funtzio indibidualetarako erakusleak sortzeko tresnetan (tear-off), eraikitzaile-kodean antzeko erakusleak sortzeko murrizketak kendu dira, eta hori erabilgarria izan daiteke Flutter liburutegian oinarritutako interfazeak eraikitzeko orduan. Adibidez, Testu widget anitz biltzen dituen Column widget bat sortzeko, ".map()" dei diezaiokezu eta Testu objektuaren Text.new eraikitzaileari erakusleak pasa ditzakezu: class FruitWidget extends StatessWidget { @override Widget build(BuildContext context) { itzuli Zutabea( seme-alabak: ['Sagarra', 'Laranja'].mapa(Testua.berria).ToList()); }}
  • Funtzio erakusleen erabilerarekin lotutako aukerak zabaldu dira. Metodo generikoak eta funtzio erakusleak erabiltzeko gaitasuna gehitu da metodo eta erakuslea ez-generiko bat sortzeko: T id (T balioa) => balioa; var intId = id ; // 2.15 bertsioan onartzen da "int Function(int) intId = id;" ordez const fo = id; // funtzioaren idaren erakuslea. const c1 = fo ;
  • Dart:core liburutegiak enumetarako laguntza hobetu du, adibidez, orain enum balio bakoitzeko kate-balio bat atera dezakezu ".name" metodoa erabiliz, balioak izenaren arabera hauta ditzakezu edo balio bikoteak lotu: enum MyEnum { bat , bi, hiru } void main() { print(MyEnum.one.name); // "bat" inprimatuko da. inprimatu(NireEnum.values.byName('bi') == NireEnum.bi); // "egia" inprimatuko da. azken mapa = MyEnum.values.asNameMap (); inprimatu(mapa['hiru'] == NireEnum.hiru); // "egia". }
  • Erakusleen konpresio-teknika bat ezarri da, 64 biteko inguruneetan erakusleen irudikapen trinkoagoa erabiltzea ahalbidetzen duena helbideetarako 32 biteko helbide-espazioa nahikoa bada (ez da 4 GB baino gehiagoko memoria erabiltzen). Testek frogatu dute optimizazio horrek heap-aren tamaina gutxi gorabehera %10ean murriztea ahalbidetzen duela. Flutter SDK-n, modu berria dagoeneko gaituta dago Android-entzat lehenespenez, eta etorkizuneko bertsio batean iOS-erako gaituta egotea aurreikusten da.
  • Dart SDK-ak arazketa eta errendimenduaren analisirako tresnak biltzen ditu (DevTools), aurretik aparteko pakete batean ematen zirenak.
  • Tresnak gehitu dira "dart pub" komandoan eta pub.dev paketeen biltegietan isilpeko informazioaren ustekabeko argitalpenaren jarraipena egiteko, adibidez, etengabeko integrazio sistemetarako eta hodeiko inguruneetarako kredentzialak paketearen barruan utziz. Isurketa horiek hautematen badira, "dart pub publish" komandoaren exekuzioa eten egingo da errore-mezu batekin. Positibo faltsu bat egon bada, posible da egiaztapena zerrenda zuri baten bidez saihestea.
  • Dagoeneko argitaratutako pakete baten bertsio bat baliogabetzeko gaitasuna gehitu da pub.dev biltegian, adibidez, errore edo ahultasun arriskutsuak aurkitzen badira. Aurretik, zuzenketa horiek egiteko, praktika bertsio zuzentzaile bat argitaratzea zen, baina egoera batzuetan beharrezkoa da lehendik dagoen bertsioa bertan behera utzi eta berehala etetea bere banaketa gehiago (adibidez, zuzenketa oraindik prest ez badago edo kaleratze osoa bazegoen). akatsez argitaratutako proba-bertsio baten ordez). Errebokatu ondoren, paketea jada ez da identifikatzen "pub get" eta "pub upgrade" komandoetan, eta dagoeneko instalatuta duten sistemetan, abisu berezi bat ematen da "pub get" exekutatzen den hurrengoan.
  • Bistaratzeko ordena aldatzen duten kodean unicode karaktereak erabiltzeak eragindako ahultasun baten aurkako babesa gehitu da (CVE-2021-22567).
  • Ahultasun bat (CVE-2021-22568) konpondu da, pub.dev-eko beste erabiltzaile bat ordezkatzeko aukera ematen duena, paketeak argitaratzean pub.dev oauth2 sarbide-tokenak onartzen dituen hirugarrenen zerbitzari batean. Esate baterako, ahultasuna barne eta korporazio pakete zerbitzariei erasotzeko erabil liteke. Pub.dev-en paketeak soilik ostatatzen dituzten garatzaileek ez dute arazo honek eragiten.

Aldi berean, Flutter 2.8 erabiltzailearen interfaze-esparruaren bertsio esanguratsu bat aurkeztu zen, React Native-ren alternatibatzat hartzen dena eta kode-oinarri bakar batean oinarrituta, iOS, Android, Windows, macOS eta macOS-erako aplikazioak askatzeko aukera ematen duena. Linux plataformak, baita nabigatzaileetan exekutatzeko aplikazioak sortu ere. Google-k garatutako Fuchsia mikrokernel sistema eragilerako shell pertsonalizatua Flutter-en oinarrituta eraiki da. Kontuan izan da azken sei hilabeteetan Google Play Store-ko Flutter 2 aplikazioen kopurua 200 milatik 375 milara igo dela, hau da. ia bi aldiz.

Flutter kodearen zati nagusia Dart hizkuntzan inplementatuta dago, eta aplikazioak exekutatzeko exekuzio-motorra C++-n idatzita dago. Aplikazioak garatzerakoan, Flutterren jatorrizko Dart hizkuntzaz gain, Dart Foreign Function interfazea erabil dezakezu C/C++ kodea deitzeko. Exekuzio-errendimendu handia xede-plataformetarako aplikazioak jatorrizko kode batera konpilatuz lortzen da. Kasu honetan, programa ez da aldaketa bakoitzaren ondoren berriro konpilatu behar - Dart-ek birkargatzeko modu beroa eskaintzen du, exekutatzen ari den aplikazio batean aldaketak egiteko eta emaitza berehala ebaluatzeko aukera ematen duena.

Flutter-en bertsio berrian egindako aldaketen artean, abiarazte-abiaduraren eta gailu mugikorretako memoria-kontsumoaren optimizazioa nabarmentzen da. Errazagoa da aplikazioak Firebase eta Google Cloud bezalako backend zerbitzuetara konektatzea. Google Ads-ekin integratzeko tresnak egonkortu dira. Kameretarako eta web-pluginetarako laguntza nabarmen hobetu da. Garapena errazteko tresna berriak proposatu dira, adibidez, Firebase erabiliz autentifikaziorako widget bat gehitu da. Flutter erabiliz 2D jokoak garatzeko diseinatutako Flame motorra eguneratu da.

Iturria: opennet.ru

Gehitu iruzkin berria