Вышла новая версия инструментов разработки языка программирования Rust. Rust — язык системного программирования, предназначенный для написания быстрых и в то же время безопасных (в том числе и во многопоточной среде) приложений.
В данном релизе упор был сделан на переработку документации языка, приведение к единому виду стандартной библиотеки, улучшение пакетного менеджера Cargo и поддержки Windows.
Обзор обновлений в новой версии:
- Около 1900 изменений в коде.
- Основные изменения
- Вводный документ (и набор сопроводительной документации) был полностью переписан и теперь называется The Rust Guide.
- Множественные улучшения пакетного менеджера Cargo и его поддержка большим числом библиотек.
- Большое количество изменений API в стандартной библиотеке std для соответствия текущим стандартам разработки Rust. Все изменения отражены в документации.
- Ряд библиотек был вынесен из дерева Rust во внешние проекты на Github: uuid, semver, glob, num, hexfloat, fourcc. Они могут быть установлены с помощью Cargo.
- Новая возможность: lifetime elision - позволяет во многих случаях не указывать явно аннотацию времени жизни (lifetime) в сигнатурах методов.
- Появилась версия компилятора для Windows 64-bit.
- Язык
- Операцию индексации теперь можно перегрузить в своих типах данных с помощью трейтов (trait) Index и IndexMut.
- Конструкция if let теперь выполняется только при совпадении let-паттерна.
- Новый синтаксис для срезов (slices), например:
[0..4]
. Поддержать подобный синтаксис в своих типах данных можно с помощью трейтов Slice и SliceMut. - Синтаксис для сравнения с образцом срезов стал постфиксным, теперь он имеет вид:
[a, b, c..]
. - При использовании интервалов с включением в сравнении с образцом теперь верхняя границы считается не включенной: вместо
0..3
стоит указывать0...4
. - Элементы кортежей и кортежных структур теперь могут быть получены с помощью нового синтаксиса индексации:
value.0
. - Атрибут
#[crate_id]
теперь не поддерживается, версионирование выполняется исключительно пакетным менеджером. - Импорт библиотек с переименованием теперь записывается как
extern crate foo as bar
вместоextern crate bar = foo
. - Оператор
use
с переименованием теперь имеет новый синтаксис:use foo as bar
вместоuse bar = foo
. - Добавлен новый, более эффективный тип замыканий: unboxed closures. Со временем текущий тип замыканий будет заменен новым.
- Добавлено ключевое слово
move
, которое описывает замыкания, захватывающие переменные по значению. - Модификация (mutation) и присваивание теперь не могут использоваться в pattern guards.
- Параметризованные структуры и перечисления теперь могут быть ограничены (иметь trait bounds).
- Новый, более гибкий синтаксис указания ограничений типов с помощью ключевого слова
where
- Трейт
Share
переименован вSync
для того, чтобы термин shared обозначал только shared reference. - Для типов динамического размера добавлен трейт
Sized
. Чтобы указать, что параметр типа не должен иметь строгий размер, стоит использовать ограничение:<Sized? T>
. - Замыкания теперь могут возвращать
!
, примеры сигнатур:|| -> !
,proc() -> !
. - Границы времени жизни (lifetime bounds) теперь могут быть применены к параметрам типа и типам объектов.
- Старый тип автоматически автоматически управляемых ссылок со сборкой мусора
GC<T>
окончательно был удален. В будущем появится новая реализация управления памятью со сборкой мусора.
- Библиотеки
- Улучшена документация к ряду библиотек.
- Обновлены битовые векторы:
collections::bitv
. - Библиотека url признана устаревшей. Рекомендуется использовать http://github.com/servo/rust-url, устанавливаемую с помощью Cargo.
- Почти все типы данных потоков (stream) ввода-вывода теперь могут быть клонированы и закрыты в других потоках (thread) выполнения.
- Добавлен тип
std::time::Duration
для использования в методах ввода-вывода, зависящих от таймера. - The runtime I/O abstraction layer that enabled the green thread scheduler to do non-thread-blocking I/O has been removed, along with the libuv-based implementation employed by the green thread scheduler. This will greatly simplify the future I/O work.
-
collections::btree
переписана с учетом более эффективного и близкого к Rust проектирования.
- Утилиты
- Вывод rustdoc теперь содержит метку об уровне стабильности API.
- Флаг
--crate-name
теперь может указывать имя компилируемой единицы кода (crate), что ранее указывалось в коде атрибутом#[crate_name
. - Флаг
-C metadata
указывает дополнительные метаданные, хэш которых должен попасть в символьные имена собираемого бинарника. - Флаг
-C extra-filename
указывает дополнительную информацию, добавляемую в имя выходного файла для использования пакетным менеджером. - Улучшена генерация отладочной информации, которая теперь лучше совместима при отладке через gdb и lldb.
- Добавлена экспериментальная поддержка параллельной компиляции с помощью флага rustc
-C codegen-units
. - Компилятор теперь не добавляет по умолчанию в бинарные файлы путь для поиска библиотек (rpath).
- Прочее
- Оптимизировано использование стека с помощью аннотаций LLVM.
- Rust для Linux более совместим со старыми версиями ядер и дистрибутивов.
>>> Подробности