Dart 2.15-programmeertaal en Flutter 2.8-raamwerk beskikbaar

Google het 'n vrystelling van die Dart 2.15-programmeertaal gepubliseer, wat voortgaan met die ontwikkeling van 'n radikaal herontwerpte Dart 2-tak, wat verskil van die oorspronklike weergawe van die Dart-taal deur sterk statiese tik te gebruik (tipes kan outomaties afgelei word, dus is die spesifiseer van tipes nie nodig nie, maar dinamiese tik word nie meer gebruik nie en is aanvanklik bereken die tipe word aan die veranderlike toegeken en dan word streng tipe kontrolering toegepas).

Dart taal kenmerke:

  • 'n Bekende en maklik om te leer sintaksis wat natuurlik is vir JavaScript-, C- en Java-programmeerders.
  • Verskaf vinnige opstart en hoë werkverrigting vir alle moderne webblaaiers en verskillende soorte omgewings, van draagbare toestelle tot kragtige bedieners.
  • Die vermoë om klasse en koppelvlakke te definieer om inkapseling moontlik te maak en bestaande metodes en data te hergebruik.
  • Deur tipes te spesifiseer, maak dit makliker om foute te ontfout en op te spoor, maak die kode duideliker en meer leesbaar, en maak dit makliker vir derdeparty-ontwikkelaars om dit te verfyn en te ontleed.
  • Onder die ondersteunde tipes: verskeie tipes hashes, skikkings en lyste, toue, numeriese en string tipes, datum en tyd tipes, gereelde uitdrukkings (RegExp). Dit is moontlik om jou eie tipes te skep.
  • Om parallelle uitvoering te organiseer, word voorgestel om klasse te gebruik met die isolate-kenmerk, waarvan die kode geheel en al in 'n geïsoleerde ruimte in 'n aparte geheue-area uitgevoer word, in wisselwerking met die hoofproses deur boodskappe te stuur.
  • Ondersteuning vir die gebruik van biblioteke wat die ondersteuning en ontfouting van groot webprojekte vereenvoudig. Derdeparty-implementerings van funksies kan ingesluit word as gedeelde biblioteke. Toepassings kan in dele opgebreek word en die ontwikkeling van elke deel kan aan 'n aparte span programmeerders toegewys word.
  • 'n Stel gereedgemaakte nutsmiddels om ontwikkeling in die Dart-taal te ondersteun, insluitend die implementering van dinamiese ontwikkelingsinstrumente en ontfouting met kodekorreksie onmiddellik ("wysig-en-gaan voort").
  • 'n SDK, 'n kroegpakketbestuurder, 'n dart_analyzer statiese kode-ontleder, 'n stel biblioteke, 'n DartPad IDE en Dart-geaktiveerde inproppe vir IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 en Vim word verskaf om Dart-ontwikkeling te vereenvoudig.
  • Bykomende pakkette met biblioteke en hulpmiddels word versprei deur die kroegbewaarplek, wat ongeveer 22 duisend pakkette het.

