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

OSCHINA-MIRROR/CarGuo-GSYFlutterBook

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

Оригинальная статья: https://medium.com/dartlang/announcing-dart-2-14-b48b9bb2fb67

Релиз Dart 2.14 предоставляет лучшую поддержку для процессоров Apple Silicon и включает новые возможности повышения продуктивности, такие как поймать ошибки linter с помощью анализа стилей кода, более быстрый инструмент выпуска, улучшенный форматирование цепочек вызовов и некоторые небольшие обновления языковых возможностей.

Поддержка Apple Silicon в Dart SDK

С момента выпуска Apple новых Apple Silicon процессоров в конце 2020 года, Dart SDK стремится увеличить поддержку native выполнения на этих процессорах.

Поддержка Apple Silicon была официально добавлена в Dart 2.14.1. При скачивании Dart SDK для macOS важно выбрать вариант ARM64, важно отметить, что Dart SDK в Flutter SDK пока не связан с этой улучшенной версией.

Эта версия позволяет запускать SDK/Dart VM самостоятельно на Apple Silicon, а также поддерживает запуск скомпилированных исполняемых файлов через dart compile. Поскольку инструменты командной строки Dart используют native Apple Silicon, они значительно быстрее запускаются.

Общие правила linter для Dart и Flutter

Разработчики обычно хотят, чтобы их код следовал определённому стилю, многие из которых не просто предпочитаемые стили (например, известная проблема табуляции против пробелов), но также могут привести к ошибкам или ввести в заблуждение стиль программирования.Например, Dart Style Guide требует использования фигурных скобок для всех конструкций управления потоком, таких как if-else инструкции, что помогает предотвратить классическую проблему висящего else, когда существует двусмысленность интерпретации нескольких вложенных if-else инструкций.

Пример проблемы висящего else

Другой пример — это типизация при объявлении переменных. Хотя использование типа при объявлении переменных со значением нетрудно, при объявлении неинициализированной переменной важно указывать её тип, так как это гарантирует типизацию.

Пример важности указания типа для неинициализированной переменной

Хороший стиль кода обычно поддерживается через рецензирование кода, однако применение правил во время написания кода с использованием статического анализа часто является более эффективным подходом. При написании кода в Dart такие статические правила анализа являются высоконастраиваемыми параметрами. Dart предоставляет более сотни правил стиля (также известных как lints). Благодаря такому широкому выбору, при первоначальной настройке активных правил может возникнуть некоторое замешательство. Конфигурационная поддержка: https://dart.dev/guides/language/analysis-options
Проверочные правила (lint): https://dart.dev/tools/linter-rulesКоманда Dart поддерживает руководство по стилю программирования Dart (Effective Dart: Style), которое описывает лучшие способы написания и проектирования кода на Dart.

Руководство по стилю: https://dart.dev/guides/language/effective-dart/style

Многие разработчики и движок оценки сайтов pub.dev используют набор проверочных правил, известный как Pedantic. Pedantic возник из внутреннего руководства по стилю Google для Dart, поэтому он отличается от общего руководства по стилю Dart по историческим причинам. Кроме того, фреймворк Flutter никогда не использовал набор правил Pedantic и имеет свой собственный набор правил.

Это может звучать немного запутано, но с выпуском 2.14 команда Dart рада объявить о новом наборе проверочных правил для реализации руководства по стилю кода. Начиная с этого выпуска, эти правила будут применяться по умолчанию в новых проектах Dart и Flutter:

  • package:lints/core.yaml: основные правила стиля кода Dart, рекомендованные командой Dart для всех Dart-кодов; движок оценки pub.dev был обновлен до использования lints/core вместо Pedantic.
  • package:lints/recommended.yaml: основные правила плюс дополнительные рекомендованные правила, которые следует использовать для всех универсальных Dart-кодов.
  • package:flutter_lints/flutter.yaml: дополнительные правила, специфичные для Flutter, которые следует использовать для всех кодов Flutter.Если вы уже используете существующий проект Dart или Flutter, настоятельно рекомендуется обновиться до этих новых наборов правил. Процесс перехода от Pedantic к новым правилам описан здесь: https://github.com/dart-lang/lints#migrating-from-packagepedantic.

Dart Formatter и Cascade Notation

Выпуск Dart 2.14 включает некоторые улучшения в работе форматтера Dart с использованием cascade notation для форматирования кода.

Ранее форматтер иногда создавал путаницу при некоторых ситуациях, например, что вызывается в следующем примере?

var result = errorState ? foo : bad..doIt();

По внешнему виду кажется, что это вызов метода doIt() объекта bad, однако на самом деле cascade notation применяется ко всему выражению ?, то есть вызов происходит над результатом всего выражения, а не только над ложной частью. Новый форматтер более явно показывает эту структуру.

var result = errorState ? foo : bad \
..doIt();

