1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Dart-350.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 10.03.2025 00:06 5767d61

Выпуск Dart 3.5, обновление новой карты развития Dart

После выпуска Flutter 3.24, Dart также представил свою версию 3.5. Несмотря на то, что этот выпуск пока не включает официальное внедрение макропрограммирования, текущий прогресс весьма значителен.

Взаимодействие платформы Web с JavaScript

Начиная с Dart 3.4, Dart поддерживает компиляцию в WASM Native, что позволяет приложениям Flutter Web компилироваться в нативный WebAssembly. Для этого требуется новый модель взаимодействия Dart-JS, который теперь находится в стабильной версии начиная с Dart 3.5.

С версии 3.5, браузерные API-интерфейсы пакета package:web были обновлены до версии 1.0, заменив старый dart:html-библиотеку. Разработчики плагинов настоятельно рекомендуются обновиться до использования package:web, так как старые API взаимодействия (dart:html, dart:js, package:js и т.д.) будут отключены в последующих версиях Dart.

Взаимодействие Dart с нативными системами

В Dart 3.5 было проведено множество улучшений в области нативного взаимодействия. Теперь полностью поддерживаются прямые вызовы из Dart к C, Java, Kotlin, Objective-C и Swift без использования методических каналов.Библиотека FFI всегда поддерживала взаимодействие с C, но начиная с Dart 3.5, FFI была модифицирована, чтобы позволять передачу указателей через объекты Dart TypedData, что позволяет избежать необходимости копирования памяти из Dart в нативную среду. Это значительно увеличивает скорость парсинга протоколов с помощью upd.```dart Pointer<NativeFunction<Void Function(Pointer)>> functionPointer;

final myFunction = functionPointer.asFunction<void Function(Uint8List)>(isLeaf: true); // или final myFunction = functionPointer.asFunction<void Function(ByteBuffer)>(isLeaf: true);


Прямое взаимодействие между Java и Kotlin с использованием генератора [JNIgen](https://pub.dev/packages/jnigen) также стало доступным (на данный момент это предварительная версия), позволяющее автоматически создавать связывающие коды для вызова Java и Kotlin из Dart через Java Native Interface (JNI).

Основное преимущество этих улучшений заключается в повышении производительности и добавлении поддержки исключений Java и топ-уровневых функций Kotlin. Также был прекращён прежний подход на основе C для связи, что сделало использование более удобным. Interop с Objective-C основан на генераторах [FFI и FFIgen](https://pub.dev/packages/ffigen) (на данный момент в режиме preview), что позволило добавить поддержку протоколов Objective-C и часто используемых типов данных, таких как `NSString`. Для примера использования пакета, созданного с помощью FFIgen, можно обратиться к [cupertino_http](https://github.com/dart-lang/http/tree/master/pkgs/cupertino_http), который демонстрирует прямое взаимодействие между Dart и библиотекой URL сети от Apple.

В будущем планируется дальнейшее улучшение interop — как в плане завершенности, так и включении поддержки Swift.

# Хранилище пакетов Pub.dev

Pub.dev — это хранилище пакетов для Dart, где сообщество может делиться и находить пакеты с богатыми возможностями.Для Pub были сделаны множественные улучшения. Во-первых, была улучшена поддержка [тем](https://dart.dev/tools/pub/pubspec#topics): авторы пакетов могут использовать категории (например, Widgets), чтобы помечать свои пакеты.

> Теперь Pub [интегрировала](https://github.com/dart-lang/pub-dev/blob/master/doc/topics.yaml) общие темы, которые относятся к одной категории, но имеют небольшие различия в формулировках (например, widgets и widget).

Во-вторых, был добавлен новый командный пункт `pub unpack`, который предоставляет простой способ скачивания пакета локально. Например, если вы хотите запустить примеры пакета:

```bash
$ dart pub unpack path
Загрузка пакета path версии 1.9.0 в директорию `./path-1.9.0`...

