Dostępne język programowania Dart 2.15 i framework Flutter 2.8

Firma Google opublikowała wydanie języka programowania Dart 2.15, kontynuując rozwój radykalnie przekształconej wersji Dart 2, która różni się od pierwotnej wersji języka Dart zastosowaniem silnej statycznej typizacji (typy mogą być wywnioskowane automatycznie, więc wskazanie typów nie jest obowiązkowe, ale dynamiczna typizacja nie jest już używana, a pierwotnie obliczony typ jest przypisany do zmiennej i jest później stosowana ścisła kontrola typów).

Cechy języka Dart:

  • Znany i prosty w nauce składnik, naturalny dla programistów JavaScript, C i Java.
  • Z zapewnieniem szybkiego uruchamiania i wysokiej wydajności dla wszystkich współczesnych przeglądarek internetowych i różnych typów środowiska, od urządzeń przenośnych po mocne. serwerów.
  • Możliwość definiowania klas i interfejsów, co pozwala na wykorzystanie enkapsulacji i ponowne wykorzystanie istniejących metod i danych.
  • Określenie typów ułatwia debugowanie i identyfikację błędów, czyni kod bardziej przejrzystym i czytelnym, upraszcza jego dopracowanie i analizę przez innych programistów.
  • Wśród obsługiwanych typów: różne typy hash, tablice i listy, kolejki, typy numeryczne i ciągów, typy do określania daty i czasu, wyrażenia regularne (RegExp). Istnieje możliwość tworzenia własnych typów.
  • Do organizacji równoległego wykonywania zaleca się używanie klas z atrybutem isolate, których kod jest wykonywany całkowicie w odizolowanej przestrzeni w osobnym obszarze pamięci, komunikując się z głównym procesem za pomocą wysyłania wiadomości.
  • Wsparcie dla używania bibliotek, które upraszczają wsparcie i debugowanie dużych projektów webowych. Zewnętrzne implementacje funkcji mogą być podłączane jako wspólne biblioteki. Aplikacje można podzielić na części i powierzyć rozwój każdego z nich osobnym zespołom programistycznym.
  • Zestaw gotowych narzędzi do wsparcia rozwoju w języku Dart, w tym implementacja narzędzi do dynamicznego rozwoju i debugowania z poprawą kodu w locie („edit-and-continue”).
  • Aby uprościć rozwój w języku Dart, dostępne jest SDK, menedżer pakietów pub, statyczny analizator kodu dart_analyzer, zestaw bibliotek, zintegrowane środowisko programistyczne DartPad oraz wtyczki z obsługą Dart dla IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 i Vim.
  • Dodatkowe pakiety z bibliotekami i narzędziami są dystrybuowane za pośrednictwem repozytorium pub, które zawiera około 22 tysięcy pakietów.

