Dostępny język Dart 2.14 i framework Flutter 2.5

Firma Google opublikowała wydanie języka programowania Dart 2.14, 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, które posiada ponad 20 tysięcy pakietów.

Główne zmiany w wydaniu Dart 2.14:

  • Dodano nowy operator potrójnego przesunięcia (>>>), który w odróżnieniu od operatora „>>” wykonuje nie arytmetykę, a przesunięcie logiczne, które działa bez uwzględnienia bitu znaku (przesunięcie odbywa się bez dzielenia na liczby dodatnie i ujemne).
  • Usunięto ograniczenie dotyczące argumentów typu, które uniemożliwiało użycie typów funkcji ogólnych jako argumentu typu. Na przykład teraz możesz określić: późna lista (T)>idFunkcje; var wywołanie zwrotne = [ (wartość T) => wartość]; późna funkcja S (T)>(S) f;
  • Zezwalaj na określanie argumentów z typami w adnotacjach, takich jak @Deprecated. Na przykład możesz teraz określić: @TypeHelper (42, „Znaczenie”)
  • Metody statyczne hash, hashAll i hashAllUnordered zostały dodane do standardowej biblioteki (rdzenia) w klasie Object. Klasa DateTime usprawniła obsługę czasu lokalnego podczas konwersji zegarów między czasem letnim i zimowym, które nie są podzielne przez jedną godzinę (na przykład w Australii używane jest przesunięcie 30 minut). Pakiet ffi dodał obsługę mechanizmu alokacji pamięci areny, który automatycznie zwalnia zasoby. Pakiet ffigen dodał możliwość generowania definicji typedef typów Dart z języka C.
  • 250 najpopularniejszych pakietów z repozytorium pub.dev i 94% z 1000 najlepszych zostało przełączonych na tryb „null security”, który pozwoli uniknąć awarii spowodowanych próbami użycia zmiennych, których wartość jest niezdefiniowana i ustawiona na „Null ” „ Tryb oznacza, że ​​zmienne nie mogą mieć wartości null, chyba że jawnie przypisano im wartość null. Tryb ściśle uwzględnia typy zmiennych, co pozwala kompilatorowi zastosować dodatkowe optymalizacje. Zgodność typu jest sprawdzana w czasie kompilacji, np. jeśli spróbujesz przypisać wartość „Null” do zmiennej o typie, który nie oznacza niezdefiniowanego stanu, np. „int”, wyświetli się błąd.
  • Zaproponowano ujednolicone zestawy reguł dla analizatora kodu (lintera), zapewniające jednoczesną obsługę sprawdzania zgodności z wytycznymi dotyczącymi stylu kodu dla frameworku Dart i Flutter. Ze względów historycznych zasady kodowania dla Fluttera i Darta były inne, dodatkowo w przypadku Darta obowiązywały dwa zestawy reguł - pedantyczne od Google'a i reguły od społeczności programistów Dart. Dart 2.14 wprowadza nowy, wspólny zestaw reguł dla lintera, który ma być domyślnie używany w nowych projektach Dart i w Flutter SDK. Zestaw zawiera podstawowe reguły (pakiet lints/core.yaml), zalecane reguły dodatkowe (lints/recommended.yaml) i zalecenia specyficzne dla Fluttera (flutter_lints/flutter.yaml). Użytkownikom reguł pedantycznych zaleca się przejście na nowy styl kodowania w oparciu o zalecenia z dokumentacji Dart.
  • W programie formatter dokonano optymalizacji formatowania kaskadowych bloków kodu, co może znacząco poprawić wydajność formatowania i uniknąć dwuznacznej interpretacji własności elementów wyrażenia. Na przykład wywołanie „..doIt” w wyrażeniu „var wynik = errorState? foo : bad..doIt()” nie dotyczy części warunkowej „złego” bloku, ale całego wyrażenia, dlatego przy formatowaniu jest ono teraz oddzielane: var wynik = errorState ? foo: źle ..doIt();
  • Do zestawu SDK dodano obsługę procesorów Apple M1 (Silicon), co oznacza zarówno możliwość uruchamiania Dart VM, narzędzi i komponentów SDK w systemach z procesorem Apple Silicon, jak i obsługę kompilowania plików wykonywalnych dla tych układów.
  • W komendzie „dart pub” dodano obsługę nowego pliku usługi „.pubignore”, który umożliwia zdefiniowanie listy plików, które zostaną pominięte przy publikacji pakietu w repozytorium pub.dev. Ustawienia te nie kolidują z listą ignorowanych „.gitignore” (w niektórych sytuacjach pub.dev może chcieć uniknąć przesyłania plików potrzebnych w Git, na przykład wewnętrznych skryptów używanych podczas programowania).
  • Włożono prace w celu poprawy wydajności polecenia „dart test”, które obecnie nie wymaga ponownej kompilacji testów po zmianie pubspec, jeśli numer wersji się nie zmienił.
  • Zakończono obsługę kompilacji w trybie zgodności z ECMAScript 5 (zmiana spowoduje utratę kompatybilności z przeglądarką IE11).
  • Poszczególne narzędzia stagehand, dartfmt i dart2native uznano za przestarzałe i zastąpiono je wbudowanymi poleceniami wywoływanymi za pośrednictwem narzędzia dart.
  • Mechanizm rozszerzeń natywnych maszyny wirtualnej jest przestarzały. Aby wywołać kod natywny z kodu Dart, zaleca się użycie nowego interfejsu Dart FFI (Foreign Function Interface).

