Programmeringsspråket Dart 2.15 og Flutter 2.8-rammeverket er tilgjengelig

Google har publisert utgivelsen av programmeringsspråket Dart 2.15, som fortsetter utviklingen av en radikalt redesignet gren av Dart 2, som skiller seg fra originalversjonen av Dart-språket ved bruk av sterk statisk skriving (typer kan utledes automatisk, så å spesifisere typer er ikke nødvendig, men dynamisk skriving brukes ikke lenger, og først beregnet blir typen tildelt variabelen og streng typekontroll blir deretter brukt).

Funksjoner i Dart-språket:

  • Kjent og lett å lære syntaks, naturlig for JavaScript-, C- og Java-programmerere.
  • Sikrer rask lansering og høy ytelse for alle moderne nettlesere og ulike typer miljøer, fra bærbare enheter til kraftige servere.
  • Evnen til å definere klasser og grensesnitt som tillater innkapsling og gjenbruk av eksisterende metoder og data.
  • Å spesifisere typer gjør det lettere å feilsøke og identifisere feil, gjør koden klarere og mer lesbar, og forenkler modifikasjon og analyse av tredjepartsutviklere.
  • Støttede typer inkluderer: ulike typer hasher, matriser og lister, køer, numeriske og strengtyper, typer for å bestemme dato og klokkeslett, regulære uttrykk (RegExp). Det er mulig å lage dine egne typer.
  • For å organisere parallell utførelse foreslås det å bruke klasser med isolate-attributtet, hvis kode kjøres helt i isolert rom i et eget minneområde, og samhandler med hovedprosessen ved å sende meldinger.
  • Støtte for bruk av biblioteker som forenkler støtte og feilsøking av store nettprosjekter. Tredjeparts implementeringer av funksjoner kan inkluderes i form av delte biblioteker. Applikasjoner kan deles inn i deler og overlate utviklingen av hver del til et eget team av programmerere.
  • Et sett med ferdige verktøy for å støtte utvikling i Dart-språket, inkludert implementering av dynamisk utvikling og feilsøkingsverktøy med kodekorreksjon i farten ("rediger-og-fortsett").
  • For å forenkle utviklingen i Dart-språket, kommer den med en SDK, en pakkebehandlingspub, en statisk kodeanalysator dart_analyzer, et sett med biblioteker, et integrert utviklingsmiljø DartPad og Dart-aktiverte plugins for IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 og Vim.
  • Ytterligere pakker med biblioteker og verktøy distribueres gjennom publageret, som har omtrent 22 tusen pakker.

