Dart 2.15 programozási nyelv és Flutter 2.8 keretrendszer elérhető

A Google közzétette a Dart 2.15 programozási nyelv kiadását, amely a Dart 2 gyökeresen újratervezett ágának fejlesztését folytatja, amely a Dart nyelv eredeti verziójától erős statikus gépelés használatával tér el (a típusok automatikusan következtethetők, így típusok megadása nem szükséges, de a dinamikus gépelés már nem használatos, és kezdetben a típus hozzá van rendelve a változóhoz, majd szigorú típusellenőrzést alkalmaznak).

A Dart nyelv jellemzői:

  • Ismerős és könnyen megtanulható szintaxis, természetes a JavaScript, C és Java programozók számára.
  • Gyors indítás és nagy teljesítmény biztosítása minden modern webböngésző és különféle környezet számára, a hordozható eszközöktől a nagy teljesítményű szerverekig.
  • Osztályok és interfészek meghatározásának képessége, amelyek lehetővé teszik a meglévő módszerek és adatok beágyazását és újrafelhasználását.
  • A típusok megadása megkönnyíti a hibakeresést és a hibák azonosítását, világosabbá és olvashatóbbá teszi a kódot, valamint leegyszerűsíti a külső fejlesztők általi módosítását és elemzését.
  • A támogatott típusok a következők: különböző típusú hash-ek, tömbök és listák, sorok, numerikus és karakterlánc-típusok, dátum és idő meghatározására szolgáló típusok, reguláris kifejezések (RegExp). Lehetőség van saját típusok létrehozására.
  • A párhuzamos végrehajtás megszervezéséhez javasolt az isolate attribútummal rendelkező osztályok használata, amelyek kódja teljes egészében izolált térben, külön memóriaterületen fut le, üzenetek küldésével kölcsönhatásba lépve a fő folyamattal.
  • A nagy webes projektek támogatását és hibakeresését leegyszerűsítő könyvtárak használatának támogatása. A funkciók harmadik féltől származó implementációi megosztott könyvtárak formájában is szerepelhetnek. Az alkalmazások részekre bonthatók, és az egyes részek fejlesztését külön programozói csapatra bízhatjuk.
  • Kész eszközök készlete a Dart nyelvű fejlesztés támogatására, beleértve a dinamikus fejlesztő és hibakereső eszközök megvalósítását menet közbeni kódjavítással ("szerkesztés és folytatás").
  • A Dart nyelv fejlesztésének leegyszerűsítése érdekében SDK-t, csomagkezelő pubot, dart_analyzer statikus kódelemzőt, könyvtárkészletet, DartPad integrált fejlesztői környezetet és Dart-kompatibilis beépülő modulokat tartalmaz az IntelliJ IDEA, WebStorm, Emacs, Sublime Text számára. 2 és Vim.
  • A mintegy 22 ezer csomagot tartalmazó pub repository-n keresztül további, könyvtárakat és segédprogramokat tartalmazó csomagok kerülnek terjesztésre.

