Dart 2.15 -ohjelmointikieli ja Flutter 2.8 -kehys saatavilla

Google on julkaissut Dart 2.15 -ohjelmointikielen julkaisun, joka jatkaa radikaalisti uudelleen suunnitellun Dart 2 -haaran kehitystä, joka eroaa Dart-kielen alkuperäisestä versiosta vahvan staattisen kirjoittamisen suhteen (tyypit voidaan päätellä automaattisesti, joten tyyppejä ei tarvita, mutta dynaamista kirjoittamista ei enää käytetä ja alkuperäinen tyyppi määritetään muuttujalle ja sen jälkeen sovelletaan tiukkaa tyyppitarkistusta).

Dart-kielen ominaisuudet:

  • Tuttu ja helposti opittava syntaksi, luonnollinen JavaScript-, C- ja Java-ohjelmoijille.
  • Nopea käynnistys ja korkea suorituskyky kaikille nykyaikaisille verkkoselaimille ja erilaisille ympäristöille kannettavista laitteista tehokkaisiin palvelimiin.
  • Kyky määritellä luokkia ja rajapintoja, jotka mahdollistavat olemassa olevien menetelmien ja tietojen kapseloinnin ja uudelleenkäytön.
  • Tyyppien määrittäminen helpottaa virheenkorjausta ja virheiden tunnistamista, tekee koodista selkeämmän ja luettavamman ja yksinkertaistaa sen muokkaamista ja analysointia kolmannen osapuolen kehittäjien toimesta.
  • Tuettuja tyyppejä ovat: erilaiset tiivisteet, taulukot ja luettelot, jonot, numeeriset ja merkkijonotyypit, tyypit päivämäärän ja kellonajan määrittämiseen, säännölliset lausekkeet (RegExp). On mahdollista luoda omia tyyppejä.
  • Rinnakkaissuorituksen järjestämiseksi ehdotetaan käytettäväksi isolate-attribuutilla varustettuja luokkia, joiden koodi suoritetaan kokonaan eristetyssä tilassa erillisellä muistialueella, vuorovaikutuksessa pääprosessin kanssa lähettämällä viestejä.
  • Tuki kirjastojen käytölle, jotka yksinkertaistavat suurten verkkoprojektien tukea ja virheenkorjausta. Kolmannen osapuolen funktioiden toteutukset voidaan sisällyttää jaettujen kirjastojen muodossa. Sovellukset voidaan jakaa osiin ja antaa kunkin osan kehittäminen erilliselle ohjelmoijatiimille.
  • Joukko valmiita työkaluja tukemaan kehitystä Dart-kielellä, mukaan lukien dynaamisen kehitys- ja virheenkorjaustyökalujen käyttöönotto koodin korjauksella lennossa ("edit-and-continue").
  • Dart-kielen kehityksen yksinkertaistamiseksi sen mukana tulee SDK, paketinhallintapubi, staattinen koodin analysoija dart_analyzer, joukko kirjastoja, integroitu kehitysympäristö DartPad ja Dart-yhteensopivia laajennuksia IntelliJ IDEA:lle, WebStormille, Emacsille, Sublime Textille. 2 ja Vim.
  • Lisäpaketteja kirjastoineen ja apuohjelmineen jaetaan pubivaraston kautta, jossa on noin 22 tuhatta pakettia.

