Dart 2.15 programlingvo kaj Flutter 2.8 kadro haveblaj

Guglo publikigis la eldonon de la programlingvo Dart 2.15, kiu daŭrigas la evoluon de radikale restrukturita branĉo de Dart 2, kiu diferencas de la originala versio de la Dart-lingvo per la uzo de forta senmova tajpado (tipoj povas esti konkludeblaj aŭtomate, do specifi tipojn ne estas necesa, sed dinamika tajpado ne plu estas uzata kaj komence komputita la tipo estas atribuita al la variablo kaj strikta tipkontrolo estas poste aplikata).

Karakterizaĵoj de la Dart-lingvo:

  • Konata kaj facile lernebla sintakso, natura por JavaScript, C kaj Java programistoj.
  • Certigante rapidan lanĉon kaj altan rendimenton por ĉiuj modernaj retumiloj kaj diversaj specoj de medioj, de porteblaj aparatoj ĝis potencaj serviloj.
  • La kapablo difini klasojn kaj interfacojn kiuj permesas enkapsuligon kaj reuzon de ekzistantaj metodoj kaj datenoj.
  • Specifado de tipoj faciligas sencimigi kaj identigi erarojn, igas la kodon pli klara kaj pli legebla, kaj simpligas ĝian modifon kaj analizon de triaj programistoj.
  • Subtenataj tipoj inkluzivas: diversajn tipojn de hashoj, tabeloj kaj listoj, vostoj, nombraj kaj ĉenoj, tipoj por determini daton kaj horon, regulajn esprimojn (RegExp). Eblas krei viajn proprajn tipojn.
  • Por organizi paralelan ekzekuton, oni proponas uzi klasojn kun la izolita atributo, kies kodo estas ekzekutita tute en izolita spaco en aparta memorareo, interagante kun la ĉefa procezo sendante mesaĝojn.
  • Subteno por la uzo de bibliotekoj, kiuj simpligas la subtenon kaj elpurigon de grandaj retprojektoj. Triapartaj efektivigoj de funkcioj povas esti inkluditaj en la formo de komunaj bibliotekoj. Aplikoj povas esti dividitaj en partojn kaj konfidi la disvolviĝon de ĉiu parto al aparta teamo de programistoj.
  • Aro da pretaj iloj por subteni evoluon en la Dart-lingvo, inkluzive de la efektivigo de dinamika evoluo kaj sencimigaj iloj kun koda korekto sur la flugo ("redaktu-kaj-daŭrigi").
  • Por simpligi evoluon en la Dart-lingvo, ĝi venas kun SDK, pakaĵmanaĝera drinkejo, senmova kodanalizilo dart_analyzer, aro da bibliotekoj, integra evolumedio DartPad kaj Dart-ebligitaj kromaĵoj por IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 kaj Vim.
  • Pliaj pakaĵoj kun bibliotekoj kaj utilecoj estas distribuitaj tra la drinkeja deponejo, kiu havas ĉirkaŭ 22 mil pakojn.