Sleutelveranderinge in die vrystelling van Dart 2.15:

  • Verskaf gereedskap vir vinnige parallelle uitvoering van take met isolasie van hanteerders. Op multikernstelsels laat die Dart-looptyd by verstek toepassingskode op een SVE-kern loop en gebruik ander kerne om stelseltake uit te voer soos asinchroniese I/O, skryf na lêers of netwerkoproepe. Vir toepassings wat hul hanteerders parallel moet uitvoer, byvoorbeeld om animasie in die koppelvlak weer te gee, is dit moontlik om afsonderlike blokke kode te begin (isoleer), geïsoleer van mekaar en gelyktydig met die hooftoepassingsdraad op ander SVE-kerne uitgevoer word . Om te beskerm teen foute wat ontstaan ​​wanneer die gelyktydige uitvoering van kode met dieselfde stel data werk, word die deel van veranderlike voorwerpe in verskillende geïsoleerde blokke verbied, en 'n boodskap-oordrag model word gebruik vir interaksie tussen hanteerders.

    Dart 2.15 stel 'n nuwe konsep bekend - geïsoleerde blokgroepe (isoleergroepe), wat jou toelaat om gedeelde toegang tot verskeie interne datastrukture te organiseer in geïsoleerde blokke wat deel is van dieselfde groep, wat die bokoste aansienlik kan verminder wanneer interaksie tussen hanteerders in 'n groep is. . Byvoorbeeld, die bekendstelling van 'n bykomende isoleerblok in 'n bestaande groep is 100 keer vinniger en vereis 10-100 keer minder geheue as die bekendstelling van 'n aparte isoleerblok, as gevolg van die uitskakeling van die behoefte om programdatastrukture te inisialiseer.

    Ten spyte van die feit dat geïsoleerde blokke in 'n groep steeds gedeelde toegang tot veranderlike voorwerpe verbied, gebruik die groepe 'n gedeelde hoopgeheue, wat die oordrag van voorwerpe van een blok na 'n ander aansienlik kan bespoedig sonder dat dit nodig is om hulpbron-intensiewe kopieerbewerkings uit te voer. Die nuwe weergawe laat jou ook toe om die resultaat van die hanteerder deur te gee wanneer Isolate.exit() geroep word om data na die ouer-isolaatblok oor te dra sonder om bewerkings te kopieer. Boonop is die boodskapoordragmeganisme geoptimaliseer - klein en medium boodskappe word nou ongeveer 8 keer vinniger verwerk. Voorwerpe wat tussen isolate deurgegee kan word deur die SendPort.send()-oproep te gebruik, sluit sekere tipes funksies, sluitings en stapelspore in.

  • In die gereedskap vir die skep van wysers na individuele funksies in ander voorwerpe (afskeur), is beperkings op die skep van soortgelyke wysers in konstruktorkode verwyder, wat nuttig kan wees wanneer koppelvlakke gebou word gebaseer op die Flutter-biblioteek. Byvoorbeeld, om 'n Kolom-legstuk te skep wat veelvuldige tekslegstukke insluit, kan jy ".map()" noem en wysers na die Text.new-konstruktor van die Text-objek deurgee: klas FruitWidget brei StatelessWidget uit { @override Widget build(BuildContext context) { return Column( kinders: ['Apple', 'Oranje'].map(Text.new).toList()); } }
  • Die moontlikhede verbonde aan die gebruik van funksiewysers is uitgebrei. Bygevoeg die vermoë om generiese metodes en funksiewysers te gebruik om 'n nie-generiese metode en wyser te skep: T id (T waarde) => waarde; var intId = id ; // toegelaat in weergawe 2.15 in plaas van "int Function(int) intId = id;" const fo = id; // wyser na funksie-ID. konst c1 = fo ;
  • Die dart:core-biblioteek het verbeterde ondersteuning vir enums, byvoorbeeld, jy kan nou 'n stringwaarde uit elke enum-waarde uitvoer deur die ".name"-metode te gebruik, waardes op naam kies, of pare waardes pas: enum MyEnum { one , twee, drie } void main() { print(MyEnum.one.name); // "een" sal gedruk word. print(MyEnum.values.byName('twee') == MyEnum.two); // "true" sal gedruk word. finale kaart = MyEnum.values.asNameMap(); print(kaart['drie'] == MyEnum.three); // "waar". }
  • 'n Wyserkompressietegniek is geïmplementeer wat die gebruik van 'n meer kompakte voorstelling van wysers in 64-bis-omgewings moontlik maak as 'n 32-bis-adresspasie voldoende is vir adressering (nie meer as 4 GB geheue word gebruik nie). Toetse het getoon dat sulke optimalisering dit moontlik maak om die hoopgrootte met ongeveer 10% te verminder. In die Flutter SDK is die nuwe modus reeds by verstek vir Android geaktiveer, en word beplan om in 'n toekomstige weergawe vir iOS geaktiveer te word.
  • Die Dart SDK bevat gereedskap vir ontfouting en prestasie-analise (DevTools), wat voorheen in 'n aparte pakket voorsien is.
  • Gereedskap is by die "dart pub"-opdrag en die pub.dev-pakketbewaarplekke gevoeg om die toevallige publikasie van vertroulike inligting op te spoor, byvoorbeeld deur geloofsbriewe vir deurlopende integrasiestelsels en wolkomgewings binne die pakket te laat. As sulke lekkasies opgespoor word, sal die uitvoering van die "dart pub publish"-opdrag onderbreek word met 'n foutboodskap. As daar 'n vals positief was, is dit moontlik om die tjek deur 'n witlys te omseil.
  • Die vermoë om 'n reeds gepubliseerde weergawe van 'n pakket te herroep, is byvoorbeeld by die pub.dev-bewaarplek gevoeg as gevaarlike foute of kwesbaarhede ontdek word. Voorheen, vir sulke regstellings, was die praktyk om 'n regstellende weergawe te publiseer, maar in sommige situasies is dit nodig om die bestaande vrystelling te kanselleer en die verdere verspreiding daarvan dringend te stop (byvoorbeeld, as die regstelling nog nie gereed is nie of as 'n volledige vrystelling was per ongeluk gepubliseer in plaas van 'n toetsweergawe). Na herroeping word die pakket nie meer in die "pub get" en "pub upgrade"-opdragte geïdentifiseer nie, en op stelsels wat dit reeds geïnstalleer het, word 'n spesiale waarskuwing uitgereik die volgende keer wanneer "pub get" uitgevoer word.
  • Bygevoeg beskerming teen 'n kwesbaarheid (CVE-2021-22567) wat veroorsaak word deur die gebruik van unicode-karakters in die kode wat die vertoonvolgorde verander.
  • Het 'n kwesbaarheid (CVE-2021-22568) reggestel wat jou toelaat om 'n ander pub.dev-gebruiker na te doen wanneer jy pakkette publiseer na 'n derdeparty-bediener wat pub.dev oauth2-toegangtokens aanvaar. Die kwesbaarheid kan byvoorbeeld gebruik word om interne en korporatiewe pakketbedieners aan te val. Ontwikkelaars wat net pakkette op pub.dev aanbied, word nie deur hierdie probleem geraak nie.

