Выпуск языка программирования Rust 1.45
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Опубликован релиз языка системного программирования Rust 1.45, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.
Автоматическое управление памятью в Rust избавляет разработчика от ошибок при манипулировании указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io.
Основные новшества:
- Устранена давняя недоработка при выполнении преобразований между целыми числами и числами с плавающей запятой. Так как компилятор Rust использует LLVM в качестве бэкенда, операции преобразования типов выполнялись через инструкции промежуточного кода LLVM, такие как fptoui, в которых имеется одна существенная особенность - неопределённое поведение, если результирующее значение не умещается в целевой тип. Например, при преобразовании вещественного значения 300 с типом f32 в целый тип u8 результат непредсказуем и может отличаться на разных системах. Проблема в том, что подобная особенность проявляется в коде, не помеченном как "unsafe".
Начиная с Rust 1.45 поведение при переполнении размера типа жёстко регламентировано, а операция преобразования "as" выполняет проверку на переполнение и приводит преобразуемое значение к максимальному или минимальному значению целевого типа (для вышеотмеченного примера значение 300 будет преобразовано в 255). Для отключения подобных проверок предусмотрены дополнительные вызовы API "{f64, f32}::to_int_unchecked", работающие в режиме unsafe.
fn cast(x: f32) -> u8 {
x as u8
}
fn main() {
let too_big = 300.0;
let too_small = -100.0;
let nan = f32::NAN;
let x: f32 = 1.0;
let y: u8 = unsafe { x.to_int_unchecked() };
println!("too_big_casted = {}", cast(too_big)); // на выходе 255
println!("too_small_casted = {}", cast(too_small)); // на выходе 0
println!("not_a_number_casted = {}", cast(nan)); // на выходе 0
}
- Стабилизировано использование процедурных макросов, похожих на функции, в выражениях, шаблонах и утверждениях. Ранее подобные макросы могли вызываться не везде, а только в определённых частях кода (отдельным вызовом, не переплетающимся с другим кодом). Расширение способов вызова макросов, похожих на функции, было одним из требовалось для обеспечения работы web-фреймворка Rocket в стабильных выпусках Rust. Ранее для достижения дополнительной гибкости задания обработчиков в Rocket требовалось включение экспериментальной возможности "proc_macro_hygiene", недоступной в стабильных версиях Rust. Теперь указанная функциональность встроена в стабильные выпуски языка.
- Разрешено использование диапазонов с типом "char" для перебора значений диапазона (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
for ch in 'a'..='z' {
print!("{}", ch);
}
println!(); // Будет выведено "abcdefghijklmnopqrstuvwxyz"
- В разряд стабильных переведена новая порция API, в том числе стабилизированы
Arc::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc::Weak::as_ptr,
rc::Weak::from_raw,
rc::Weak::into_raw,
str::strip_prefix,
str::strip_suffix,
sync::Weak::as_ptr,
sync::Weak::from_raw,
sync::Weak::into_raw,
char::UNICODE_VERSION,
Span::resolved_at,
Span::located_at,
Span::mixed_site,
unix::process::CommandExt::arg0.
- В компилятор rustc добавлена поддержка переопределения различных возможностей целевой платформы при помощи флага "target-feature", например, "-C target-feature=+avx2,+fma". Также добавлены новые флаги:
"force-unwind-tables" для генерации "раскрученных" (unwind) таблиц вызовов, независимо от стратегии обработки краха; "embed-bitcode" для управления включением биткода LLVM в генерируемые rlibs. Флаг "embed-bitcode" по умолчанию задействован в Cargo для оптимизации времени сборки и потребления дискового пространства.
- Обеспечен третий уровень поддержи для платформ mipsel-sony-psp и thumbv7a-uwp-windows-msvc. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования и публикации официальных сборок.
Дополнительно можно отметить рассказ о создании простейшего приложения на языке Rust, стартующего при помощи системного загрузчика и готового к самодостаточной загрузке вместо операционной системы.
Статья является первой в серии, посвящённой демонстрацией приёмов, востребованных при низкоуровневом программировании и разработке ОС.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://blog.rust-lang.org/202...)
- OpenNews: Выпуск операционной системы Redox OS 0.5, написанной на языке Rust
- OpenNews: Выпуск языка программирования Rust 1.44
- OpenNews: Для Linux и Redox представлена реализация Libc на языке Rust
- OpenNews: Предложение по обсуждению вопроса добавления в ядро Linux средств для разработки на языке Rust
- OpenNews: Линус Торвальдс подключился к обсуждению начальной реализации поддержки Rust в ядре Linux
Похожие новости:
- [Open source, Rust, Компиляторы, Программирование, Системное программирование] Rust 1.45.0: стабилизация функциональных процедурных макросов, исправление дефектов преобразования (перевод)
- [Angular, Open source, Rust, Визуализация данных, Отладка] Время в логах
- [Java, Kotlin] Производитель/потребитель на Kafka и Kotlin (перевод)
- Линус Торвальдс подключился к обсуждению начальной реализации поддержки Rust в ядре Linux
- Предложение по обсуждению вопроса добавления в ядро Linux средств для разработки на языке Rust
- Выпуск системы инициализации sysvinit 2.97
- [Rust, Алгоритмы, Демосцена] Как я написал интро 4K на Rust — и оно победило (перевод)
- В Fedora рассматривают возможность прекращения поддержки BIOS при загрузке
- Monolinux - однофайловый дистрибутив, загружающийся на CPU ARMv7 528 MHz за 0.37 секунд
- [C++, Rust, Программирование, Системное программирование] Microsoft: Rust является 'лучшим шансом' в отрасли программирования безопасных систем (перевод)
Теги для поиска: #_rust, #_boot
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 01:35
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Опубликован релиз языка системного программирования Rust 1.45, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Автоматическое управление памятью в Rust избавляет разработчика от ошибок при манипулировании указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo, позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io. Основные новшества:
Статья является первой в серии, посвящённой демонстрацией приёмов, востребованных при низкоуровневом программировании и разработке ОС. =========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 01:35
Часовой пояс: UTC + 5