Store endringer i Dart 2.15-utgivelsen:

  • Gir verktøy for rask parallell utførelse av oppgaver med isolering av behandlere. På flerkjernesystemer kjører Dart-runtime som standard applikasjonskode på én CPU-kjerne og bruker andre kjerner til å utføre systemoppgaver som asynkron I/O, skriving til filer eller foreta nettverksanrop. For applikasjoner som trenger å kjøre sine behandlere parallelt, for eksempel for å gjengi animasjon i grensesnittet, er det mulig å starte separate kodeblokker (isolert), isolert fra hverandre og utført på andre CPU-kjerner samtidig med hovedapplikasjonstråden . For å beskytte mot feil som oppstår ved samtidig kjøring av kode som arbeider med samme sett med data, er deling av mutable objekter i forskjellige isolerte blokker forbudt, og en meldingsoverførselsmodell brukes for interaksjon mellom behandlere.

    Dart 2.15 introduserer et nytt konsept - isolerte blokkgrupper (isolerte grupper), som lar deg organisere delt tilgang til ulike interne datastrukturer i isolerte blokker som er en del av samme gruppe, noe som kan redusere overhead betydelig når du samhandler mellom behandlere i en gruppe . For eksempel er lansering av en ekstra isolatblokk i en eksisterende gruppe 100 ganger raskere og krever 10-100 ganger mindre minne enn å starte en separat isolatblokk, på grunn av eliminering av behovet for å initialisere programdatastrukturer.

    Til tross for at isolerte blokker i en gruppe fortsatt forbyr delt tilgang til mutable objekter, bruker gruppene et delt heap-minne, som kan øke hastigheten på overføringen av objekter betydelig fra en blokk til en annen uten å måtte utføre ressurskrevende kopieringsoperasjoner. Den nye versjonen lar deg også sende resultatet av behandleren når du kaller Isolate.exit() for å overføre data til den overordnede isolasjonsblokken uten kopieringsoperasjoner. I tillegg har meldingsoverføringsmekanismen blitt optimalisert - små og mellomstore meldinger behandles nå omtrent 8 ganger raskere. Objekter som kan sendes mellom isolater ved å bruke SendPort.send()-kallet inkluderer noen typer funksjoner, lukkinger og stabelspor.

  • I verktøyene for å lage pekere til individuelle funksjoner i andre objekter (tear-off) er restriksjoner på å lage lignende pekere i konstruktørkode fjernet, noe som kan være nyttig når man bygger grensesnitt basert på Flutter-biblioteket. For å lage en Column-widget som inkluderer flere tekst-widgeter, kan du for eksempel kalle ".map()" og sende pekere til Text.new-konstruktøren til Text-objektet: klasse FruitWidget utvider StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Mulighetene knyttet til bruk av funksjonspekere er utvidet. Lagt til muligheten til å bruke generiske metoder og funksjonspekere for å lage en ikke-generisk metode og peker: T id (T-verdi) => verdi; var intId = id ; // tillatt i versjon 2.15 i stedet for "int Function(int) intId = id;" const fo = id; // peker til funksjons-id. const c1 = fo ;
  • Dart:core-biblioteket har forbedret støtte for enums, for eksempel kan du nå skrive ut en strengverdi fra hver enum-verdi ved å bruke ".name"-metoden, velge verdier etter navn eller matche verdipar: enum MyEnum { one , to, tre } void main() { print(MyEnum.one.name); // "en" vil bli skrevet ut. print(MyEnum.values.byName('to') == MyEnum.two); // "true" vil bli skrevet ut. endelig kart = MyEnum.values.asNameMap(); print(map['tre'] == MyEnum.three); // "sant". }
  • En pekerkomprimeringsteknikk er implementert som tillater bruk av en mer kompakt representasjon av pekere i 64-biters miljøer hvis en 32-bits adresseplass er tilstrekkelig for adressering (ikke mer enn 4 GB minne brukes). Tester har vist at slik optimalisering gjør det mulig å redusere haugstørrelsen med omtrent 10 %. I Flutter SDK er den nye modusen allerede aktivert for Android som standard, og er planlagt aktivert for iOS i en fremtidig utgivelse.
  • Dart SDK inkluderer verktøy for feilsøking og ytelsesanalyse (DevTools), som tidligere ble levert i en egen pakke.
  • Verktøy er lagt til "dart pub"-kommandoen og pub.dev-pakkelagrene for å spore utilsiktet publisering av konfidensiell informasjon, for eksempel ved å legge igjen legitimasjon for kontinuerlige integrasjonssystemer og skymiljøer inne i pakken. Hvis slike lekkasjer oppdages, vil kjøringen av "dart pub publish"-kommandoen bli avbrutt med en feilmelding. Hvis det var en falsk positiv, er det mulig å omgå sjekken gjennom en hvit liste.
  • Muligheten til å tilbakekalle en allerede publisert versjon av en pakke er lagt til pub.dev-depotet, for eksempel hvis farlige feil eller sårbarheter blir oppdaget. Tidligere, for slike rettelser, var praksisen å publisere en korrigerende versjon, men i noen situasjoner er det nødvendig å kansellere den eksisterende utgivelsen og snarest stoppe den videre distribusjonen (for eksempel hvis rettelsen ennå ikke er klar eller hvis en fullstendig utgivelse var publisert ved en feil i stedet for en testversjon). Etter tilbakekalling identifiseres ikke pakken lenger i kommandoene "pub get" og "pub upgrade", og på systemer som allerede har installert den, utstedes en spesiell advarsel neste gang "pub get" kjøres.
  • Lagt til beskyttelse mot en sårbarhet (CVE-2021-22567) forårsaket av bruk av unicode-tegn i koden som endrer visningsrekkefølgen.
  • Rettet en sårbarhet (CVE-2021-22568) som lar deg utgi deg for en annen pub.dev-bruker når du publiserer pakker til en tredjepartsserver som godtar pub.dev oauth2-tilgangstokener. For eksempel kan sårbarheten brukes til å angripe interne og bedriftspakkeservere. Utviklere som bare er vert for pakker på pub.dev er ikke berørt av dette problemet.

Samtidig ble det presentert en betydelig utgivelse av rammeverket for brukergrensesnittet Flutter 2.8, som anses som et alternativ til React Native og lar, basert på en enkelt kodebase, gi ut applikasjoner for iOS, Android, Windows, macOS og Linux-plattformer, samt lage applikasjoner for å kjøre i nettlesere. Et tilpasset skall for Fuchsia-mikrokjerneoperativsystemet utviklet av Google er bygget på grunnlag av Flutter. Det bemerkes at i løpet av de siste seks månedene har antallet Flutter 2-applikasjoner i Google Play Store økt fra 200 tusen til 375 tusen, dvs. nesten to ganger.

Hoveddelen av Flutter-koden er implementert i Dart-språket, og kjøretidsmotoren for utføring av applikasjoner er skrevet i C++. Når du utvikler applikasjoner, i tillegg til Flutters opprinnelige Dart-språk, kan du bruke Dart Foreign Function-grensesnittet til å kalle C/C++-kode. Høy utførelsesytelse oppnås ved å kompilere applikasjoner til innebygd kode for målplattformer. I dette tilfellet trenger ikke programmet å bli kompilert på nytt etter hver endring - Dart gir en hot reload-modus som lar deg gjøre endringer i en kjørende applikasjon og umiddelbart evaluere resultatet.

Blant endringene i den nye utgivelsen av Flutter, er optimalisering av lanseringshastighet og minneforbruk på mobile enheter notert. Det er enklere å koble apper til backend-tjenester som Firebase og Google Cloud. Verktøy for integrasjon med Google Ads er stabilisert. Støtte for kameraer og nettplugins har blitt betydelig forbedret. Nye verktøy har blitt foreslått for å forenkle utviklingen, for eksempel er det lagt til en widget for autentisering ved bruk av Firebase. Flame-motoren, designet for å utvikle 2D-spill med Flutter, har blitt oppdatert.

Kilde: opennet.ru

Legg til en kommentar