Выпущена версия Dart 2.12 с нулевой безопасностью и совместимостью с C.

Google выпустила Dart 2.12, новую версию языка, используемого для создания приложений во Flutter. Релиз выходит вместе с Flutter 2.0.

С выпуск Флаттера 2.0Google также выводит стабильную версию Dart 2.12. Если вы не знали, Dart — это язык, который использует Flutter. Это язык на основе TypeScript, но в него включены некоторые дополнения к языковым функциям, в том числе те, о которых я собираюсь рассказать.

Нулевая безопасность

Нулевая безопасность — довольно замечательная функция языка. Это заставляет вас учитывать, будет ли переменная когда-либо иметь значение NULL, и явно обрабатывать потенциальные ситуации с нулевым значением, а также позволяет вам гарантировать, что определенные переменные никогда не будут иметь значение NULL.

В Dart 2.12 теперь есть полная поддержка нулевой безопасности с синтаксисом, аналогичным Swift и Kotlin. Существует даже интеллектуальное приведение, при котором, если Dart точно знает, что переменная, обычно допускающая значение NULL, не может иметь значение NULL, он неявно приводит ее к форме, не допускающей значение NULL.

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

Если вы решите выполнить миграцию, вы можете использовать встроенный инструмент миграции (дарт мигрировать) и/или руководство по миграции чтобы все настроить.

Кроме того, хотя нулевая безопасность включена в Dart 2.12, если вы создаете новый проект Flutter, нулевая безопасность не будет включена «из коробки». Вам нужно будет включить его вручную. В новых проектах Dart будет включена нулевая безопасность.

Интерфейс внешних функций

Несмотря на то, что Dart (и Flutter) фокусируется на полной кросс-платформенной совместимости, все же есть некоторые вещи, которые просто необходимо сделать изначально. Чтобы упростить собственные операции, в Dart имеется интерфейс внешних функций (FFI). FFI позволяет вам взаимодействовать с кодом C из Dart, не прибегая к странным вызовам API на основе строк или другим неуклюжим методам взаимодействия.

А в версии Dart 2.12 FFI стал стабильным, то есть он готов к использованию в производственных проектах и ​​в основном обладает полным набором функций.

С учетом этого в FFI есть некоторые изменения, в том числе пара кардинальных.

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

Теперь о кардинальных изменениях. Если вы использовали FFI, вам может потребоваться обновить код для работы с версией 2.12. В этой версии FFI вы больше не можете создавать пустые структуры. Если он вам по какой-то причине нужен, вы можете использовать новый тип «Непрозрачный». Также есть некоторые изменения в работе некоторых встроенных функций FFI, которые вы можете почитайте здесь.

Наконец, для FFI появился новый пакет, который позволяет создавать оболочки FFI из существующих файлов заголовков C, называемый ффиген. Если вам нужно использовать много кода C и множество методов API, это будет очень полезно. Даже если объем кода C у вас небольшой, это хорошая удобная функция.


И это почти все для Dart 2.12. С добавлением нулевой безопасности и стабильной библиотеки совместимости с Dart превращается в очень многофункциональный язык. Дайте нам знать, что вы думаете о Dart 2.12 в комментариях!