Опубликован релиз языка программирования общего назначения Rust 1.58, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
रस्टको स्वचालित मेमोरी व्यवस्थापनले विकासकर्तालाई पोइन्टरहरू हेरफेर गर्दा त्रुटिहरूबाट बचाउँछ र निम्न-स्तर मेमोरी हेरफेरको कारण उत्पन्न हुने समस्याहरूबाट जोगाउँछ, जस्तै मेमोरी क्षेत्रलाई खाली गरिसकेपछि पहुँच गर्ने, नल पोइन्टहरू, बफर ओभररन्स, इत्यादि। पुस्तकालयहरू वितरण गर्न, निर्माणहरू प्रदान गर्न र निर्भरताहरू व्यवस्थापन गर्न, परियोजनाले कार्गो प्याकेज प्रबन्धक विकास गर्दछ। crates.io रिपोजिटरी होस्टिंग लाइब्रेरीहरूको लागि समर्थित छ।
मुख्य आविष्कारहरू:
- В блоках форматирования строк, в дополнение к ранее доступной возможности подстановки явно перечисленных после строки переменных по номеру и имени, реализована возможность подстановки произвольных идентификаторов через добавление в строку выражений «{идентификатор}». Например: // Ранее поддерживались конструкции: println!(«Hello, {}!», get_person()); println!(«Hello, {0}!», get_person()); println!(«Hello, {person}!», person = get_person()); // теперь можно указывать let person = get_person(); println!(«Hello, {person}!»);
Идентификаторы также можно указывать непосредственно в параметрах форматирования. let (width, precision) = get_format(); for (name, score) in get_scores() { println!(«{name}: {score:width$.precision$}»); }
Новая подстановка работает во всех макросах, поддерживающих определение формата строки, за исключением макроса «panic!» в версиях языка Rust 2015 и 2018, в которых panic!(«{ident}») обрабатывается как обычная строка (в Rust 2021 подстановка срабатывает).
- Изменено поведение структуры std::process::Command на платформе Windows, которая при выполнении команд из соображений безопасности больше не ищет исполняемые файлы в текущем каталоге. Текущий каталог исключён так как может быть использован для организации выполнения кода злоумышленника в случае запуска программ в не заслуживающих доверия каталогах (CVE-2021-3013). Новая логика определения исполняемых файлов подразумевает поиск в каталогах Rust, в каталоге приложения, системном каталоге Windows и каталогах, указанных в переменной окружения PATH.
- В стандартной библиотеке расширено число функций, помеченных «#[must_use]» для вывода предупреждения в случае игнорирования возвращаемого значения, что помогает выявить ошибки, вызванные предположением, что функция изменит значения, а не вернёт новое значение.
- एपीआई को एक नयाँ भाग स्थिर को श्रेणी मा सारियो, विधिहरु र विशेषताहरु को कार्यान्वयन सहित स्थिर गरिएको छ:
- Metadata::is_symlink
- Path::is_symlink
- {integer}::saturating_div
- Option::unwrap_unchecked
- Result::unwrap_unchecked
- Result::unwrap_err_unchecked
- "const" विशेषता, जसले स्थिरताको सट्टा कुनै पनि सन्दर्भमा प्रयोग गर्ने सम्भावना निर्धारण गर्दछ, प्रकार्यहरूमा प्रयोग गरिन्छ:
- Duration::new
- Duration::checked_add
- अवधि:: saturating_add
- Duration::checked_sub
- अवधि:: saturating_sub
- Duration::checked_mul
- अवधि:: saturating_mul
- Duration::checked_div
- Разрешено разыменование указателей «*const T» в контекстах «const».
- В пакетном менеджере Cargo в метаданные пакета добавлено поле rust_version, а в команду «cargo install» добавлена опция «—message-format».
- В компиляторе реализована поддержка механизма защиты CFI (Control Flow Integrity), добавляющего перед каждым косвенным вызовом функции проверки для выявления некоторых форм неопределённого поведения, которые потенциально могут привести к нарушению нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции.
- В компиляторе добавлена поддержка 5 и 6 версии формата coverage-сопоставлений LLVM, используемого для оценки охвата кода при тестировании.
- कम्पाइलरमा, LLVM को न्यूनतम संस्करणका लागि आवश्यकताहरू LLVM 12 मा बढाइएको छ।
- Реализован третий уровень поддержки для платформы x86_64-unknown-none. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
Дополнительно можно отметить публикацию компанией Microsoft выпуска библиотек Rust for Windows 0.30, позволяющих использовать язык Rust для разработки приложений для ОС Windows. В набор входят два crate-пакета (windows и windows-sys), через которые можно обращаться к Win API в программах на языке Rust. Код для поддержки API генерируется динамически из метаданных с описанием API, что позволяет реализовать поддержку не только уже существующих вызовов Win API, но вызовов, которые появятся в будущем. В новой версии добавлена поддержка целевой платформы UWP (Universal Windows Platform), реализованы типажи Handle и Debug.
स्रोत: opennet.ru