Programmeringsspråket Dart 2.15 och Flutter 2.8-ramverket är tillgängligt

Google har publicerat lanseringen av programmeringsspråket Dart 2.15, som fortsätter utvecklingen av en radikalt omdesignad gren av Dart 2, som skiljer sig från originalversionen av Dart-språket genom att använda stark statisk typning (typer kan härledas automatiskt, så att specificera typer är inte nödvändigt, men dynamisk typning används inte längre och initialt beräknad tilldelas typen till variabeln och strikt typkontroll tillämpas därefter).

Funktioner i Dart-språket:

  • Bekant och lättläst syntax, naturligt för JavaScript-, C- och Java-programmerare.
  • Säkerställer snabb lansering och hög prestanda för alla moderna webbläsare och olika typer av miljöer, från bärbara enheter till kraftfulla servrar.
  • Möjligheten att definiera klasser och gränssnitt som tillåter inkapsling och återanvändning av befintliga metoder och data.
  • Att specificera typer gör det lättare att felsöka och identifiera fel, gör koden tydligare och mer läsbar och förenklar dess modifiering och analys av tredjepartsutvecklare.
  • Typer som stöds inkluderar: olika typer av hash, arrayer och listor, köer, numeriska och strängtyper, typer för att bestämma datum och tid, reguljära uttryck (RegExp). Det går att skapa egna typer.
  • För att organisera parallell exekvering föreslås att klasser med isolate-attributet används, vars kod exekveras helt i isolerat utrymme i ett separat minnesområde, och interagerar med huvudprocessen genom att skicka meddelanden.
  • Stöd för användning av bibliotek som förenklar support och felsökning av stora webbprojekt. Tredjepartsimplementeringar av funktioner kan inkluderas i form av delade bibliotek. Ansökningar kan delas upp i delar och anförtro utvecklingen av varje del till ett separat team av programmerare.
  • En uppsättning färdiga verktyg för att stödja utveckling i Dart-språket, inklusive implementering av dynamisk utveckling och felsökningsverktyg med kodkorrigering i farten ("redigera-och-fortsätt").
  • För att förenkla utvecklingen i Dart-språket kommer den med en SDK, en pakethanterarpub, en statisk kodanalysator dart_analyzer, en uppsättning bibliotek, en integrerad utvecklingsmiljö DartPad och Dart-aktiverade plugins för IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 och Vim.
  • Ytterligare paket med bibliotek och verktyg distribueras genom pubförrådet, som har cirka 22 tusen paket.