Terselfdertyd is 'n beduidende vrystelling van die gebruikerskoppelvlakraamwerk Flutter 2.8 aangebied, wat beskou word as 'n alternatief vir React Native en dit moontlik maak om, gebaseer op 'n enkele kodebasis, toepassings vir die iOS, Android, Windows, macOS en Linux-platforms, sowel as om toepassings te skep om in blaaiers uit te voer. 'n Pasgemaakte dop vir die Fuchsia-mikrokern-bedryfstelsel wat deur Google ontwikkel is, is gebou op die basis van Flutter. Daar word kennis geneem dat die aantal Flutter 2-toepassings in die Google Play Winkel die afgelope ses maande van 200 duisend tot 375 duisend toegeneem het, d.w.s. amper twee keer.

Die grootste deel van die Flutter-kode word in Dart geïmplementeer, en die looptyd-enjin vir die loop van toepassings is in C++ geskryf. Wanneer jy toepassings ontwikkel, kan jy benewens Flutter se moedertaal Dart-taal die Dart Foreign Function-koppelvlak gebruik om C/C++-kode te bel. Hoë looptydprestasie word behaal deur toepassings saam te stel na inheemse kode vir teikenplatforms. Terselfdertyd hoef die program nie na elke verandering weer saamgestel te word nie - Dart bied 'n warm herlaaimodus waarmee jy veranderinge aan 'n lopende toepassing kan maak en die resultaat onmiddellik kan evalueer.

Onder die veranderinge in die nuwe weergawe van Flutter, word die optimalisering van bekendstellingspoed en geheueverbruik op mobiele toestelle opgemerk. Dit is makliker om programme aan backend-dienste soos Firebase en Google Cloud te koppel. Gereedskap vir integrasie met Google Ads is gestabiliseer. Ondersteuning vir kameras en webproppe is aansienlik verbeter. Nuwe gereedskap is voorgestel om ontwikkeling te vereenvoudig, byvoorbeeld, 'n legstuk is bygevoeg vir verifikasie met Firebase. Die Flame-enjin, ontwerp vir die ontwikkeling van 2D-speletjies met Flutter, is opgedateer.

Bron: opennet.ru

Voeg 'n opmerking