Főbb változások a Dart 2.15 kiadásában:

  • Eszközöket biztosít a feladatok gyors párhuzamos végrehajtásához a kezelők elkülönítésével. A többmagos rendszereken a Dart futási környezet alapértelmezés szerint az alkalmazáskódot egy CPU-magon futtatja, és más magokat használ a rendszerfeladatok elvégzésére, például az aszinkron I/O-ra, a fájlok írására vagy a hálózati hívásokra. Azoknál az alkalmazásoknál, amelyeknek párhuzamosan kell végrehajtaniuk kezelőiket, például animáció megjelenítéséhez az interfészen, lehetőség van külön kódblokkok indítására (izoláció), amelyek egymástól elkülönítve és más CPU magokon futnak le egyidejűleg a fő alkalmazási szállal. . Az azonos adatkészlettel dolgozó kód egyidejű végrehajtása során fellépő hibák elleni védelem érdekében tilos a változó objektumok megosztása különböző izolátumblokkokban, és üzenetátadási modellt használnak a kezelők közötti interakcióhoz.

    A Dart 2.15 új koncepciót vezet be – izolált blokkcsoportok (izolátumcsoportok), amely lehetővé teszi a különböző belső adatstruktúrákhoz való megosztott hozzáférés megosztását olyan izolációs blokkokban, amelyek ugyanannak a csoportnak a részét képezik, ami jelentősen csökkentheti a többletterhelést a csoport kezelői közötti interakció során. . Például egy további elkülönítési blokk elindítása egy meglévő csoportban 100-szor gyorsabb és 10-100-szor kevesebb memóriát igényel, mint egy különálló izolációs blokk elindítása, mivel nincs szükség a programadat-struktúrák inicializálására.

    Annak ellenére, hogy az elkülönített blokkok egy csoportban továbbra is tiltják a változó objektumokhoz való megosztott hozzáférést, a csoportok megosztott kupacmemóriát használnak, ami jelentősen felgyorsíthatja az objektumok egyik blokkból a másikba való átvitelét anélkül, hogy erőforrásigényes másolási műveleteket kellene végrehajtani. Az új verzió azt is lehetővé teszi, hogy átadja a kezelő eredményét az Isolate.exit() meghívásakor, hogy az adatokat másolási műveletek nélkül vigye át a szülő izolátum blokkra. Ezen túlmenően optimalizálták az üzenetátviteli mechanizmust - a kis és közepes üzenetek feldolgozása körülbelül 8-szor gyorsabb. Az izolátumok között a SendPort.send() hívás segítségével átadható objektumok tartalmaznak bizonyos típusú függvényeket, lezárásokat és veremkövetéseket.

  • A más objektumokban lévő egyedi függvényekre mutatók létrehozására szolgáló eszközökben (tear-off) megszűntek a hasonló mutatók konstruktorkódban történő létrehozására vonatkozó korlátozások, ami hasznos lehet a Flutter könyvtáron alapuló interfészek építésénél. Például több Szöveg widgetet tartalmazó Oszlop widget létrehozásához meghívhatja a ".map()" parancsot, és átadhat mutatókat a Text objektum Text.new konstruktorának: class FruitWidget expands StatelessWidget { @override Widget build(BuildContext context) { return Column( children: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Bővültek a függvénymutatók használatával járó lehetőségek. Hozzáadtuk az általános módszerek és függvénymutatók használatának lehetőségét egy nem általános módszer és mutató létrehozásához: T id (T érték) => érték; var intId = id ; // engedélyezett a 2.15-ös verzióban az "int Function(int) intId = id;" helyett const fo = id; // mutató a függvény azonosítójára. const c1 = fo ;
  • A dart:core könyvtár továbbfejlesztette az enum-ok támogatását, például mostantól a ".name" metódussal minden enum-értékből kiadhat egy karakterlánc-értéket, név szerint választhat értékeket, vagy egyeztethet értékpárokat: enum MyEnum { one , kettő, három } void main() { print(MyEnum.one.name); // "egy" lesz kinyomtatva. print(MyEnum.values.byName('two') == MyEnum.two); // "igaz" lesz kinyomtatva. végső leképezés = MyEnum.values.asNameMap(); print(map['three'] == Saját Enum.három); // "igaz". }
  • Olyan mutatótömörítési technikát valósítottak meg, amely lehetővé teszi a mutatók kompaktabb ábrázolását 64 bites környezetben, ha a 32 bites címterület elegendő a címzéshez (4 GB-nál nem több memória kerül felhasználásra). A tesztek kimutatták, hogy az ilyen optimalizálás lehetővé teszi a kupac méretének körülbelül 10%-os csökkentését. A Flutter SDK-ban az új mód már alapértelmezés szerint engedélyezve van az Android számára, és a tervek szerint egy jövőbeli kiadásban engedélyezni fogják az iOS-re is.
  • A Dart SDK hibakereső és teljesítményelemző eszközöket (DevTools) tartalmaz, amelyeket korábban külön csomagban szállítottak.
  • A „dart pub” parancshoz és a pub.dev csomagtárolókhoz olyan eszközöket adtunk, amelyek nyomon követhetik a bizalmas információk véletlen közzétételét, így például a csomagon belül maradnak a folyamatos integrációs rendszerek és felhőkörnyezetek hitelesítő adatai. Ha ilyen szivárgást észlel, a „dart pub publish” parancs végrehajtása hibaüzenettel megszakad. Ha téves pozitív eredményt kaptunk, az ellenőrzés megkerülhető egy fehér listán keresztül.
  • A pub.dev tárházba bekerült a csomag egy már közzétett verziójának visszavonásának lehetősége, például veszélyes hibák vagy sebezhetőségek felfedezése esetén. Korábban az ilyen korrekciókhoz az volt a gyakorlat, hogy egy javító verziót tettek közzé, de bizonyos helyzetekben szükséges a meglévő kiadás törlése és sürgősen leállítani a további terjesztését (például ha a javítás még nem készült el, vagy ha a teljes kiadás megjelent tévedésből tesztverzió helyett). A visszavonás után a csomag már nem azonosítható a „pub get” és a „pub upgrade” parancsokban, és azokon a rendszereken, amelyek már telepítették azt, a „pub get” következő végrehajtásakor külön figyelmeztetés jelenik meg.
  • Hozzáadott védelem a sérülékenység (CVE-2021-22567) ellen, amelyet a kódban a megjelenítési sorrendet megváltoztató unicode karakterek használata okoz.
  • Kijavítottunk egy biztonsági rést (CVE-2021-22568), amely lehetővé teszi egy másik pub.dev felhasználó megszemélyesítését, amikor csomagokat tesz közzé egy külső féltől származó kiszolgálón, amely elfogadja a pub.dev oauth2 hozzáférési tokeneket. A sérülékenység például felhasználható belső és vállalati csomagkiszolgálók megtámadására. Ez a probléma nem érinti azokat a fejlesztőket, akik csak a pub.dev webhelyen tárolnak csomagokat.

Ezzel egy időben bemutatásra került a felhasználói felület keretrendszerének jelentős kiadása, a Flutter 2.8, amely a React Native alternatívájaként tekinthető, és egyetlen kódbázis alapján lehetővé teszi alkalmazások kiadását iOS, Android, Windows, macOS és Linux platformokra, valamint böngészőkben futtatható alkalmazások létrehozására. A Google által kifejlesztett Fuchsia mikrokernel operációs rendszer egyedi shellje a Flutter alapján épül fel. Megjegyzendő, hogy az elmúlt hat hónapban a Flutter 2 alkalmazások száma a Google Play Áruházban 200 ezerről 375 ezerre nőtt, i.e. majdnem kétszer.

A Flutter kód fő része Dart nyelven van implementálva, az alkalmazások futtatására szolgáló futásidejű motor pedig C++ nyelven íródott. Alkalmazások fejlesztése során a Flutter natív Dart nyelvén kívül a Dart Foreign Function felületet is használhatjuk C/C++ kódok hívására. Nagy végrehajtási teljesítmény érhető el, ha az alkalmazásokat a célplatformok natív kódjára fordítják. Ebben az esetben a programot nem kell minden változtatás után újrafordítani - a Dart egy forró újratöltési módot biztosít, amely lehetővé teszi, hogy módosítsa a futó alkalmazást, és azonnal kiértékelje az eredményt.

A Flutter új kiadásának változásai között említésre méltó az indítási sebesség és a memóriafogyasztás optimalizálása a mobileszközökön. Könnyebb csatlakoztatni az alkalmazásokat a háttérszolgáltatásokhoz, például a Firebase-hez és a Google Cloudhoz. A Google Ads szolgáltatással való integráció eszközeit stabilizálták. A kamerák és webbővítmények támogatása jelentősen javult. Új eszközöket javasoltak a fejlesztés egyszerűsítésére, például egy widgetet adtak hozzá a Firebase segítségével történő hitelesítéshez. Frissítésre került a Flame motor, amelyet a 2D játékok Flutter segítségével történő fejlesztésére terveztek.

Forrás: opennet.ru

Hozzászólás