Tärkeimmät muutokset Dart 2.15 -julkaisussa:

  • Tarjoaa työkalut tehtävien nopeaan rinnakkaiseen suorittamiseen käsittelijöiden eristämisellä. Moniytimisissä järjestelmissä Dart-ajonaika suorittaa oletusarvoisesti sovelluskoodia yhdessä prosessoriytimessä ja käyttää muita ytimiä järjestelmätehtävien suorittamiseen, kuten asynkroniseen I/O-toimintoon, tiedostoihin kirjoittamiseen tai verkkopuheluiden soittamiseen. Sovelluksille, joiden on suoritettava käsittelijät rinnakkain, esimerkiksi animaation renderöimiseksi käyttöliittymässä, on mahdollista käynnistää erillisiä koodilohkoja (eristää), jotka on eristetty toisistaan ​​ja suoritetaan muissa CPU-ytimissä samanaikaisesti pääsovellussäikeen kanssa. . Suojatakseen virheiltä, ​​joita syntyy, kun koodia suoritetaan samanaikaisesti saman datajoukon kanssa, muunnettavien objektien jakaminen eri eristyslohkoissa on kielletty, ja käsittelijöiden väliseen vuorovaikutukseen käytetään sanomanvälitysmallia.

    Dart 2.15 esittelee uuden konseptin - eristetyt lohkoryhmät (eristetyt ryhmät), jonka avulla voit järjestää jaetun pääsyn erilaisiin sisäisiin tietorakenteisiin eristyslohkoissa, jotka ovat osa samaa ryhmää, mikä voi vähentää merkittävästi ylimääräistä vuorovaikutusta ryhmän käsittelijöiden välillä. . Esimerkiksi ylimääräisen eristyslohkon käynnistäminen olemassa olevassa ryhmässä on 100 kertaa nopeampaa ja vaatii 10-100 kertaa vähemmän muistia kuin erillisen eristyslohkon käynnistäminen, koska ohjelman tietorakenteita ei tarvitse alustaa.

    Huolimatta siitä, että ryhmän eristyslohkot estävät edelleen jaetun pääsyn muuttuviin objekteihin, ryhmät käyttävät jaettua kasamuistia, joka voi merkittävästi nopeuttaa objektien siirtoa lohkosta toiseen ilman resurssiintensiivisiä kopiointitoimintoja. Uudessa versiossa voit myös välittää käsittelijän tuloksen, kun kutsut Isolate.exit():tä datan siirtämiseksi isolaattilohkoon ilman kopiointitoimintoja. Lisäksi viestien välitysmekanismia on optimoitu – pienet ja keskikokoiset viestit käsitellään nyt noin 8 kertaa nopeammin. Objektit, jotka voidaan siirtää isolaattien välillä käyttämällä SendPort.send() -kutsua, sisältävät tietyntyyppisiä toimintoja, sulkemisia ja pinojäljitystä.

  • Työkaluista, joilla luodaan osoittimia yksittäisiin funktioihin muissa objekteissa (repäisy), on poistettu rajoitukset samanlaisten osoittimien luomiselle konstruktorikoodissa, mikä voi olla hyödyllistä rakennettaessa Flutter-kirjastoon perustuvia rajapintoja. Jos esimerkiksi haluat luoda sarake-widgetin, joka sisältää useita teksti-widgettejä, voit kutsua ".map()" ja välittää osoittimia Text-objektin Text.new rakentajalle: class FruitWidget laajentaa StatelessWidget { @override Widget build(BuildContext konteksti) { return Column(lapset: ['Omena', 'Oranssi'].map(Teksti.uusi).Lista()); } }
  • Toimintoosoittimien käyttöön liittyviä mahdollisuuksia on laajennettu. Lisätty mahdollisuus käyttää yleisiä menetelmiä ja funktioosoittimia ei-yleisen menetelmän ja osoittimen luomiseen: T id (T-arvo) => arvo; var intId = id ; // sallittu versiossa 2.15 "int Function(int) intId = id;" sijaan. const fo = id; // osoitin funktion tunnukseen. const c1 = fo ;
  • Dart:core-kirjastossa on parannettu enum-tukea. Voit esimerkiksi nyt tulostaa merkkijonoarvon kustakin enum-arvosta käyttämällä ".name"-menetelmää, valita arvoja nimen mukaan tai sovittaa arvopareja: enum MyEnum { one , kaksi, kolme } void main() { tulosta(OmaEnum.yksi.nimi); // "yksi" tulostetaan. print(MyEnum.values.byName('two') == OmaEnum.kaksi); // "true" tulostetaan. lopullinen kartta = MyEnum.values.asNameMap(); print(kartta['kolme'] == OmaEnum.kolme); // "totta". }
  • On otettu käyttöön osoittimien pakkaustekniikka, joka mahdollistaa osoittimien kompaktimman esityksen käytön 64-bittisissä ympäristöissä, jos 32-bittinen osoitetila riittää osoitteisiin (muistia ei käytetä enempää kuin 4 Gt). Testit ovat osoittaneet, että tällainen optimointi mahdollistaa kasan koon pienentämisen noin 10 %. Flutter SDK:ssa uusi tila on jo oletusarvoisesti käytössä Androidille, ja se on tarkoitus ottaa käyttöön iOS:lle tulevassa julkaisussa.
  • Dart SDK sisältää työkaluja virheenkorjaukseen ja suorituskyvyn analysointiin (DevTools), jotka toimitettiin aiemmin erillisessä paketissa.
  • Dart pub -komentoon ja pub.dev-pakettivarastoihin on lisätty työkaluja, joilla voidaan seurata luottamuksellisten tietojen vahingossa tapahtuvaa julkaisemista, jolloin paketin sisälle jää jatkuvan integroinnin järjestelmien ja pilviympäristöjen tunnistetiedot. Jos tällaisia ​​vuotoja havaitaan, "dart pub publish" -komennon suorittaminen keskeytyy virheilmoituksella. Jos tulos oli väärä, tarkistus voidaan ohittaa valkoisen listan kautta.
  • Mahdollisuus peruuttaa paketin jo julkaistu versio on lisätty pub.dev-säilöön esimerkiksi, jos havaitaan vaarallisia virheitä tai haavoittuvuuksia. Aikaisemmin tällaisia ​​korjauksia varten käytäntönä oli julkaista korjaava versio, mutta joissain tilanteissa on välttämätöntä peruuttaa olemassa oleva julkaisu ja lopettaa sen jatkojakelu kiireellisesti (esimerkiksi jos korjaus ei ole vielä valmis tai jos koko julkaisu on julkaistu julkaistu vahingossa testiversion sijaan). Peruuttamisen jälkeen pakettia ei enää tunnisteta "pub get"- ja "pub upgrade" -komennoissa, ja järjestelmissä, joissa se on jo asennettu, annetaan erityinen varoitus, kun seuraavan kerran "pub get" suoritetaan.
  • Lisätty suoja haavoittuvuutta (CVE-2021-22567) vastaan, joka johtuu siitä, että koodissa on käytetty unicode-merkkejä, jotka muuttavat näyttöjärjestystä.
  • Korjattu haavoittuvuus (CVE-2021-22568), jonka avulla voit esiintyä toisena pub.dev-käyttäjänä, kun julkaiset paketteja kolmannen osapuolen palvelimelle, joka hyväksyy pub.dev oauth2 -käyttövaltuudet. Haavoittuvuutta voidaan esimerkiksi käyttää hyökkäämiseen sisäisiin ja yritysten pakettipalvelimiin. Tämä ongelma ei vaikuta kehittäjiin, jotka isännöivät vain paketteja pub.dev-sivustolla.

Samalla esiteltiin merkittävä julkaisu käyttöliittymäkehyksestä Flutter 2.8, jota pidetään vaihtoehtona React Nativelle ja jonka avulla voidaan julkaista yhden koodipohjan perusteella sovelluksia iOS:lle, Androidille, Windowsille, macOS:lle ja Linuxille. alustoilla sekä luoda sovelluksia selaimissa toimiviksi. Googlen kehittämän Fuchsia-mikroytimen käyttöjärjestelmän mukautettu kuori on rakennettu Flutterin pohjalta. On huomattava, että viimeisen kuuden kuukauden aikana Flutter 2 -sovellusten määrä Google Play Kaupassa on kasvanut 200 tuhannesta 375 tuhanteen, ts. melkein kahdesti.

Suurin osa Flutter-koodista on toteutettu Dart-kielellä ja ajonaikainen moottori sovellusten suorittamiseen on kirjoitettu C++-kielellä. Sovelluksia kehitettäessä voit Flutterin alkuperäisen Dart-kielen lisäksi käyttää Dart Foreign Function -käyttöliittymää kutsumaan C/C++-koodia. Korkea suoritusteho saavutetaan kääntämällä sovelluksia alkuperäiseen koodiin kohdealustoille. Tässä tapauksessa ohjelmaa ei tarvitse kääntää uudelleen jokaisen muutoksen jälkeen - Dart tarjoaa kuuman uudelleenlataustilan, jonka avulla voit tehdä muutoksia käynnissä olevaan sovellukseen ja arvioida tuloksen välittömästi.

Uuden Flutterin muutoksista mainitaan käynnistysnopeuden ja muistin kulutuksen optimointi mobiililaitteissa. Sovellusten yhdistäminen taustapalveluihin, kuten Firebaseen ja Google Cloudiin, on helpompaa. Google Adsin integrointityökalut on vakiintunut. Kameroiden ja verkkolaajennusten tukea on parannettu merkittävästi. Kehityksen yksinkertaistamiseksi on ehdotettu uusia työkaluja, esimerkiksi lisätty widget Firebasen todentamista varten. Flame-moottori, joka on suunniteltu 2D-pelien kehittämiseen Flutterilla, on päivitetty.

Lähde: opennet.ru

Lisää kommentti