$ cd path-1.9.0/example/

$ dart run example.dart
Текущий стиль пути: posix
Текущий путь процесса: /Users/mit/tmp/path-1.9.0/example

В-третьих, был добавлен новый командный пункт pub downgrade --tighten, который позволяет проверять все ограничения версий зависимостей пакета. При выполнении он обновляет более слабые ограничения до минимальной версии, которую может решить Pub.

Обновление дорожной карты

monorepo

"Monorepo" — это метод сборки группы связанных пакетов и исходного кода приложений в одном репозитории. Monorepo не только удобен для хранения всех исходных кодов вместе, но также важен для обеспечения совместимости различных пакетов и приложений внутри одного репозитория.На данный момент производительность наших инструментов (особенно анализатора) может быть недостаточной, а основная проблема заключается в том, что для каждого пакета и его зависимостей загружается несколько перекрывающихся контекстов анализа. Эта проблема будет решена в следующем выпуске Dart, и уже применена в Flutter Engine: https://github.com/flutter/engine/pull/54157/files## Pub.dev

Пользователи pub.dev долгое время требуют улучшения метрик использования/скачиваний каждого пакета, что поможет авторам понять, сколько людей использует их работу, а также поможет пользователям узнать, какие пакеты используются другими разработчиками.

Мы рады сообщить, что в этом направлении достигнут значительный прогресс, и мы надеемся выпустить предварительную версию до конца года.

Совместимость Dart

Для Java/Kotlin с использованием JNIgen ожидается завершение основной поддержки за следующие два квартала, после чего экспериментальная версия будет обновлена до стабильной версии 1.0: https://github.com/orgs/dart-lang/projects/69/

Аналогичная цель установлена для взаимодействия с Objective-C: https://github.com/orgs/dart-lang/projects/87

Следующий шаг — исследование взаимодействия Dart со Swift, первые эксперименты выглядят многообещающе, и мы планируем добавить экспериментальную поддержку к началу следующего года.## Нативная совместимость и связывание нативного исходного кода

В большинстве случаев взаимодействие осуществляется через вызов API, существующих в операционной системе, что означает, что эти API всегда доступны на этих нативных платформах.

Однако в некоторых случаях исходный код нативного приложения не прямым образом включен в хост, что представляет собой практическую проблему для авторов пакетов, использующих это взаимодействие, относительно того, как связывать и сборку этого исходного кода.

Для поддержки этого, Dart рассматривает создание системы нативного актива, которая позволит выпускать пакеты Dart, содержащие нативный исходный код, а также стандартизованный протокол для автоматической сборки и связывания этого исходного кода с помощью инструментов командной строки Dart и Flutter.

Это должно открыть новую серию примеров взаимодействия, а также обеспечить простой опыт для разработчиков, использующих пакеты, зависящие от нативного исходного кода.

Макросы

На данный момент большую часть времени Dart язык и компиляторные команды уделяют работе над макросами, которые были представлены ранее в Dart 3.4. Это сложная задача для Dart, которая может привести к некоторому регрессу в ключевых случаях, таких как горячее перезагруживание, поэтому потребуется больше усилий для полной реализации.Кроме макросов, сейчас также проводится исследование нескольких других небольших языковых особенностей, таких как Dart funnel.

В настоящее время команда Dart активно работает над перезаписью Dart formatter, старое дизайнерское решение хорошо работало многие годы, но с успехом Flutter, команда Dart хочет перейти на новый стиль нового стиля, который лучше адаптирован к декларативному коду, часто пишущемуся Flutter пользователями, а перезапись скоро будет завершена и выпущена.

Больше информации доступно здесь: https://github.com/dart-lang/dart_style/issues

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/CarGuo-GSYFlutterBook.git
git@api.gitlife.ru:oschina-mirror/CarGuo-GSYFlutterBook.git
oschina-mirror
CarGuo-GSYFlutterBook
CarGuo-GSYFlutterBook
master