Что нового в Dart 3.3

Dart 3.3 вышел! В нем появилась функция Extension Types, новые модели взаимодействия с JavaScript и библиотеками для браузера. А еще Google выпустила бета-версию Google AI Dart SDK. Юра Петров, Flutter Team Lead в Friflex, делится первым переводом официального релиза Dart от Google.

Типы расширений

Extension Types или типы расширений — это обертки для типов с нулевой стоимостью. С их помощью можно оптимизировать код, чувствительный к производительности, особенно при работе с хост-платформами. Типы расширений помогают расширить функциональность существующих типов: добавлять новые методы и поля без создания отдельного экземпляра класса.

extension type Wrapper(int i) { void showValue() { print('my value is $i'); } } void main() { final wrapper = Wrapper(42); wrapper.showValue(); // Prints 'my value is 42' }

Пример выше определяет Wrapper как тип расширения, но использует его как обычный тип Dart. Вы можете создавать его экземпляры и вызывать функции. Ключевое отличие заключается в том, что Dart компилирует Wrapper как обычное целое число (int). Типы расширений позволяют легко создавать тип с уникальными членами без косвенных затрат на выделение памяти для типа-обертки.

Начиная с Dart 2.7 элементы расширения (extension members) позволяли добавлять функции и свойства к существующим типам. Типы расширения или extension types могут делать то же самое, а еще позволяет скрывать базовую структуру данных за новым API.

Это значит, что при взаимодействии с хост-платформами вы сможете использовать нативные типы напрямую, не создавая обертки и сохраняя чистый и производительный Dart API. Почитать подробнее про extension types можно в документации на сайте Dart.

Новая модель взаимодействия с JavaScript

Dart 3.3 представляет новую модель взаимодействия с библиотеками JavaScript и веб-платформами. API для работы с JavaScript — библиотеки dart: js_interop — дают доступ к типизированному API. Оно четко определяет границу между двумя языками с помощью статической проверки. Это устраняет целый класс проблем еще до компиляции. Кроме новых API для доступа к коду JavaScript в Dart 3.3 есть модель представления типов JavaScript в Dart с использованием типов расширений.

import 'dart:js_interop'; /// Represents the `console` browser API. extension type MyConsole(JSObject _) implements JSObject { external void log(JSAny? value); external void debug(JSAny? value); external void info(JSAny? value); external void warn(JSAny? value); }

Синтаксис на основе на типов расширений дает большую выразительность и надежность, чем элементы расширения (extention members). Использовать JavaScript API из Dart становится проще. Больше деталей — в документации по взаимодействию с JS на сайте Dart.

Улучшение библиотек для браузера

Начиная с версии 1.0, Dart SDK включает полный набор библиотек для браузера. Среди них — основная библиотека dart: html, а также библиотеки для SVG, WebGL и другие.

Улучшенная модель взаимодействия с JavaScript позволила переосмыслить эти библиотеки. В будущем поддержка библиотек для браузера сосредоточится на пакете: web. Такой подход упрощает управление версиями, ускоряет обновления и соответствует ресурсам MDN. Эта цепочка улучшений ведет к следующему важному этапу: компиляции Dart в WebAssembly

WebAssembly

Dart 3.3 позволяет авторам пакетов и приложений заложить основу для WebAssembly в веб-приложениях. Хотя поддержка WebAssembly во Flutter Web остается экспериментальной, команда активно ее дорабатывает.

Чтобы запустить Flutter-приложения в веб-браузере с помощью WebAssembly, нужно перенести весь код — из приложения и всех зависимостей — на новый механизм JavaScript Interop и пакет package: web. Старые библиотеки JavaScript и браузера по-прежнему поддерживаются при компиляции в JavaScript-код.

Google AI Dart SDK

Google выпустила бета-версию Google AI Dart SDK. Теперь можно добавлять в приложения на Dart и Flutter функции на основе семейства моделей генеративного искусственного интеллекта Gemini. Оставляем ссылки на пакет google_generative_ai и краткое руководство по работе с API Gemini в приложения на Dart и Flutter от Google.

0
Комментарии
-3 комментариев
Раскрывать всегда