Привет в 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, то возможно уже заметили предупреждение: новые контейнеры более не могут использовать шаблон *
в качестве номера версии в зависимостях. Другими словами, так больше сделать нельзя:
[dependencies]
regex = "*"
Вместо этого вы должны указать конкретную версию или диапазон версий, используя одно из множества ограничений на версию из контейнера semver
: ^
, ~
или =
.
Звёздочка означает, что вы можете работать с любой версией данной зависимости. Скорее всего это не правда, и только добавляет лишние проблемы с совместимостью в экосистеме. Предупреждение о запрете звёздочки в качестве версии уже довольно давно выводится при публикации контейнера на Crates.io, а теперь оно станет настоящей ошибкой.
От переводчика
Хочу выразить благодарность defuz, Revertron, D101101 и всему русскоязычному сообществу Rust за помощь в переводе.
Автор: kstep