Główne zmiany w wydaniu Dart 2.15:

  • Wprowadzono narzędzia umożliwiające szybkie równoległe wykonywanie zadań z izolacją obsługujących. W systemach wielordzeniowych w czasie wykonywania Dart domyślnie uruchamia kod aplikacji na jednym rdzeniu CPU, a inne rdzenie angażuje do wykonywania zadań systemowych, takich jak asynchroniczne wejście/wyjście, zapis do plików czy wykonywanie wywołań sieciowych. Dla aplikacji, które muszą równolegle wykonywać swoje obsługujące, na przykład do renderowania animacji w interfejsie, przewidziano możliwość uruchamiania oddzielnych bloków kodu (isolate), izolowanych od siebie i wykonywanych na innych rdzeniach CPU jednocześnie z głównym wątkiem aplikacji. Aby chronić przed błędami, które mogą wystąpić podczas jednoczesnego wykonywania kodu operującego na tym samym zestawie danych, w różnych blokach isolate zabronione jest współdzielenie zmiennych obiektów, a do komunikacji pomiędzy obsługującymi wykorzystywana jest model oparty na przekazywaniu komunikatów.

    W Dart 2.15 wprowadzono nową koncepcję — grupy izolowanych bloków (isolate groups), która umożliwia zorganizowanie wspólnego dostępu do różnych wewnętrznych struktur danych w blokach isolate należących do tej samej grupy, co znacząco obniża koszty interakcji pomiędzy obsługującymi w grupie. Na przykład uruchomienie dodatkowego bloku isolate w istniejącej grupie trwa 100 razy szybciej i wymaga od 10 do 100 razy mniej pamięci niż uruchomienie odosobnionego bloku isolate, dzięki wyeliminowaniu potrzeby inicjalizacji struktur danych programu.

    Pomimo tego, że w blokach isolate w grupie nadal zabrania się współdzielenia zmiennych obiektów, w grupach używana jest wspólna pamięć heap, co znacznie przyspiesza transfer obiektów z jednego bloku do drugiego bez konieczności wykonywania kosztownych operacji kopiowania. W nowej wersji zezwolono również na przekazywanie wyniku z handlera przy wywołaniu Isolate.exit() w celu przesłania danych do rodzica bloku isolate bez operacji kopiowania. Dodatkowo zoptymalizowano mechanizm przesyłania wiadomości — małe i średnie wiadomości są teraz przetwarzane około 8 razy szybciej. Do obiektów, które można przesyłać między blokami isolate za pomocą wywołania SendPort.send(), dodano niektóre typy funkcji, zamknięcia i śledzenie stosu.

  • W narzędziach do tworzenia wskaźników do poszczególnych funkcji w innych obiektach (tear-off) zniesiono ograniczenia dotyczące tworzenia takich wskaźników w kodzie konstruktorów, co może być przydatne przy budowaniu interfejsów opartych na bibliotece Flutter. Na przykład, aby stworzyć widget Column, zawierający kilka widgetów Text, można wywołać „.map()” i przekazać wskaźniki do konstruktora Text.new obiektu Text: class FruitWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Column(children: [‘Apple’, ‘Orange’].map(Text.new).toList()); } }
  • Rozszerzono możliwości związane z używaniem wskaźników do funkcji. Dodano możliwość stosowania ogólnych (generic) metod oraz wskaźników funkcji do tworzenia nie-ogólnych metod i wskaźników: T id<T>(T value) => value; var intId = id<int>; // dozwolone w wersji 2.15 zamiast „int Function(int) intId = id;” const fo = id; // wskaźnik na funkcję id. const c1 = fo<int>;
  • W bibliotece dart:core poprawiono wsparcie dla enumeracji (enum), np. teraz można uzyskiwać wartości stringowe z każdego elementu enum za pomocą metody „.name”, wykonywać wybór wartości po nazwie lub realizować dopasowanie par wartości: enum MyEnum { one, two, three } void main() { print(MyEnum.one.name); // zostanie wyświetlone „one”. print(MyEnum.values.byName(‘two’) == MyEnum.two); // zostanie wyświetlone „true”. final map = MyEnum.values.asNameMap(); print(map[‘three’] == MyEnum.three); // „true”. }
  • Wprowadzono technikę kompresji wskaźników, umożliwiającą stosowanie bardziej kompaktowej reprezentacji wskaźników w środowiskach 64-bitowych, jeśli do adresowania wystarcza 32-bitowa przestrzeń adresowa (używa się nie więcej niż 4 GB pamięci). Testy wykazały, że taka optymalizacja pozwala na zmniejszenie rozmiaru sterty o około 10%. W Flutter SDK nowy tryb jest domyślnie włączony dla Androida, a w przyszłym wydaniu planowane jest włączenie go dla iOS.
  • Zestaw narzędzi Dart SDK zawiera narzędzia do debugowania i analizy wydajności (DevTools), które wcześniej były dostarczane w osobnym pakiecie.
  • Do polecenia „dart pub” i repozytoriów pakietów pub.dev dodano narzędzia umożliwiające wykrywanie przypadkowego publikowania poufnych informacji, takich jak pozostawienie w pakiecie danych uwierzytelniających dla systemów ciągłej integracji i chmurowych. W przypadku wykrycia takich wycieków wykonanie polecenia „dart pub publish” zostanie przerwane z komunikatem o błędzie. W przypadku fałszywego alarmu przewidziano możliwość obejścia weryfikacji przez białą listę.
  • Do repozytorium pub.dev dodano możliwość wycofania już opublikowanej wersji pakietu, na przykład w przypadku wykrycia krytycznych błędów lub luk w zabezpieczeniach. Wcześniej w takich przypadkach publikowano następną wersję poprawkową, ale w niektórych sytuacjach konieczne jest właśnie unieważnienie wydania i natychmiastowe wstrzymanie jego dalszej dystrybucji (na przykład, jeśli poprawki nie są jeszcze gotowe lub jeśli omyłkowo opublikowano wersję stabilną zamiast testowej). Po wycofaniu pakiet przestaje być rozpoznawany w poleceniach „pub get” i „pub upgrade”, a na już zainstalowanych systemach przy kolejnym wykonaniu „pub get” wyświetlane jest specjalne ostrzeżenie.
  • Dodano ochronę przed luką (CVE-2021-22567), spowodowaną używaniem w kodzie znaków unicode, które zmieniają kolejność wyświetlania.
  • Usunięto lukę (CVE-2021-22568), która umożliwiała podszywanie się pod innego użytkownika pub.dev podczas publikacji pakietów na zewnętrznym serwerze akceptującym tokeny dostępu oauth2 z pub.dev. Na przykład, luka ta może być wykorzystywana do ataku na wewnętrzne i korporacyjne serwery pakietów. Problem nie dotyczy deweloperów publikujących pakiety tylko na pub.dev.

Równocześnie zaprezentowano znaczącą wersję frameworka do budowy interfejsów użytkownika Flutter 2.8, który jest postrzegany jako alternatywa dla React Native i pozwala na wydawanie aplikacji na platformy iOS, Android, Windows, macOS i Linux na podstawie jednej bazy kodu, a także na tworzenie aplikacji do uruchamiania w przeglądarkach. Na podstawie Flutter zbudowano interfejs użytkownika rozwijającego się w Google mikrojądrowego systemu operacyjnego Fuchsia. Zauważono, że w ciągu ostatnich sześciu miesięcy liczba aplikacji na Flutter 2 w Google Play Store wzrosła z 200 tysięcy do 375 tysięcy, co oznacza prawie podwojenie.

Główna część kodu Fluttera jest napisana w języku Dart, a silnik wykonawczy do uruchamiania aplikacji jest napisany w C++. Podczas tworzenia aplikacji, oprócz rodzimych dla Fluttera języka Dart, można wykorzystać interfejs Dart Foreign Function do wywoływania kodu w C/C++. Wysoka wydajność wykonania osiągana jest dzięki kompilacji aplikacji do kodu maszynowego dla docelowych platform. Aplikacji nie trzeba rekompilować po każdej zmianie — Dart zapewnia tryb gorącego przeładowania, który umożliwia wprowadzanie zmian w działającej aplikacji i natychmiastowe ocenianie wyników.

W nowej wersji Flutter zauważono optymalizację szybkości uruchamiania i zużycia pamięci na urządzeniach mobilnych. Ułatwiono łączenie aplikacji z usługami backendowymi, takimi jak Firebase i Google Cloud. Stabilizowano narzędzia do integracji z Google Ads. Znacząco poprawiono wsparcie dla kamer i wtyczek webowych. Zaproponowano nowe narzędzia do uproszczenia rozwoju, na przykład dodano widget do uwierzytelniania przy użyciu Firebase. Zaktualizowano silnik Flame, przeznaczony do tworzenia gier 2D przy użyciu Flutter.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster