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

Firma Google opublikowała wydanie języka programowania Dart 2.15, będącego kontynuacją rozwoju radykalnie przeprojektowanej gałęzi Dart 2, która różni się od oryginalnej wersji języka Dart zastosowaniem silnego typowania statycznego (typy można wywnioskować automatycznie, więc określenie typy nie są konieczne, ale typowanie dynamiczne nie jest już używane i podczas początkowych obliczeń typ jest przypisywany do zmiennej, a następnie stosowana jest ścisła kontrola typu).

Cechy języka Dart:

  • Znana i łatwa do nauczenia składnia, naturalna dla programistów JavaScript, C i Java.
  • Zapewnienie szybkiego uruchamiania i wysokiej wydajności dla wszystkich nowoczesnych przeglądarek internetowych i różnego rodzaju środowisk, od urządzeń przenośnych po wydajne serwery.
  • Możliwość definiowania klas i interfejsów umożliwiających hermetyzację i ponowne wykorzystanie istniejących metod i danych.
  • Określanie typów ułatwia debugowanie i identyfikację błędów, sprawia, że ​​kod jest jaśniejszy i bardziej czytelny oraz upraszcza jego modyfikację i analizę przez zewnętrznych programistów.
  • Obsługiwane typy to: różne typy skrótów, tablice i listy, kolejki, typy numeryczne i łańcuchowe, typy służące do określania daty i czasu, wyrażenia regularne (RegExp). Istnieje możliwość tworzenia własnych typów.
  • Aby zorganizować wykonanie równoległe, proponuje się użycie klas z atrybutem izolowanym, których kod jest wykonywany całkowicie w izolowanej przestrzeni w oddzielnym obszarze pamięci, wchodząc w interakcję z głównym procesem poprzez wysyłanie komunikatów.
  • Obsługa korzystania z bibliotek, które upraszczają obsługę i debugowanie dużych projektów internetowych. Implementacje funkcji innych firm można uwzględnić w formie bibliotek współdzielonych. Aplikacje można podzielić na części i powierzyć rozwój każdej części osobnemu zespołowi programistów.
  • Zestaw gotowych narzędzi wspierających rozwój w języku Dart, obejmujący implementację narzędzi do dynamicznego rozwoju i debugowania z korektą kodu na bieżąco („edytuj i kontynuuj”).
  • Aby uprościć programowanie w języku Dart, dostarczany jest z SDK, publikacją menedżera pakietów, analizatorem kodu statycznego dart_analyzer, zestawem bibliotek, zintegrowanym środowiskiem programistycznym DartPad i wtyczkami obsługującymi Dart dla IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 i Vima.
  • Dodatkowe pakiety z bibliotekami i narzędziami dystrybuowane są poprzez repozytorium pubu, w którym znajduje się około 22 tysięcy pakietów.

