После выпуска Flutter 3.24, Dart также представил свою версию 3.5. Несмотря на то, что этот выпуск пока не включает официальное внедрение макропрограммирования, текущий прогресс весьма значителен.
Начиная с 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 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 не только удобен для хранения всех исходных кодов вместе, но также важен для обеспечения совместимости различных пакетов и приложений внутри одного репозитория.На данный момент производительность наших инструментов (особенно анализатора) может быть недостаточной, а основная проблема заключается в том, что для каждого пакета и его зависимостей загружается несколько перекрывающихся контекстов анализа. Эта проблема будет решена в следующем выпуске Dart, и уже применена в Flutter Engine: https://github.com/flutter/engine/pull/54157/files## Pub.dev
Пользователи pub.dev долгое время требуют улучшения метрик использования/скачиваний каждого пакета, что поможет авторам понять, сколько людей использует их работу, а также поможет пользователям узнать, какие пакеты используются другими разработчиками.
Мы рады сообщить, что в этом направлении достигнут значительный прогресс, и мы надеемся выпустить предварительную версию до конца года.
Для 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 )