Команда разработчиков Rust рада представить первый в этом году релиз Rust — 1.6. Rust — это системный язык программирования, при разработке которого внимание сосредоточено на безопасности, скорости и параллелизме. Как обычно, вы можете установить Rust 1.6 с соответствующей страницы на официальном сайте, а также посмотреть примечания к выпуску на GitHub. Выпуск включает в себя около 1100 патчей и содержит ряд небольших улучшений, одно важное изменение, а также изменение на 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 = "*"
Вместо этого вы должны указать конкретную версию или диапазон версий, используя одну из опций: ^
, ~
, или =
.
Использование маски означает, что вы можете работать с любой возможной версией зависимости. Скорее всего это не так, и может являться причиной ненужных проблем в экосистеме. Прошло достаточно времени с момента появления этого предупреждения, теперь пришло время превратить его в ошибку.