Główne zmiany w wydaniu Dart 2.15:

  • Zapewnia narzędzia do szybkiego równoległego wykonywania zadań z izolacją procedur obsługi. W systemach wielordzeniowych środowisko wykonawcze Dart domyślnie uruchamia kod aplikacji na jednym rdzeniu procesora i wykorzystuje inne rdzenie do wykonywania zadań systemowych, takich jak asynchroniczne operacje we/wy, zapisywanie plików lub wykonywanie połączeń sieciowych. W przypadku aplikacji, które muszą wykonywać swoje procedury obsługi równolegle, np. w celu renderowania animacji w interfejsie, możliwe jest uruchomienie oddzielnych bloków kodu (izolowanie), odizolowanych od siebie i wykonywanych na innych rdzeniach procesora jednocześnie z głównym wątkiem aplikacji . Aby zabezpieczyć się przed błędami powstającymi podczas jednoczesnego wykonywania kodu pracującego z tym samym zestawem danych, zabronione jest udostępnianie zmiennych obiektów w różnych izolowanych blokach, a do interakcji między procedurami obsługi używany jest model przekazywania komunikatów.

    Dart 2.15 wprowadza nową koncepcję - izolowane grupy bloków (grupy izolowane), które pozwalają organizować współdzielony dostęp do różnych wewnętrznych struktur danych w izolowanych blokach wchodzących w skład tej samej grupy, co może znacznie zmniejszyć obciążenie podczas interakcji pomiędzy procedurami obsługi w grupie . Przykładowo uruchomienie dodatkowego izolowanego bloku w istniejącej grupie jest 100 razy szybsze i wymaga 10-100 razy mniej pamięci niż uruchomienie osobnego izolowanego bloku, ze względu na eliminację konieczności inicjowania struktur danych programu.

    Pomimo tego, że izolowanie bloków w grupie nadal zabrania współdzielonego dostępu do modyfikowalnych obiektów, grupy korzystają ze współdzielonej pamięci sterty, co może znacznie przyspieszyć przenoszenie obiektów z jednego bloku do drugiego bez konieczności wykonywania operacji kopiowania wymagających dużej ilości zasobów. Nowa wersja umożliwia także przekazanie wyniku procedury obsługi podczas wywoływania funkcji Isolate.exit() w celu przesłania danych do nadrzędnego bloku izolującego bez operacji kopiowania. Dodatkowo zoptymalizowano mechanizm transmisji wiadomości – małe i średnie wiadomości są teraz przetwarzane około 8 razy szybciej. Obiekty, które można przekazywać między izolatami za pomocą wywołania SendPort.send() obejmują niektóre typy funkcji, domknięcia i ślady stosu.

  • W narzędziach do tworzenia wskaźników do poszczególnych funkcji w innych obiektach (tear-off) usunięto ograniczenia dotyczące tworzenia podobnych wskaźników w kodzie konstruktora, co może być przydatne przy budowaniu interfejsów w oparciu o bibliotekę Flutter. Na przykład, aby utworzyć widżet Column zawierający wiele widżetów tekstowych, możesz wywołać funkcję „.map()” i przekazać wskaźniki do konstruktora Text.new obiektu Text: class FruitWidget Extends StatelessWidget { @override Widget build (kontekst BuildContext) { return Column(dzieci: ['Apple', 'Orange'].map(Text.new).toList()); } }
  • Rozszerzono możliwości związane z wykorzystaniem wskaźników funkcji. Dodano możliwość korzystania z metod ogólnych i wskaźników funkcji w celu utworzenia nieogólnej metody i wskaźnika: T id (wartość T) => wartość; var intId = identyfikator ; // dozwolone w wersji 2.15 zamiast "int Function(int) intId = id;" stała fo = identyfikator; // wskaźnik do identyfikatora funkcji. stała c1 = fo ;
  • Biblioteka dart:core poprawiła obsługę wyliczeń, na przykład możesz teraz wyprowadzić wartość ciągu znaków z każdej wartości wyliczenia za pomocą metody „.name”, wybierać wartości według nazwy lub dopasowywać pary wartości: enum MyEnum { one , dwa, trzy } void main() { print(MojeEnum.one.name); // Zostanie wydrukowane „jeden”. print(MojeWyliczenie.wartości.byName('dwa') == MojeWyliczenie.two); // Zostanie wydrukowane „true”. mapa końcowa = MyEnum.values.asNameMap(); print(map['three'] == MojeEnum.three); // "PRAWDA". }
  • Zaimplementowano technikę kompresji wskaźników, która pozwala na użycie bardziej zwartej reprezentacji wskaźników w środowiskach 64-bitowych, jeśli do adresowania wystarcza 32-bitowa przestrzeń adresowa (używane jest nie więcej niż 4 GB pamięci). Testy wykazały, że taka optymalizacja pozwala na zmniejszenie wielkości sterty o około 10%. W pakiecie Flutter SDK nowy tryb jest już domyślnie włączony dla systemu Android i planowane jest jego włączenie w przyszłej wersji dla systemu iOS.
  • 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 śledzenie przypadkowej publikacji poufnych informacji, na przykład pozostawienia w pakiecie danych uwierzytelniających dla systemów ciągłej integracji i środowisk chmurowych. W przypadku wykrycia takich wycieków, wykonanie polecenia „dart pub pub” zostanie przerwane i wyświetli się komunikat o błędzie. Jeżeli wynik był fałszywie pozytywny, możliwe jest ominięcie kontroli poprzez białą listę.
  • Do repozytorium pub.dev dodano możliwość unieważnienia już opublikowanej wersji pakietu, np. w przypadku wykrycia niebezpiecznych błędów lub podatności. Wcześniej w przypadku takich poprawek praktykowano publikowanie wersji korygującej, jednak w niektórych sytuacjach konieczne jest anulowanie istniejącego wydania i pilne zaprzestanie jego dalszej dystrybucji (np. jeśli poprawka nie jest jeszcze gotowa lub jeśli wydano pełne wydanie opublikowana przez pomyłkę zamiast wersji testowej). Po unieważnieniu pakiet nie jest już identyfikowany w poleceniach „pub get” i „pub upgrade”, a w systemach, które już go zainstalowały, przy następnym wykonaniu polecenia „pub get” pojawia się specjalne ostrzeżenie.
  • Dodano ochronę przed luką (CVE-2021-22567) spowodowaną użyciem w kodzie znaków Unicode zmieniających kolejność wyświetlania.
  • Naprawiono lukę (CVE-2021-22568), która umożliwia podszywanie się pod innego użytkownika pub.dev podczas publikowania pakietów na serwerze innej firmy, który akceptuje tokeny dostępu pub.dev oauth2. Lukę tę można na przykład wykorzystać do ataku na wewnętrzne i korporacyjne serwery pakietów. Ten problem nie dotyczy programistów, którzy hostują pakiety wyłącznie w witrynie pub.dev.

Jednocześnie zaprezentowano znaczącą wersję frameworku interfejsu użytkownika Flutter 2.8, który uważany jest za alternatywę dla React Native i pozwala w oparciu o jedną bazę kodu wypuszczać aplikacje na systemy iOS, Android, Windows, macOS i platformach Linux, a także tworzyć aplikacje do uruchamiania w przeglądarkach. Niestandardowa powłoka dla systemu operacyjnego mikrojądra Fuchsia opracowanego przez Google zbudowana jest na bazie Fluttera. Należy zauważyć, że w ciągu ostatniego półrocza liczba aplikacji Flutter 2 w sklepie Google Play wzrosła z 200 tys. do 375 tys., tj. prawie dwa razy.

Główna część kodu Fluttera jest zaimplementowana w języku Dart, a silnik wykonawczy do wykonywania aplikacji napisany jest w C++. Podczas tworzenia aplikacji, oprócz natywnego języka Dart Fluttera, możesz używać interfejsu Dart Foreign Function do wywoływania kodu C/C++. Wysoką wydajność wykonania osiąga się poprzez kompilowanie aplikacji do kodu natywnego dla platform docelowych. W takim przypadku program nie wymaga ponownej kompilacji po każdej zmianie - Dart udostępnia tryb gorącego przeładowania, który pozwala na wprowadzenie zmian w działającej aplikacji i natychmiastową ocenę wyniku.

Wśród zmian w nowej wersji Fluttera odnotowano optymalizację szybkości uruchamiania i zużycia pamięci na urządzeniach mobilnych. Łatwiej jest łączyć aplikacje z usługami backendu, takimi jak Firebase i Google Cloud. Ustabilizowano narzędzia do integracji z Google Ads. Znacząco ulepszono obsługę kamer i wtyczek internetowych. Zaproponowano nowe narzędzia upraszczające rozwój, na przykład dodano widżet do uwierzytelniania za pomocą Firebase. Zaktualizowano silnik Flame, przeznaczony do tworzenia gier 2D przy użyciu Fluttera.

Źródło: opennet.ru

Dodaj komentarz