Dart 3.4 вышел сегодня! Этот релиз демонстрирует совместные усилия Dart и Flutter в посте Flutter 3.22 / Dart 3.4 / IO24, так что обязательно ознакомьтесь с полной информацией там. В этом посте мы расскажем о поддержке WebAssembly, а затем подробно остановимся на одном из основных пунктов дорожной карты для языка Dart на этот год: макросы.
Обновления WebAssembly
Сегодня мы рады сообщить, что полная поддержка WebAssembly (Wasm) стала доступна для веб-приложений Flutter в последнем стабильном выпуске Flutter 3.22!
Это многолетние инвестиции в Dart & Flutter. Если вы следили за развитием событий, то видели, как мы постепенно развиваемся:
-
Стандартизация WasmGC,
-
Добавление совершенно нового бэкенда компилятора Dart для генерации кода WasmGC, а также
-
Пересмотр наших предположений по взаимодействию с web и JavaScript для наилучшей поддержки Wasm.
Мы будем продолжать развивать WebAssembly. Наши следующие усилия позволят обеспечить полную поддержку Wasm в приложениях на чистом Dart, а также завершить некоторые недостающие функции (например, отложенную загрузку). Комплексный инструментарий для компиляции Wasm в Dart все еще находится в разработке, но вы можете попробовать предварительную версию в стабильном режиме уже сейчас, выполнив некоторые временные шаги. В дальнейшем мы также надеемся поддерживать Wasm в Dart за пределами JS-окружения, например, в стандартных системах выполнения Wasm, таких как wasmtime и wasmer.
Макросы Dart: повышение уровня абстракции разработки
Мы потратили много лет на разработку системы макросов Dart. Чтобы улучшить опыт разработки в Dart, макросы предоставляют решение для метапрограммирования, подобное генерации кода. Это решение встроено в язык Dart, чтобы обеспечить разработчикам максимальную производительность, эффективность и продуктивность. Теперь мы готовы предложить предварительный просмотр этого опыта!
Долгое время болевой точкой для разработчиков Dart была тривиальная, но утомительная схема сериализации и десериализации JSON-данных. Создание многократно используемого и достаточно мощного решения является сложной задачей в Dart, поскольку он не поддерживает рефлексию во время выполнения по соображениям производительности. В качестве альтернативы мы прибегаем к решениям по генерации кода, таким как JsonSerializable. Они зависят от внешних инструментов, которые запускаются перед самим кодом, что усложняет работу разработчика.
Сегодня мы анонсируем предварительную версию радикально нового подхода к сериализации и десериализации JSON: макроса JsonCodable.
Макрос — это тип кода, который генерирует дополнительный код путем интроспекции другого кода во время компиляции. Например, вот Dart-класс Vehicle с новым макросом JsonCodable:
@JsonCodable() class Vehicle { final String description; final int wheels; Vehicle(this.description, this.wheels); } void main() { final jsonString = Vehicle('bicycle', 2).toJson(); print('Vehicle serialized: $jsonString'); }
Итак, как это работает? Откуда взялся метод toJson() (и сопутствующий ему конструктор fromJson())? Это экспериментальная реализация нашей новой системы макросов, призванной упростить работу разработчиков. Когда компилятор Dart видит аннотацию @JsonCodable(), он немедленно находит определение макроса JsonCodable в реальном времени и начинает его выполнять. Вот как работает макрос:
-
Скринкаст, демонстрирующий опыт использования макроса: изначально автодополнения кода toJson не существует, но после добавления @JsonCodable в класс, автодополнение toJson появляется сразу. Долгосрочные цели по макросам
Конечная цель — дать сообществу возможность создавать свои собственные макросы. Это повышает уровень абстракции программирования на Dart. Возьмем, к примеру, дата-классы — самый популярный запрос для языка Dart. Мы рассмотрели возможность добавления встроенной поддержки дата-классов в Dart, но узнали, что мнения о том, что именно должна поддерживать такая конструкция, чтобы установить стандарт, сильно разнятся. Должны ли поля быть о системе макросов Dart, и попробовать предварительную версию макроса JsonCodable уже сегодня.
Другие улучшения
Как всегда, этот выпуск содержит все непрерывные разработки, которые направлены на создание лучшей версии Dart из возможных. В этом выпуске мы внесли следующие улучшения:
-
Решено более 50% ошибок автодополнения кода анализатора. (Пожалуйста, продолжайте сообщать о проблемах!)
-
Улучшено согласование анализа типов условных выражений, выражений if-null и выражений switch со спецификацией языка (журнал изменений).
-
Удалены неполные и непоследовательные инструменты из библиотеки dart:cli для погашения технического долга в Dart VM.
-
Устранено несколько недостатков для улучшения новой библиотеки
dart:js_interop.
Загляните в Changelog, чтобы узнать всю историю! Не забудьте прочитать совместную запись в блоге Dart и Flutter, посвященную этому релизу, чтобы получить полную информацию о наших совместных усилиях!
-
ссылка на оригинал статьи https://habr.com/ru/articles/814411/

Добавить комментарий