Stora ändringar i Dart 2.15-versionen:

  • Ger verktyg för snabb parallellkörning av uppgifter med isolering av hanterare. På flerkärniga system kör Dart-runtime som standard programkod på en CPU-kärna och använder andra kärnor för att utföra systemuppgifter som asynkron I/O, skriva till filer eller ringa nätverksanrop. För applikationer som behöver exekvera sina hanterare parallellt, till exempel för att rendera animering i gränssnittet, är det möjligt att starta separata kodblock (isolera), isolerade från varandra och exekveras på andra CPU-kärnor samtidigt med huvudapplikationstråden . För att skydda mot fel som uppstår vid samtidig exekvering av kod som arbetar med samma datauppsättning, är delning av föränderliga objekt i olika isolerade block förbjuden, och en modell för att skicka meddelanden används för interaktion mellan hanterare.

    Dart 2.15 introducerar ett nytt koncept - isolerade blockgrupper (isolerade grupper), som låter dig organisera delad åtkomst till olika interna datastrukturer i isolerade block som är en del av samma grupp, vilket avsevärt kan minska overhead när du interagerar mellan hanterare i en grupp . Till exempel är det 100 gånger snabbare att starta ett extra isolerat block i en befintlig grupp och det kräver 10-100 gånger mindre minne än att starta ett separat isolerat block, på grund av att behovet av att initiera programdatastrukturer elimineras.

    Trots att isolerade block i en grupp fortfarande förbjuder delad åtkomst till föränderliga objekt, använder grupperna ett delat heapminne, vilket avsevärt kan påskynda överföringen av objekt från ett block till ett annat utan att behöva utföra resurskrävande kopieringsoperationer. Den nya versionen låter dig också skicka resultatet av hanteraren när du anropar Isolate.exit() för att överföra data till det överordnade isoleringsblocket utan kopieringsoperationer. Dessutom har meddelandeöverföringsmekanismen optimerats - små och medelstora meddelanden behandlas nu cirka 8 gånger snabbare. Objekt som kan skickas mellan isolat med anropet SendPort.send() inkluderar vissa typer av funktioner, stängningar och stackspårningar.

  • I verktygen för att skapa pekare till enskilda funktioner i andra objekt (tear-off) har restriktioner för att skapa liknande pekare i konstruktorkod tagits bort, vilket kan vara användbart när man bygger gränssnitt baserat på Flutter-biblioteket. För att till exempel skapa en kolumnwidget som innehåller flera textwidgetar kan du anropa ".map()" och skicka pekare till Text.new-konstruktorn för Text-objektet: class FruitWidget utökar StatelessWidget { @override Widget build(BuildContext context) { return Column( child: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Möjligheterna förknippade med användning av funktionspekare har utökats. Lade till möjligheten att använda generiska metoder och funktionspekare för att skapa en icke-generisk metod och pekare: T id (T-värde) => värde; var intId = id ; // tillåtet i version 2.15 istället för "int Function(int) intId = id;" const fo = id; // pekare till funktions-id. const c1 = fo ;
  • Dart:core-biblioteket har förbättrat stöd för enums, till exempel kan du nu mata ut ett strängvärde från varje enum-värde med ".name"-metoden, välja värden efter namn eller matcha värdepar: enum MyEnum { one , två, tre } void main() { print(MyEnum.one.name); // "en" kommer att skrivas ut. print(MyEnum.values.byName('two') == MyEnum.two); // "true" kommer att skrivas ut. final map = MyEnum.values.asNameMap(); print(map['tre'] == MyEnum.three); // "Sann". }
  • En pekarkomprimeringsteknik har implementerats som tillåter användning av en mer kompakt representation av pekare i 64-bitarsmiljöer om ett 32-bitars adressutrymme är tillräckligt för adressering (inte mer än 4 GB minne används). Tester har visat att sådan optimering gör det möjligt att minska högstorleken med cirka 10 %. I Flutter SDK är det nya läget redan aktiverat för Android som standard och är planerat att aktiveras för iOS i en framtida version.
  • Dart SDK innehåller verktyg för felsökning och prestandaanalys (DevTools), som tidigare levererades i ett separat paket.
  • Verktyg har lagts till "dart pub"-kommandot och pub.dev-paketförråden för att spåra oavsiktlig publicering av konfidentiell information, till exempel lämna autentiseringsuppgifter för kontinuerliga integrationssystem och molnmiljöer inuti paketet. Om sådana läckor upptäcks kommer exekveringen av kommandot "dart pub publish" att avbrytas med ett felmeddelande. Om det fanns en falsk positiv är det möjligt att kringgå kontrollen genom en vit lista.
  • Möjligheten att återkalla en redan publicerad version av ett paket har lagts till i pub.dev-förrådet, till exempel om farliga fel eller sårbarheter upptäcks. Tidigare, för sådana korrigeringar, var praxis att publicera en korrigerande version, men i vissa situationer är det nödvändigt att avbryta den befintliga versionen och omedelbart stoppa dess vidare distribution (till exempel om korrigeringen ännu inte är klar eller om en fullständig version var publiceras av misstag istället för en testversion). Efter återkallelse identifieras paketet inte längre i kommandona "pub get" och "pub upgrade", och på system som redan har installerat det, utfärdas en särskild varning nästa gång "pub get" körs.
  • Tillagt skydd mot en sårbarhet (CVE-2021-22567) orsakad av användning av unicode-tecken i koden som ändrar visningsordningen.
  • Fixat en sårbarhet (CVE-2021-22568) som gör att du kan utge dig för att vara en annan pub.dev-användare när du publicerar paket till en tredjepartsserver som accepterar pub.dev oauth2-åtkomsttokens. Till exempel kan sårbarheten användas för att attackera interna och företagspaketservrar. Utvecklare som bara är värd för paket på pub.dev påverkas inte av det här problemet.

Samtidigt presenterades en betydande utgåva av ramverket för användargränssnittet Flutter 2.8, som anses vara ett alternativ till React Native och gör det möjligt att, baserat på en enda kodbas, släppa applikationer för iOS, Android, Windows, macOS och Linux-plattformar, samt skapa applikationer att köra i webbläsare. Ett anpassat skal för Fuchsia-mikrokärnoperativsystemet utvecklat av Google är byggt på basis av Flutter. Det noteras att under de senaste sex månaderna har antalet Flutter 2-applikationer i Google Play Store ökat från 200 tusen till 375 tusen, d.v.s. nästan två gånger.

Huvuddelen av Flutter-koden är implementerad i Dart-språket, och runtime-motorn för att köra applikationer är skriven i C++. När du utvecklar applikationer kan du, förutom Flutters inhemska Dart-språk, använda Dart Foreign Function-gränssnittet för att anropa C/C++-kod. Hög exekveringsprestanda uppnås genom att kompilera applikationer till inbyggd kod för målplattformar. I det här fallet behöver programmet inte kompileras om efter varje ändring - Dart tillhandahåller ett hot reload-läge som gör att du kan göra ändringar i en applikation som körs och omedelbart utvärdera resultatet.

Bland förändringarna i den nya versionen av Flutter noteras optimering av lanseringshastighet och minnesförbrukning på mobila enheter. Det är enklare att ansluta appar till backend-tjänster som Firebase och Google Cloud. Verktyg för integration med Google Ads har stabiliserats. Stödet för kameror och webbplugins har förbättrats avsevärt. Nya verktyg har föreslagits för att förenkla utvecklingen, till exempel har en widget lagts till för autentisering med Firebase. Flame-motorn, designad för att utveckla 2D-spel med Flutter, har uppdaterats.

Källa: opennet.ru

Lägg en kommentar