Lingwa ta 'programmar Dart 2.15 u qafas Flutter 2.8 disponibbli

Google ppubblikat ir-rilaxx tal-lingwa ta 'programmar Dart 2.15, li tkompli l-iżvilupp ta' fergħa ddisinjata radikalment mill-ġdid ta 'Dart 2, li hija differenti mill-verżjoni oriġinali tal-lingwa Dart bl-użu ta' tajpjar statiku qawwi (it-tipi jistgħu jiġu dedotti awtomatikament, għalhekk li tispeċifika t-tipi mhix meħtieġa, iżda t-tajpjar dinamiku m'għadux jintuża u inizjalment ikkalkulat it-tip huwa assenjat għall-varjabbli u sussegwentement jiġi applikat verifika stretta tat-tip).

Karatteristiċi tal-lingwa Dart:

  • Sintassi familjari u faċli biex titgħallem, naturali għal programmaturi JavaScript, C u Java.
  • L-iżgurar ta 'tnedija veloċi u prestazzjoni għolja għall-web browsers moderni kollha u diversi tipi ta' ambjenti, minn tagħmir portabbli għal servers b'saħħithom.
  • Il-ħila li tiddefinixxi klassijiet u interfaces li jippermettu l-inkapsulament u l-użu mill-ġdid ta 'metodi u data eżistenti.
  • L-ispeċifikazzjoni tat-tipi tagħmilha aktar faċli biex tiddibaggja u tidentifika l-iżbalji, tagħmel il-kodiċi aktar ċar u aktar leġibbli, u tissimplifika l-modifika u l-analiżi tagħha minn żviluppaturi terzi.
  • Tipi appoġġjati jinkludu: diversi tipi ta 'hashes, arrays u listi, kjuwijiet, tipi numeriċi u string, tipi għad-determinazzjoni tad-data u l-ħin, espressjonijiet regolari (RegExp). Huwa possibbli li toħloq it-tipi tiegħek.
  • Biex tiġi organizzata l-eżekuzzjoni parallela, huwa propost li jintużaw klassijiet bl-attribut iżolat, li l-kodiċi tagħhom huwa esegwit kompletament fi spazju iżolat f'żona ta 'memorja separata, li jinteraġixxu mal-proċess prinċipali billi jintbagħtu messaġġi.
  • Appoġġ għall-użu ta 'libreriji li jissimplifikaw l-appoġġ u d-debugging ta' proġetti kbar tal-web. Implimentazzjonijiet ta 'partijiet terzi ta' funzjonijiet jistgħu jiġu inklużi fil-forma ta 'libreriji kondiviżi. L-applikazzjonijiet jistgħu jinqasmu f'partijiet u jafdaw l-iżvilupp ta 'kull parti lil tim separat ta' programmaturi.
  • Sett ta’ għodod lesti biex jappoġġjaw l-iżvilupp fil-lingwa Dart, inkluża l-implimentazzjoni ta’ żvilupp dinamiku u għodod ta’ debugging b’korrezzjoni tal-kodiċi fuq il-fly (“edit-and-continue”).
  • Biex tissimplifika l-iżvilupp fil-lingwa Dart, tiġi flimkien ma 'SDK, pub maniġer tal-pakketti, analizzatur tal-kodiċi statiku dart_analyzer, sett ta' libreriji, ambjent ta 'żvilupp integrat DartPad u plugins ppermettiet Dart għal IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 u Vim.
  • Pakketti addizzjonali bil-libreriji u l-utilitajiet huma mqassma permezz tar-repożitorju tal-pub, li għandu madwar 22 elf pakkett.

Bidliet ewlenin fir-rilaxx ta' Dart 2.15:

  • Jipprovdi għodod għal eżekuzzjoni parallela mgħaġġla tal-kompiti b'iżolament ta 'handlers. Fuq sistemi multi-core, ir-runtime Dart awtomatikament iħaddem kodiċi tal-applikazzjoni fuq qalba waħda tas-CPU u juża qlub oħra biex iwettaq kompiti tas-sistema bħal I/O asinkroniku, jikteb fil-fajls, jew jagħmel sejħiet tan-netwerk. Għal applikazzjonijiet li jeħtieġu li jesegwixxu l-handlers tagħhom b'mod parallel, pereżempju, biex jirrendu animazzjoni fl-interface, huwa possibbli li jitniedu blokki separati ta 'kodiċi (iżolati), iżolati minn xulxin u esegwiti fuq qlub tas-CPU oħra simultanjament mal-ħajt tal-applikazzjoni prinċipali . Biex tipproteġi kontra l-iżbalji li jinqalgħu meta l-eżekuzzjoni simultanja tal-kodiċi taħdem mal-istess sett ta 'data, il-kondiviżjoni ta' oġġetti mutevoli fi blokki iżolati differenti hija pprojbita, u jintuża mudell li jgħaddi messaġġi għall-interazzjoni bejn il-handlers.

    Dart 2.15 jintroduċi kunċett ġdid - gruppi ta 'blokki iżolati (gruppi iżolati), li jippermettilek torganizza aċċess kondiviż għal diversi strutturi ta' data interna fi blokki iżolati li huma parti mill-istess grupp, li jistgħu jnaqqsu b'mod sinifikanti l-overhead meta jinteraġixxu bejn handlers fi grupp. . Pereżempju, it-tnedija ta 'blokka iżolata addizzjonali fi grupp eżistenti hija 100 darba aktar mgħaġġla u teħtieġ 10-100 darba inqas memorja mit-tnedija ta' blokka iżolata separata, minħabba l-eliminazzjoni tal-ħtieġa li jiġu inizjalizzati l-istrutturi tad-dejta tal-programm.

    Minkejja l-fatt li l-blokki iżolati fi grupp għadhom jipprojbixxu l-aċċess kondiviż għal oġġetti mutevoli, il-gruppi jużaw memorja tal-borġ kondiviża, li tista 'tħaffef b'mod sinifikanti t-trasferiment ta' oġġetti minn blokka waħda għal oħra mingħajr il-ħtieġa li jwettqu operazzjonijiet ta 'kopja intensivi fir-riżorsi. Il-verżjoni l-ġdida tippermetti wkoll li tgħaddi r-riżultat tal-handler meta ssejjaħ Isolate.exit() biex tittrasferixxi d-data lill-ġenitur iżolat blokk mingħajr operazzjonijiet ta 'ikkupjar. Barra minn hekk, il-mekkaniżmu tat-trażmissjoni tal-messaġġi ġie ottimizzat - messaġġi żgħar u medji issa huma pproċessati madwar 8 darbiet aktar malajr. Oġġetti li jistgħu jiġu mgħoddija bejn iżolati bl-użu tas-sejħa SendPort.send() jinkludu xi tipi ta 'funzjonijiet, għeluq, u traċċi ta' munzell.

  • Fl-għodod għall-ħolqien ta 'pointers għal funzjonijiet individwali f'oġġetti oħra (tear-off), tneħħew restrizzjonijiet fuq il-ħolqien ta' indikaturi simili fil-kodiċi tal-kostruttur, li jistgħu jkunu utli meta jinbnew interfaces ibbażati fuq il-librerija Flutter. Pereżempju, biex toħloq widget tal-Kolonna li jinkludi widgets tat-Test multipli, tista' ssejjaħ ".map()" u tgħaddi indikaturi lill-kostruttur Text.new tal-oġġett Test: klassi FruitWidget tests StatessWidget { @override Widget build (kuntest BuildContext) { ritorn Kolonna (tfal: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Il-possibbiltajiet assoċjati mal-użu tal-indikaturi tal-funzjoni ġew estiżi. Miżjud il-ħila li tuża metodi ġeneriċi u pointers tal-funzjoni biex toħloq metodu u pointer mhux ġeneriċi: T id (Valur T) => valur; var intId = id ; // permess fil-verżjoni 2.15 minflok "int Function(int) intId = id;" const fo = id; // pointer għall-id tal-funzjoni. const c1 = fo ;
  • Il-librerija dart:core tejbet l-appoġġ għall-enums, pereżempju, issa tista' toħroġ valur ta' string minn kull valur enum billi tuża l-metodu ".name", agħżel valuri bl-isem, jew tqabbel pari ta' valuri: enum MyEnum { one , tnejn, tlieta } void main() { print(MyEnum.one.name); // "wieħed" se jiġi stampat. print(MyEnum.values.byName('two') == MyEnum.two); // "veru" se jiġi stampat. mappa finali = MyEnum.values.asNameMap (); print(mappa['tlieta'] == MyEnum.three); // "veru". }
  • Ġiet implimentata teknika ta’ kompressjoni ta’ pointer li tippermetti l-użu ta’ rappreżentazzjoni aktar kompatta ta’ pointers f’ambjenti ta’ 64 bit jekk spazju ta’ indirizzi ta’ 32 bit ikun biżżejjed għall-indirizzar (mhux aktar minn 4 GB ta’ memorja jintużaw). It-testijiet wrew li tali ottimizzazzjoni tagħmilha possibbli li jitnaqqas id-daqs tal-borġ b'madwar 10%. Fil-Flutter SDK, il-mod il-ġdid huwa diġà attivat għal Android b'mod awtomatiku, u huwa ppjanat li jkun attivat għall-iOS f'rilaxx futur.
  • Id-Dart SDK jinkludi għodod għad-debugging u l-analiżi tal-prestazzjoni (DevTools), li qabel kienu fornuti f'pakkett separat.
  • Ġew miżjuda għodod mal-kmand "dart pub" u r-repożitorji tal-pakkett pub.dev biex issegwi l-pubblikazzjoni aċċidentali ta 'informazzjoni kunfidenzjali, pereżempju, li jħallu kredenzjali għal sistemi ta' integrazzjoni kontinwa u ambjenti sħab ġewwa l-pakkett. Jekk jinstabu tali tnixxijiet, l-eżekuzzjoni tal-kmand "dart pub publish" tiġi interrotta b'messaġġ ta 'żball. Jekk kien hemm pożittiv falz, huwa possibbli li jinqabeż il-kontroll permezz ta 'lista bajda.
  • L-abbiltà li tirrevoka verżjoni diġà ppubblikata ta 'pakkett ġiet miżjuda mar-repożitorju pub.dev, pereżempju, jekk jiġu skoperti żbalji perikolużi jew vulnerabbiltajiet. Preċedentement, għal korrezzjonijiet bħal dawn, il-prattika kienet li tiġi ppubblikata verżjoni korrettiva, iżda f'xi sitwazzjonijiet huwa meħtieġ li tiġi kkanċellata r-rilaxx eżistenti u twaqqaf b'mod urġenti t-tqassim ulterjuri tagħha (per eżempju, jekk il-korrezzjoni għadha mhix lesta jew jekk tkun ġiet rilaxxata sħiħa). ippubblikata bi żball minflok verżjoni tat-test). Wara r-revoka, il-pakkett m'għadux identifikat fil-kmandi "pub get" u "pub upgrade", u fuq sistemi li diġà stallawh, tinħareġ twissija speċjali ladarba li jmiss "pub get" tiġi eżegwita.
  • Protezzjoni miżjuda kontra vulnerabbiltà (CVE-2021-22567) ikkawżata mill-użu ta’ karattri unicode fil-kodiċi li jibdlu l-ordni tal-wiri.
  • Irranġa vulnerabbiltà (CVE-2021-22568) li tippermettilek tippersona utent ieħor ta' pub.dev meta tippubblika pakketti lil server ta' parti terza li jaċċetta tokens ta' aċċess pub.dev oauth2. Per eżempju, il-vulnerabbiltà tista 'tintuża biex tattakka servers ta' pakketti interni u korporattivi. L-iżviluppaturi li jospitaw biss pakketti fuq pub.dev mhumiex affettwati minn din il-kwistjoni.

Fl-istess ħin, ġie ppreżentat rilaxx sinifikanti tal-qafas tal-interface tal-utent Flutter 2.8, li huwa meqjus bħala alternattiva għal React Native u jippermetti, ibbażat fuq bażi ta 'kodiċi waħda, li jirrilaxxa applikazzjonijiet għall-iOS, Android, Windows, macOS u pjattaformi Linux, kif ukoll joħolqu applikazzjonijiet biex jaħdmu fil-browsers. Qoxra tad-dwana għas-sistema operattiva tal-mikrokernel Fuchsia żviluppata minn Google hija mibnija fuq il-bażi ta 'Flutter. Huwa nnutat li matul l-aħħar sitt xhur, in-numru ta 'applikazzjonijiet Flutter 2 fil-Google Play Store żdied minn 200 elf għal 375 elf, i.e. kważi darbtejn.

Il-parti prinċipali tal-kodiċi Flutter hija implimentata fil-lingwa Dart, u l-magna runtime għall-eżekuzzjoni tal-applikazzjonijiet hija miktuba f'C++. Meta tiżviluppa applikazzjonijiet, minbarra l-lingwa nattiva tad-Dart ta 'Flutter, tista' tuża l-interface tal-Funzjoni Barranija Dart biex issejjaħ kodiċi C/C++. Prestazzjoni ta 'eżekuzzjoni għolja tinkiseb billi jiġu kkompilati applikazzjonijiet għal kodiċi nattiv għal pjattaformi fil-mira. F'dan il-każ, il-programm m'għandux għalfejn jiġi kkompilat mill-ġdid wara kull bidla - Dart jipprovdi mod ta 'rikarigu sħun li jippermettilek li tagħmel bidliet għal applikazzjoni li taħdem u immedjatament tevalwa r-riżultat.

Fost il-bidliet fir-rilaxx il-ġdid ta 'Flutter, hija nnutata l-ottimizzazzjoni tal-veloċità tat-tnedija u l-konsum tal-memorja fuq apparat mobbli. Huwa aktar faċli li tikkonnettja apps ma' servizzi backend bħal Firebase u Google Cloud. Għodod għall-integrazzjoni ma 'Google Ads ġew stabbilizzati. L-appoġġ għall-kameras u l-plugins tal-web ġie mtejjeb b'mod sinifikanti. Ġew proposti għodod ġodda biex jissimplifikaw l-iżvilupp, pereżempju, ġie miżjud widget għall-awtentikazzjoni bl-użu ta 'Firebase. Il-magna Flame, iddisinjata għall-iżvilupp ta' logħob 2D bl-użu ta' Flutter, ġiet aġġornata.

Sors: opennet.ru

Żid kumment