Выпуск языка программирования Rust 1.33
2 марта 2019 года
Состоялся релиз языка системного программирования Rust 1.33, развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.
Автоматическое управление памятью в Rust избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io.
В подготовке нового выпуска приняли участие 163 разработчика. Основные новшества:
- Расширены возможности функций, определённых с использованием выражения "const fn", которые могут вызываться не только как обычные функции, но и использоваться в любом контексте вместо констант. Данные функции вычисляются на этапе компиляции, а не в ходе выполнения, поэтому на них накладываются определённые ограничения, такие как запрет булевых операторов ("&&" и "||") и возможность чтения только из констант.
В новом выпуске внутри функций "const fn" добавлена возможность вызова других функций, определённых через выражение "const unsafe" (ранее допускался только вызов функций, определённых через "const fn"). Также обеспечена поддержка инициализированных присвоений let (например, "let mut x = 1" и "let mut x = 1"), явно типизированных шаблонов вида "const fn foo((x, y): (u8, u8)) { ... }", операторов присвоения ("x=y" и "x += y") и обособленных выражений (например, "3;").
Указанные изменения позволили применить признак "const" для многих функций и методов стандартной библиотеки, включая overflowing_{add, sub, mul, shl, shr}, rotate_left, rotate_right, wrapping_{add, sub, mul, shl, shr}, is_positive, is_negative, get, count_ones, count_zeros, leading_zeros, trailing_zeros, swap_bytes, from_be, from_le, to_be, to_le и Ipv4Addr::new;
- Представлена концепция закрепления объектов в определённой области памяти ( Pinning), основанная на использовании типа std::pin::Pin<P> и типажа (trait)
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.