Jednocześnie zaprezentowano znaczącą wersję frameworku interfejsu użytkownika Flutter 2.5, który jest uważany za alternatywę dla React Native i pozwala w oparciu o jedną bazę kodu wypuszczać aplikacje dla systemów iOS, Android, Windows, macOS i Linux platformach, 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.

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.

Główne zmiany w Flutter 2.5:

  • Dokonano znaczących optymalizacji wydajności. Na platformach iOS i macOS zaimplementowano prekompilację shaderów dla API grafiki Metal. Poprawiona wydajność przetwarzania zdarzeń asynchronicznych. Rozwiązano problem z opóźnieniami, gdy moduł zbierający elementy bezużyteczne odzyskuje pamięć z nieużywanych obrazów (na przykład podczas odtwarzania 20-sekundowego animowanego pliku GIF liczba operacji usuwania elementów bezużytecznych została zmniejszona z 400 do 4. Opóźnienia podczas przekazywania wiadomości między Dart i Objective- C/Swift zredukowano do 50% (iOS) lub Java/Kotlin (Android). Dodano natywną obsługę kompilacji dla systemów opartych na chipie Apple Silicon.
    Dostępny język Dart 2.14 i framework Flutter 2.5
  • Dla platformy Android wprowadzono obsługę uruchamiania aplikacji w trybie pełnoekranowym. Kontynuowano realizację koncepcji projektowej „Material You”, prezentowanej jako opcja Material Design nowej generacji. Dodano nowy stan MaterialState.scrolledUnder, zaimplementowano dynamiczne wyświetlanie pasków przewijania podczas zmiany rozmiaru oraz zaproponowano nowy interfejs do wyświetlania banerów powiadomień.
  • Możliwości wtyczki aparatu zostały znacznie rozszerzone, dodając narzędzia do sterowania autofokusem, ekspozycją, lampą błyskową, zoomem, redukcją szumów i rozdzielczością.
  • Narzędzia programistyczne (DevTools) zostały ulepszone, obejmując zaktualizowany tryb inspekcji widżetów, a także narzędzia do identyfikowania opóźnień renderowania i śledzenia kompilacji shaderów.
    Dostępny język Dart 2.14 i framework Flutter 2.5
  • Ulepszone wtyczki dla Visual Studio Code i IntelliJ/Android Studio.

Źródło: opennet.ru

Dodaj komentarz