Доступні мова Dart 2.14 та фреймворк Flutter 2.5

Компанія Google опублікувала реліз мови програмування Dart 2.14, що продовжив розвиток кардинально переробленої гілки Dart 2, яка відрізняється від початкового варіанта мови Dart застосуванням сильної статичної типізації (типи можуть виводитися автоматично, тому вказівка ​​типів не є обов'язковою, але динамічна типізація більше не використовується і обчислена спочатку тип закріплюється за змінною та надалі застосовується сувора перевірка типу).

Особливості мови Dart:

  • Звичний і простий вивчення синтаксис, природний для програмістів на JavaScript, Сі і Java.
  • Забезпечення швидкого запуску та високої продуктивності для всіх сучасних web-браузерів та різних типів оточень, від портативних пристроїв до потужних серверів.
  • Можливість визначення класів та інтерфейсів, що дозволяють використовувати інкапсуляцію та повторно використовувати існуючі методи та дані.
  • Вказівка ​​типів дозволяє спростити налагодження та виявлення помилок, робить код більш ясним та читаним, спрощує його доопрацювання та аналіз сторонніми розробниками.
  • Серед типів, що підтримуються: різні види хешів, масивів і списків, черги, числові і рядкові типи, типи для визначення дати і часу, регулярні вирази (RegExp). Є можливість створення своїх типів.
  • Для організації паралельного виконання пропонується використовувати класи з атрибутом isolate, код яких виконується повністю в ізольованому просторі окремої області пам'яті, взаємодіючи з основним процесом через відправлення повідомлень.
  • Підтримка використання бібліотек, що спрощують підтримку та налагодження великих веб-проектів. Сторонні реалізації функцій можуть підключатися у вигляді бібліотек, що розділяються. Програми можна розбити на частини та доручити розробку кожної з частин окремій команді програмістів.
  • Набір готових інструментів для підтримки розробки мовою Dart, включаючи реалізацію засобів динамічної розробки та налагодження з виправленням коду на льоту (edit-and-continue).
  • Для спрощення розробки мовою Dart поставляється SDK, пакетний менеджер pub, статичний аналізатор коду dart_analyzer, набір бібліотек, інтегроване середовище розробки DartPad та плагіни з підтримкою Dart для IntelliJ IDEA, WebStorm, Emacs, Sublime Text 2 та Vim.
  • Додаткові пакети з бібліотеками та утилітами розповсюджуються через репозиторій pub, що налічує понад 20 тисяч пакетів.

Основні зміни у випуску Dart 2.14:

  • Доданий новий оператор потрійного зсуву (>>>), який на відміну від оператора «>>» виконує не арифметичний, а логічний зсув, що працює без урахування знакового біта (зсув відбувається без поділу на позитивні та негативні числа).
  • Знято обмеження на аргументи типу, які не дозволяли використовувати загальні типи функцій як аргумент з типом. Наприклад, зараз можна вказувати: late List (T)> idFunctions; var callback = [ (T value) => value]; late S Function (T)>(S) f;
  • Дозволено вказати аргументи з типами в анотаціях, таких як @Deprecated. Наприклад, тепер можна вказувати: @TypeHelper (42, "The meaning")
  • У стандартну бібліотеку (core) до класу Object додані статичні методи hash, hashAll і hashAllUnordered. У класі DateTime покращена обробка локального часу при переведенні годинника між літнім і зимовим часом не кратним одній годині (наприклад, в Австралії використовується зсув на 30 хвилин). У пакет ffi додано підтримку механізму виділення пам'яті arena, що автоматично вивільняє ресурси. У пакет ffigen додано можливість генерації typedef-визначень типів Dart з мови C.
  • 250 найпопулярніших пакетів з репозиторію pub.dev і 94% з top-1000 переведені на застосування режиму безпечного використання значення Null (null safety), який дозволять уникнути крахів, викликаних спробами використання змінних, значення яких не визначено та виставлено в Null ». Режим передбачає, що змінні що неспроможні мати невизначені значення, якщо їм явно присвоюється значення null. У режимі строго враховуються типи змінних, що дозволяє компілятор застосовувати додаткові оптимізації. Відповідність типів перевіряється на етапі компіляції, наприклад, у разі спроби присвоєння значення "Null" змінної з типом, що не має на увазі невизначений стан, таким як "int", буде виведена помилка.
  • Запропоновано уніфіковані набори правил для аналізатора коду (linter), що забезпечують одночасну підтримку перевірки дотримання рекомендацій щодо стилю оформлення коду для Dart та фреймворку Flutter. З історичних причин правила оформлення коду для Flutter і Dart відрізнялися, крім того для Dart в побуті знаходилося два набори правил - педантичні від Google і правила від спільноти розробників Dart. У Dart 2.14 представлений новий загальний набір правил для linter, який вирішено застосовувати за умовчанням у нових проектах Dart та Flutter SDK. Набір включає базові правила (пакет lints/core.yaml), рекомендовані додаткові правила (lints/recommended.yaml) та специфічні для Flutter рекомендації (flutter_lints/flutter.yaml). Користувачам педантичних правил рекомендовано перейти на використання нового стилю кодування, що базується на рекомендаціях з документації Dart.
  • У formatter внесені оптимізації форматування каскадних блоків коду, що дозволяють помітно підвищити продуктивність форматування і уникнути неоднозначного трактування належності елементів виразу. Наприклад, виклик «..doIt» у виразі «var result = errorState? foo : bad..doIt()» стосується не умовної частини блоку «bad», а всього виразу, тому при форматуванні тепер поділяється: var result = errorState ? foo : bad ..doIt();
  • У SDK додано підтримку процесорів Apple M1 (Silicon), що передбачає як можливість запуску Dart VM, утиліт і компонентів SDK на системах з процесором Apple Silicon, так і підтримку компіляції виконуваних файлів для зазначених чіпів.
  • У команду dart pub додана підтримка нового службового файлу .pubignore, що дозволяє визначити список файлів, які будуть пропущені при публікації пакета в репозиторії pub.dev. Вказані настройки не перетинаються зі списком ігнорування «.gitignore» (у деяких ситуаціях у pub.dev потрібно не передавати файли, які потрібні в Git, наприклад, внутрішні скрипти, які застосовуються під час розробки).
  • Проведено роботу з підвищення продуктивності команди dart test, яка тепер не вимагає повторної компіляції тестів після зміни pubspec, якщо номер версії не змінився.
  • Припинено підтримку компіляції в режимі сумісності з ECMAScript 5 (зміна призведе до втрати сумісності з браузером IE11).
  • Оголошено застарілими окремі утиліти stagehand, dartfmt та dart2native, на зміну яким прийшли вбудовані команди, що викликаються через утиліту dart.
  • Переведено в розряд застарілих механізм VM Native Extensions. Для виклику нативного коду з коду мовою Dart рекомендовано використовувати новий інтерфейс Dart FFI (Foreign Function Interface).

Одночасно представлений значний реліз фреймворку побудови інтерфейсу користувача Flutter 2.5, який розглядається як альтернатива React Native і дозволяє на основі однієї кодової бази випускати програми для платформ iOS, Android, Windows, macOS та Linux, а також створювати програми для запуску в браузерах. На основі Flutter побудована оболонка користувача мікроядерної операційної системи Fuchsia, що розвивається в Google.

Основна частина коду Flutter реалізована мовою Dart, а runtime-движок для виконання додатків написано на C++. При розробці програм, крім рідної для Flutter мови Dart, можна використовувати інтерфейс Dart Foreign Function для виклику коду C/C++. Висока продуктивність виконання досягається завдяки компіляції програм у машинний код для цільових платформ. При цьому програму не потрібно перекомпілювати після кожної зміни — Dart надає режим гарячого перезавантаження, що дозволяє вносити зміни до програми, що працює, і відразу оцінювати результат.

Основні зміни у Flutter 2.5:

  • Внесено значні оптимізації продуктивності. На платформах iOS та macOS реалізована передкомпіляція шейдерів для графічного API Metal. Підвищено ефективність обробки асинхронних подій. Вирішено проблему із затримками під час вивільнення збирачем сміття пам'яті від зображень, що не використовуються (наприклад, під час відтворення 20-секундного анімованого GIF число операцій складання сміття знижено з 400 до 4. До 50% знижено затримки при передачі повідомлень між Dart і Objective-C (iOS) або Java/Kotlin (Android) Додана підтримка рідного складання для систем на базі чіпа Apple Silicon.
    Доступні мова Dart 2.14 та фреймворк Flutter 2.5
  • Для платформи Android налагоджено підтримку роботи програм у повноекранному режимі. Продовжено реалізацію концепції оформлення «Material You», що підноситься як варіант Material Design наступного покоління. Додано новий стан MaterialState.scrolledUnder, реалізовано динамічне відображення смуг прокручування при зміні розміру та запропоновано новий інтерфейс для відображення банерів із повідомленнями.
  • Значно розширено можливості плагіна для роботи з камерою, в якому з'явилися засоби для керування автофокусом, експозицією, спалахом, збільшенням, придушенням шумів та роздільною здатністю.
  • Поліпшено інструменти для розробників (DevTools), в яких з'явився оновлений режим інспектування віджетів, а також надані засоби для виявлення затримок під час малювання та відстеження компіляції шейдерів.
    Доступні мова Dart 2.14 та фреймворк Flutter 2.5
  • Поліпшено плагіни для Visual Studio Code та IntelliJ/Android Studio.

Джерело: opennet.ru

Додати коментар або відгук