Gravaj ŝanĝoj en Dart 2.15-eldono:

  • Provizas ilojn por rapida paralela plenumado de taskoj kun izolado de prizorgantoj. Sur plurkernaj sistemoj, la Dart rultempo defaŭlte prizorgas aplikiĝkodon sur unu CPU-kerno kaj uzas aliajn kernojn por plenumi sistemajn taskojn kiel ekzemple nesinkrona I/O, skribi al dosieroj aŭ fari retvokojn. Por aplikaĵoj, kiuj bezonas paralele ekzekuti siajn prizorgilojn, ekzemple por bildigi animacion en la interfaco, eblas lanĉi apartajn kodblokojn (izoli), izolitajn unu de la alia kaj ekzekutitajn sur aliaj CPU-kernoj samtempe kun la ĉefa aplika fadeno. . Por protekti kontraŭ eraroj kiuj ekestas kiam samtempa ekzekuto de kodo laboranta kun la sama aro de datenoj, la kunhavigo de ŝanĝeblaj objektoj en malsamaj izolaj blokoj estas malpermesita, kaj mesaĝ-pasanta modelo estas utiligita por interagado inter prizorgantoj.

    Dart 2.15 enkondukas novan koncepton - izolitaj blokgrupoj (izolitaj grupoj), kiu ebligas al vi organizi komunan aliron al diversaj internaj datumstrukturoj en izolitaj blokoj kiuj estas parto de la sama grupo, kiuj povas signife redukti superkozon dum interagado inter pritraktantoj en grupo. . Ekzemple, lanĉi aldonan izolitan blokon en ekzistanta grupo estas 100 fojojn pli rapida kaj postulas 10-100 fojojn malpli da memoro ol lanĉado de aparta izolita bloko, pro la elimino de la bezono pravalorigi programajn datumstrukturojn.

    Malgraŭ tio, ke izolitaj blokoj en grupo ankoraŭ malpermesas komunan aliron al ŝanĝeblaj objektoj, la grupoj uzas komunan amasmemoron, kiu povas signife akceli la translokigon de objektoj de unu bloko al alia sen la bezono fari rimedintensajn kopioperaciojn. La nova versio ankaŭ ebligas al vi pasi la rezulton de la prizorganto kiam vi vokas Isolate.exit() por transdoni datumojn al la gepatra izolita bloko sen kopiado de operacioj. Krome, la mekanismo de transmisio de mesaĝoj estis optimumigita - malgrandaj kaj mezaj mesaĝoj nun estas prilaboritaj proksimume 8 fojojn pli rapide. Objektoj kiuj povas esti pasitaj inter izolitoj uzante la SendPort.send()-vokon inkluzivas iujn specojn de funkcioj, fermoj kaj stakspuroj.

  • En la iloj por krei montrilojn al individuaj funkcioj en aliaj objektoj (ŝiriĝo), limigoj pri kreado de similaj montriloj en konstrukodo estis forigitaj, kiuj povas esti utilaj dum konstruado de interfacoj bazitaj sur la Flutter-biblioteko. Ekzemple, por krei Column-fenestraĵon kiu inkluzivas plurajn Tekstajn fenestraĵojn, vi povas voki ".map()" kaj pasi montrilojn al la Text.new konstrukciisto de la Teksta objekto: class FruitWidget extends StatessWidget { @override Widget build(BuildContext kunteksto) { return Kolumno( infanoj: ['Pomo', 'Oranĝo'].mapo(Teksto.nova).toListo()); }}
  • La eblecoj asociitaj kun la uzo de funkciomontriloj estis vastigitaj. Aldonita la kapablo uzi ĝeneralajn metodojn kaj funkciomontrilojn por krei ne-generan metodon kaj montrilon: T id (T valoro) => valoro; var intId = id ; // permesite en versio 2.15 anstataŭ "int Funkcio(int) intId = id;" const fo = id; // montrilo al funkcio id. const c1 = fo ;
  • La dart:core-biblioteko plibonigis subtenon por enumoj, ekzemple, vi nun povas eligi ĉenvaloron de ĉiu enumvaloro uzante la metodon ".name", elekti valorojn laŭnome aŭ kongrui kun paroj de valoroj: enum MyEnum { unu , du, tri } void ĉef() { print(MiaNom.unu.nomo); // "unu" estos presita. print(MiaNom.valoroj.byName('du') == MiaNom.du); // "vera" estos presita. fina mapo = MyEnum.values.asNameMap (); print(mapo['tri'] == Mia Nombro.tri); // "vera". }
  • Montrila kunpremadtekniko estis efektivigita kiu permesas la uzon de pli kompakta reprezentado de montriloj en 64-bitaj medioj se 32-bita adresspaco estas sufiĉa por alparolado (ne pli ol 4 Gb da memoro estas uzita). Testoj montris, ke tia optimumigo ebligas redukti la amasan grandecon je proksimume 10%. En Flutter SDK, la nova reĝimo jam estas ebligita por Android defaŭlte, kaj estas planita esti ebligita por iOS en estonta eldono.
  • La Dart SDK inkluzivas ilojn por senararigado kaj agado-analizo (DevTools), kiuj antaŭe estis liveritaj en aparta pakaĵo.
  • Iloj estis aldonitaj al la komando "dart pub" kaj la pakaĵdeponejoj pub.dev por spuri la hazardan publikigon de konfidencaj informoj, ekzemple, lasante akreditaĵojn por kontinuaj integrigaj sistemoj kaj nubaj medioj ene de la pakaĵo. Se tiaj likoj estas detektitaj, la ekzekuto de la komando "dart pub publish" estos interrompita per erarmesaĝo. Se estis falsa pozitivo, eblas preteriri la ĉekon per blanka listo.
  • La kapablo revoki jam publikigitan version de pako estis aldonita al la deponejo pub.dev, ekzemple, se danĝeraj eraroj aŭ vundeblecoj estas malkovritaj. Antaŭe, por tiaj korektoj, la praktiko estis publikigi korektan version, sed en iuj situacioj necesas nuligi la ekzistantan eldonon kaj urĝe ĉesigi ĝian pluan distribuadon (ekzemple, se la korekto ankoraŭ ne estas preta aŭ se plena eldono estis eldonita erare anstataŭ testa versio). Post revoko, la pakaĵo ne plu estas identigita en la komandoj "pub get" kaj "pub upgrade", kaj ĉe sistemoj kiuj jam instalis ĝin, speciala averto estas eligita la venontan fojon kiam "pub get" estas ekzekutita.
  • Aldonita protekto kontraŭ vundebleco (CVE-2021-22567) kaŭzita de la uzo de unikodaj signoj en la kodo, kiuj ŝanĝas la montran ordon.
  • Korektis vundeblecon (CVE-2021-22568), kiu ebligas al vi parodii alian uzanton de pub.dev dum publikigado de pakaĵoj al triaparta servilo, kiu akceptas pub.dev oauth2-alirĵetonojn. Ekzemple, la vundebleco povus esti uzata por ataki internajn kaj kompaniajn pakservilojn. Programistoj kiuj nur gastigas pakaĵojn ĉe pub.dev ne estas tuŝitaj de ĉi tiu problemo.

Samtempe, estis prezentita grava eldono de la uzantinterfaca kadro Flutter 2.8, kiu estas konsiderata kiel alternativo al React Native kaj permesas, surbaze de ununura kodbazo, liberigi aplikojn por iOS, Android, Vindozo, macOS kaj Linuksaj platformoj, kaj ankaŭ krei aplikojn por funkcii en retumiloj. Propra ŝelo por la Fuchsia mikrokerna operaciumo evoluigita de Guglo estas konstruita surbaze de Flutter. Oni rimarkas, ke dum la pasintaj ses monatoj, la nombro de Flutter 2-aplikoj en la Google Play Store pliiĝis de 200 mil al 375 mil, t.e. preskaŭ dufoje.

La ĉefparto de la Flutter-kodo estas efektivigita en la Dart-lingvo, kaj la rultempa motoro por ekzekuti aplikojn estas skribita en C++. Dum disvolvado de aplikaĵoj, krom la denaska Dart-lingvo de Flutter, vi povas uzi la interfacon de Dart Foreign Function por voki C/C++-kodon. Alta ekzekuta rendimento estas atingita kompilante aplikojn al indiĝena kodo por celplatformoj. En ĉi tiu kazo, la programo ne bezonas esti rekompilita post ĉiu ŝanĝo - Dart provizas varman reŝargan reĝimon, kiu ebligas al vi fari ŝanĝojn al funkcianta aplikaĵo kaj tuj taksi la rezulton.

Inter la ŝanĝoj en la nova eldono de Flutter, oni rimarkas optimumigon de lanĉa rapideco kaj memorkonsumon en porteblaj aparatoj. Estas pli facile konekti programojn al backend servoj kiel Firebase kaj Google Cloud. Iloj por integriĝo kun Google Ads estis stabiligitaj. Subteno por fotiloj kaj retkromaĵoj estis signife plibonigita. Novaj iloj estis proponitaj por simpligi evoluon, ekzemple, fenestraĵo estis aldonita por aŭtentigo uzante Firebase. La Flame-motoro, dizajnita por disvolvi 2D ludojn uzante Flutter, estis ĝisdatigita.

fonto: opennet.ru

Aldoni komenton