Команда разработчиков языка Rust выпустила обновление 1.31. Этот релиз они назвали также Rust 2018. В нём собраны воедино все улучшения и изменения, подготовленные за последние три года, и обновлены документация, поддержка рабочих сред и сайт. А первую стабильную версию языка, Rust 1.0, разработчики назвали Rust 2015, чтобы чётко обозначить разницу между двумя мажорными версиями языка.
В проектах на Rust можно переключить используемую версию языка, 2015 или 2018. Так можно добиться максимальной совместимости проекта с версией Rust.
В дальнейшем Rust 2015 будет поддерживаться наравне с Rust 2018. Однако в Rust 2015 попадут только такие будущие изменения, которые потенциально не «поломают» старый код:
Rust — язык программирования, ориентированный на безопасность, скорость работы и параллелизм. Безопасность достигается при помощи ряда проверок во время компиляции, а скорость — за счёт «абстракций с нулевой стоимостью». Rust подходит для написания низкоуровневого кода, например, драйверов устройств или операционных систем. При этом функция автоматического управления памятью освобождает разработчика от возникающих во время написания низкоуровневого кода проблем.
Обновления для Rust 2015 и 2018
Обновлена поддержка Rust средами разработки (Visual Studio Code, IntelliJ, Atom, Sublime Text 3, Eclipse) и оптимизирован компилятор. Также стабилизированы инструменты rustfmt, Clippy и rustfix для автоматического исправления кода и подсказок разработчику.
Основные обновления затронули четыре области:
- WebAssembly. После обновления WebAssembly в 2017 году разработчик может интегрировать крейт Rust в существующее веб-приложение. Экосистема крейтов Cargo собирает небольшие модули в одно приложение. А с помощью крейтов web-sys и js-sys можно вызвать из Rust-кода такие веб-API, как fetch () или appendChild (). При этом отсутствие поддержки WebAssembly некоторых типов данных компенсирует wasm-bindgen.
- Встраиваемые (embedded) компоненты. Стабилизирована поддержка стандартной библиотеки Rust на встраиваемых устройствах, а также добавлены тесты системы непрерывной интеграции для микроконтроллеров. Внося изменения для рабочей панели, разработчик не затронет встраиваемые приложения.
- Разработка сетевых сервисов. В Rust 2018 добавлены ключевые слова async/await, которые в будущем будут использоваться в асинхронном коде. Таким образом, для серверных приложений создаётся большее количество подключений, а однопоточные процессоры используются полноценно. Для такого кода невозможно запустить проверку багов, однако async/await сообщат компилятору информацию для проверки вызова асинхронных функций.
- Инструменты командной строки. Команда дополнила библиотеки набором высокоуровневых абстракций.
Для обновления вашего проекта с использования Rust 2015 на использование 2018 нужно выполнить команду cargo fix, которая запустит инструмент rustfix.
Нововведения для Rust 2018
Новая версия отличается от Rust 2015 несколькими улучшениями:
- Нелексические времена жизни (Non-Lexical Lifetimes). Разработчики Rust доработали проверку заимствования. Она помогает не допускать висячих ссылок и других проблем с управлением памятью. В Rust 2018 проверка заимствования стала умнее: теперь она отслеживает тот момент, когда переменная перестаёт использовать данные, и не блокирует после этого другие запросы к этим данным.
- Система модулей. Изменена работа путей, по которым производится доступ в пространствах имён. Теперь чаще всего использование extern crate не требуется. Абсолютные пути начинаются с названия крейта, где ключевое слово crate относится к текущему крейту.
Полный список обновлений опубликован на GitHub.