Команда Dart значительно ускорила форматирование кода с использованием цепочек; в генерируемом Dart коде для протокольных буферов можно заметить, что скорость форматирования увеличилась в 10 раз.

Поддержка игнорирования файлов в Pub

На данный момент при публикации пакета командой publish на платформе pub.dev, Pub собирает все файлы из директории, за исключением скрытых файлов (начинающихся с точки) и файла .gitignore.В версии Dart 2.14 обновленная команда Pub поддерживает новый файл .pubignore, где разработчики могут указывать файлы, которые они не хотят загружать на pub.dev. Этот файл использует ту же структуру, что и файл .gitignore.

Для получения более подробной информации обратитесь к документации по публикации пакетов https://dart.dev/tools/pub/publishing#what-files-are-published

Улучшенная производительность Pub и "dart test"

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

Например, тестовый инструмент Dart запускается командой dart test, которая фактически является оберткой над командой pub run test:test. Перед тем как запустить точку входа test, Pub компилирует его в нативный код для более быстрого выполнения.

До версии Dart 2.14 любое изменение в файле pubspec (включая изменения, не связанные с package:test) делало предварительное компилирование тестового кода недействительным, что приводило к выводу сообщений типа "предварительно скомпилированные исполняемые файлы":

$ dart test
Предварительно скомпилированные исполняемые файлы... (11.6c)
Предварительно скомпилированный test:test.
00:01 +1: Все тесты прошли успешно!

В Dart 2.14 Pub стал более умным в процессах сборки, позволяя выполнять сборку только при изменении версий, а также улучшая параллелизацию шагов сборки, что позволяет завершать сборку быстрее.## Новые языковые возможности

Dart 2.14 также включает несколько новых языковых возможностей.

Первым добавленным новым оператором является тройное правое сдвиг (>>>). Он аналогичен существующему оператору сдвига (>>), но вместо арифметического сдвига (>>) этот оператор выполняет логический или беззнаковый сдвиг, при котором нулевые биты сдвигаются в старший значащий бит, независимо от того, положительна ли число или отрицательна.

Кроме того, были удалены старые ограничения на использование типовых параметров, которые ранее запрещали использовать функциональные типы generics в качестве типовых параметров. Теперь следующие конструкции допустимы:

// Примеры допустимых конструкций в Dart 2.14
List<T extends Object?> list;
Map<K extends num, V extends String> map;

// Примеры недопустимых конструкций до Dart 2.14
List<T extends Function>; // Ошибка до Dart 2.14
Map<K extends int, V extends double>; // Ошибка до Dart 2.14

Последние изменения в отношении аннотаций типов были сделаны, такие как использование аннотации @Deprecated, которая обычно используется в Dart-коде для захвата метаданных. Ранее аннотациям нельзя было передавать параметры типа, поэтому конструкция вроде @TypeHelper<int>(42, "Значение") была недопустимой, но теперь это ограничение снято.## Изменения пакетов и основной библиотеки

Были выполнены значительные улучшения в основных пакетах и библиотеках Dart, среди которых:

  • dart:core: Добавлены статические методы hash, hashAll и hashAllUnordered.

  • dart:core: Класс DateTime теперь лучше работает с локальным временем.

  • package:ffi: Добавлена поддержка управления памятью с использованием aren (пример доступен здесь: sample). Arenas представляют собой форму облачного управления памятью, при которой ресурсы автоматически освобождаются после выхода из области/региона.

  • package:ffigen: Теперь поддерживаются генерация Dart-определений из определений типов C.

Основные изменения

Dart 2.14 также включает несколько существенных изменений, которые, вероятно, затронут лишь некоторые специфические случаи.

#46545: Отказ от поддержки ECMAScript 5

Все современные браузеры поддерживают последнюю версию ECMAScript, поэтому два года назад Dart объявил о планах отказаться от поддержки ECMAScript 5 (ES5), что позволило использовать последние улучшения ECMAScript и создавать более компактные сборки. В Dart 2.14 этот процесс завершен, и Dart Web компилятор больше не поддерживает ES5. Таким образом, старые браузеры (например, IE11) больше не поддерживаются.### #46100: Отказ от использования stagehand, dartfmt и dart2native

В октябрьском блоге Dart 2.10 2020 года было объявлено о переходе всех команд CLI разработчиков Dart на единый инструмент dart. В Dart 2.14 были отменены команды dartfmt и dart2native, а также прекращено использование stagehand, поскольку аналогичные инструменты уже включены в dart-tool.

#45451: Устаревание расширения Native для VM

Dart SDK прекратил поддержку расширения Native для Dart VM, которое является старым механизмом вызова нативного кода из Dart-кода. Вместо этого используется новая механика Dart FFI (Foreign Function Interface), которая активно развивается, чтобы сделать её более мощной и удобной для использования.

Опубликовать ( 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