Анонс Rust 1.6

• Константин Степанов • новости • поддержите на Patreon

Привет в 2016-м году! Мы рады объявить первый в этом году релиз Rust — 1.6. Rust — системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.

Как всегда, вы можете установить Rust 1.6 с соответствующей страницы нашего сайта, а также посмотреть подробный список изменений для версии 1.6 на Github. Этот релиз включил в себя 1100 патчей.

Что вошло в стабильную версию 1.6

В этот релиз вошли ряд небольших доработок, одно большое нововведение и изменение на Crates.io.

Стабилизация libcore

Самое большое нововведение в 1.6 — стабилизация библиотеки libcore. Стандартная библиотека Rust состоит из двух слоёв: маленькая базовая библиотека libcore и полная стандартная библиотека libstd, которая построена на основе libcore. Сама libcore полностью платформенно-независимая и требует, чтобы было определено несколько внешних функций. Полная библиотека libstd основана на libcore и добавляет поддержку выделения памяти, операций ввода-вывода и многопоточность. При использовании Rust во встроенных средах и при написании операционных систем часто отказываются от libstd и используют только libcore.

Стабилизация libcore — важный шаг к возможности написания самого низкоуровневого кода на стабильной версии Rust. Однако, работа ещё не закончена. Стабилизация позволит вырасти экосистеме библиотек вокруг libcore, но её использование в приложениях пока ещё не поддерживаются полностью. Ожидайте новостей из этой области в будущих релизах.

Стабилизация библиотек

Около 30 библиотечных функций и методов стабилизированы в 1.6. Самые заметные улучшения включают в себя:

Семейство функций drain() для коллекций. Эти методы позволяют вам перемещать элементы из коллекций, при этом сохраняя память, в которой они размещены, тем самым в некоторых случаях уменьшая необходимость в выделении памяти.

Несколько реализаций типажа From для конвертирования между типами из стандартной библиотеки, в основном между целочисленными числами и числами с плавающей точкой.

Ну и наконец, метод Vec::extend_from_slice(), ранее известный как push_all(). Он значительно быстрее, чем более общий метод extend().

Можете также посмотреть на подробный список изменений.

На Crates.io запрещено использовать звёздочки вместо версий зависимостей

Если вы поддерживаете контейнер на Crates.io, то возможно уже заметили предупреждение: новые контейнеры более не могут использовать шаблон * в качестве номера версии в зависимостях. Другими словами, так больше сделать нельзя:

1
2
[dependencies]
regex = "*"

Вместо этого вы должны указать конкретную версию или диапазон версий, используя одно из множества ограничений на версию из контейнера semver: ^, ~ или =.

Звёздочка означает, что вы можете работать с любой версией данной зависимости. Скорее всего это не правда, и только добавляет лишние проблемы с совместимостью в экосистеме. Предупреждение о запрете звёздочки в качестве версии уже довольно давно выводится при публикации контейнера на Crates.io, а теперь оно станет настоящей ошибкой.