[Перевод] Релиз Dart 2.10: на шаг ближе к null-safety
» />
Команда языка Dart постепенно приближается к одному из самых мажорных релизов — null-safety. Эта фича есть у многих лидеров рынка, включая Kotlin и TypeScript. По понятным причинам этот релиз нельзя сделать в виде рубильника: одним днём и простым апдейтом. Набравшее скорость сообщество, выпустившее огромное количество пакетов уже не сможет перейти на мажорную версию по щелчку пальцев. Поэтому процесс этот поступательный и не такой быстрый, как хотелось бы. Тем не менее сомневаться в том, что уже довольно скоро язык станет значительно лучше и удобнее не приходится!
Мы в Wrike не смогли обойти стороной обновление релиз Dart 2.10 и переводим статью из официального блога Dartlang.
Новый, унифицированный dart
для всех ключевых задач. А также апдейт по таймлайну null-safety и принципах миграции.
Авторы: Майкл Томсен и Кевин Мур
Сегодня мы анонсируем новый Dart, версия 2.10 (two-dot-ten). В этом релизе представлен новый унифицированный Dart: единый инструмент для всех возможных задач разработчика, таких как создание проектов, анализ и форматирование кода, тестирование и компиляция приложений. У нас есть обновленная информация об этапах работ по null-safety, а также принципы миграции существующего кода.
Новый унифицированный инструмент разработчика Dart
Dart составляет основу Flutter SDK: он не только предоставляет язык и среду выполнения, которые используются в приложениях Flutter, но и поддерживает многие основные задачи разработчика, такие как форматирование, анализ и тестирование кода. Однако, в то время как Flutter всегда имел один универсальный инструмент разработчика (команда flutter
), у Dart исторически было много небольших инструментов (например, dartfmt
и dartanalyzer
). Dart 2.10 обзавелся новым, унифицированным инструментом разработчика dart
, очень похожим на инструмент flutter
. Этот новый инструмент поддерживает все основные задачи, такие как создание новых проектов и пакетов, анализ и форматирование кода, а также запуск, компиляцию и тестирование проектов. Чтобы использовать этот инструмент, просто выполните команду dart
:
Flutter включает новый Dart во Flutter SDK. Начиная с версии Flutter 1.22 SDK, директория
(которая чаще всего находится в PATH
) содержит команды и flutter
, и dart
. Если вы занимаетесь разработкой как на Flutter, так и на Dart, вы получаете возможности обоих из одного пакета Flutter SDK
без необходимости устанавливать что-либо еще.
Если хотите загрузить и установить другой Dart SDK (если вам требуется другая версия), убедитесь, что SDK инструментаdart
, который вы хотите использовать по умолчанию, находится в начале переменной окруженияPATH
.
В следующих стабильных релизах мы планируем расширить функциональность инструмента dart
и постепенно отказаться от меньших инструментов (dartdoc
, dartfmt
, dartanalyzer
и т.п.). В 2021 году мы планируем выпустить Dart SDK, содержащий исключительно инструмент dart
. Рекомендуем вам переключиться на новый инструмент при запуске команд Dart сейчас, будь то вручную в терминале или в системах сборки (CI), и сообщить нам, если чего-то не хватает или что-то работает не так, как должно.
О null-safety
Мы хорошо поработали с null-safety с тех пор, как несколько месяцев назад запустили первую техническую превью. В полной null-safety мы видим инструмент предотвращения трудно обнаруживаемых null-ошибок, а также дополнительный бонус к улучшению производительности. Если хотите узнать больше, рекомендуем нашу новую страницу Understanding null safety. Если предпочитаете короткое видео, посмотрите the null safety video с мероприятия Flutter Day, прошедшего несколько месяцев назад.
Когда null-safety будет готова к использованию? Вот наш прогноз:
Работа Flutter с техническим превью 2: Мы успешно перенесли большую часть Flutter. Ожидаем, что скоро — вероятно, в течение следующего месяца — среда Flutter будет полностью перенесена, и, таким образом, мы будем готовы к экспериментальному использованию Flutter. Вы сможете попробовать null-safety во Flutter и выполнить пробную миграцию ваших приложений и пакетов Flutter. Вам нужно будет использовать экспериментальный флаг. Не используйте экспериментальные функции в продакшене и не публикуйте перенесенные пакеты.
Ранняя миграция пакетов с помощью бета-версии: позже в этом году мы завершим улучшение производительности и обеспечим достаточное количество тестов, чтобы быть уверенными, что функция работает должным образом и что обратная совместимость надежна. К тому времени мы опубликуем бета-версию этой функции, и вам не нужно будет передавать экспериментальный флаг. Надеемся, что владельцы пакетов начнут их миграцию в null-safety, тем самым проведя последний раунд проверки, насколько эта функция готова к стабильному выпуску.
Использование в продакшене stable: в зависимости от обратной связи на запуск бета-версии мы исправим все оставшиеся проблемы, а затем опубликуем их в stable. Трудно назвать конкретные сроки, но мы думаем о начале следующего года. Как только эта функция станет стабильной, мы надеемся на широкое внедрение null safety приложениями, опубликованными в сторах, и многими и пакетами, опубликованными в pub.dev в стабильных версиях.
Принципы перехода к null-safety
Мы хотели бы поделиться нашими главными принципами для миграции на null-safety.
Переходите, когда будете готовы
Null-safety — это фундаментальное изменение в системе Dart. Это меняет основы объявления переменных, потому что мы решили сделать переменные ненулевыми по умолчанию:
Такое фундаментальное изменение было бы разрушительным, если бы мы настаивали на принудительном переходе. Мы хотим, чтобы вы сами выбрали подходящее время, поэтому null-safety — это опциональная функция: вы можете использовать последние версии Dart и Flutter без необходимости включать null-safety. Вы даже можете иметь зависимость между пакетами с уже включенной null-safety и приложениями или пакетами, которые ее еще не подключили.
Переходите постепенно, по порядку
Мы настоятельно рекомендуем переносить код по порядку, начиная с «листьев» графа зависимостей. Например, если C зависит от B, который зависит от A, сначала перенесите в null-safety A, затем B, затем C. Этот порядок применяется независимо от того, являются ли A, B и C библиотеками, пакетами или приложениями.
Почему порядок так важен? Вы можете добиться некоторого успеха в переносе кода до миграции ваших зависимостей, но вы рискуете столкнуться с необходимостью повторной миграции, если ваши зависимости изменят свои API в процессе переноса. Мы предоставим инструменты, которые помогут вам узнать, какие из зависимостей были успешно перенесены. Если вы являетесь автором пакета, то, чтобы избежать риска нарушения API, подождите, пока все ваши зависимости не будут перенесены, прежде чем публиковать null-safe версию.
Используйте автоматизированные инструменты для снижения затрат на миграцию
Когда ваши зависимости готовы и вы решаете мигрировать, можете использовать наш инструмент миграции. Он работает, анализируя весь ваш существующий код, ищет, какие объявления могут быть не не допускающими null (они остаются без изменений), а какие должны допускать значение null (нужен маркер ?
null в объявлении).
Инструмент миграции интерактивен, поэтому вы можете просмотреть свойства, которые он определил. Если вы не согласны с каким-либо из выводов инструмента, можно добавить подсказки о допустимости пустых значений, чтобы изменить вывод. Например, если вы хотите сделать API не допускающим null, даже если потребуется некоторый рефакторинг, можно сообщить об этом инструменту и повторно запустить анализ миграции. Добавление всего нескольких подсказок по миграции может оказать огромное влияние на качество перехода.
Получите полную выгоду при полном использовании
Как только весь ваш код — и пакеты, от которых он зависит — будет перенесен, он может выполняться с гарантированной null-safety. До этого момента ваш код будет работать и компилироваться так же, как сейчас, но абсолютная null-safety обеспечит полную верификацию времени выполнения и оптимизацию компилятора. Выполнение тестов с полной null-safety поможет избежать проблем с присваиванием null во время выполнения, а компиляция приложений с null-safety гарантирует, что вы получите оптимизации сразу и в будущем, например, меньший по размеру скомпилированный вывод и более быстрое выполнение.
Дальнейшие действия
Новый инструмент разработчика dart
доступен сегодня в SDK Dart 2.10 и в SDK Flutter 1.22. Если у вас уже есть Flutter SDK, вы можете получить Dart SDK с помощью команды dart
, просто запустив flutter upgrade
; это даст вам Flutter 1.22 SDK, в который встроен Dart 2.10. Рекомендуем вам немедленно переключиться на новый инструмент dart
и связаться с нами, если что-то отсутствует или не работает должным образом.
Скоро у нас будет больше новостей о null-safety. Скорее всего, в течение следующего месяца, когда наши друзья в команде Flutter будут иметь фреймворк Flutter с поддержкой null-safety, готовый к экспериментам. Следите за обновлениями в блоге Flutter. А пока вы можете поэкспериментировать с null-safe кодом Dart с помощью DartPad с null-safety и узнать больше о дизайне функции в документации по null-safety.