ការចេញផ្សាយភាសាកម្មវិធីគោលបំណងទូទៅ Rust 1.59 ដែលបង្កើតឡើងដោយគម្រោង Mozilla ប៉ុន្តែឥឡូវនេះត្រូវបានបង្កើតឡើងក្រោមការឧបត្ថម្ភពីអង្គការមិនរកប្រាក់ចំណេញឯករាជ្យ Rust Foundation ត្រូវបានបោះពុម្ពផ្សាយ។ ភាសាផ្តោតលើសុវត្ថិភាពនៃការចងចាំ និងផ្តល់នូវមធ្យោបាយដើម្បីសម្រេចបាននូវភាពស្របគ្នានៃការងារខ្ពស់ ខណៈពេលដែលជៀសវាងការប្រើប្រាស់ឧបករណ៍ប្រមូលសំរាម និងពេលដំណើរការ (ម៉ោងរត់ត្រូវបានកាត់បន្ថយទៅជាការចាប់ផ្តើមជាមូលដ្ឋាន និងការថែទាំបណ្ណាល័យស្តង់ដារ)។
វិធីសាស្ត្រគ្រប់គ្រងអង្គចងចាំរបស់ Rust ជួយសង្រ្គោះអ្នកអភិវឌ្ឍន៍ពីកំហុសនៅពេលរៀបចំទ្រនិច និងការពារពីបញ្ហាដែលកើតឡើងដោយសារការគ្រប់គ្រងអង្គចងចាំកម្រិតទាប ដូចជាការចូលប្រើតំបន់អង្គចងចាំបន្ទាប់ពីវាត្រូវបានដោះលែង ការពន្យារទ្រនិចចង្អុលទទេ ការដំណើរការលើសចំណុះ។ល។ ដើម្បីចែកចាយបណ្ណាល័យ ផ្តល់ការកសាង និងគ្រប់គ្រងភាពអាស្រ័យ គម្រោងអភិវឌ្ឍកម្មវិធីគ្រប់គ្រងកញ្ចប់ទំនិញ។ ឃ្លាំង crates.io ត្រូវបានគាំទ្រសម្រាប់ការបង្ហោះបណ្ណាល័យ។
សុវត្ថិភាពនៃអង្គចងចាំត្រូវបានផ្តល់ជូននៅក្នុង Rust នៅពេលចងក្រងតាមរយៈការត្រួតពិនិត្យឯកសារយោង ការរក្សាដាននៃភាពជាម្ចាស់វត្ថុ ការតាមដានអាយុកាលរបស់វត្ថុ (វិសាលភាព) និងការវាយតម្លៃភាពត្រឹមត្រូវនៃការចូលប្រើអង្គចងចាំអំឡុងពេលដំណើរការកូដ។ ច្រែះក៏ផ្តល់ការការពារប្រឆាំងនឹងចំនួនគត់លើសចំណុះ ទាមទារការចាប់ផ្តើមចាំបាច់នៃតម្លៃអថេរមុនពេលប្រើ ដោះស្រាយកំហុសបានប្រសើរជាងនៅក្នុងបណ្ណាល័យស្តង់ដារ អនុវត្តគោលគំនិតនៃសេចក្តីយោងដែលមិនអាចផ្លាស់ប្តូរបាន និងអថេរតាមលំនាំដើម ផ្តល់នូវការវាយអក្សរឋិតិវន្តខ្លាំង ដើម្បីកាត់បន្ថយកំហុសឡូជីខល។
ការច្នៃប្រឌិតសំខាន់ៗ៖
- Предоставлена возможность использования ассемблерных вставок, востребованных в приложениях, которым необходимо управлять выполнением на низком уровне или иметь возможность использования специализированных машинных инструкций. Ассемблерные вставки добавляются при помощи макросов «asm!» и «global_asm!» с использованием для именования регистров синтаксиса форматирования строк, аналогичного тому, что используется в строковых подстановках в Rust. Компилятором поддерживаются ассемблерные инструкции для архитектур x86, x86-64, ARM, AArch64 и RISC-V. Пример вставки: use std::arch::asm; // Multiply x by 6 using shifts and adds let mut x: u64 = 4; unsafe { asm!( «mov {tmp}, {x}», «shl {tmp}, 1», «shl {x}, 2», «add {x}, {tmp}», x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
- Добавлена поддержка деструктурированных (параллельных) присвоений, в которых в левой части выражения указывается несколько типажей, слайсов или структур. Например: let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
- Предоставлена возможность указания значений по умолчанию для константных дженериков («const generics»): struct ArrayStorage<T, const N: usize = 2> { arr: [T; N], } impl<T> ArrayStorage<T> { fn new(a: T, b: T) -> ArrayStorage<T> { ArrayStorage { arr: [a, b], } } }
- В пакетном менеджере Cargo обеспечен вывод предупреждений об использовании в зависимостях недопустимых конструкций, обрабатываемых из-за ошибок в компиляторе (например, из-за ошибки допускалось заимствование полей упакованных структур в safe-блоках). Поддержка подобных конструкций будет прекращена в будущей версии Rust.
- В cargo и rustc встроена возможность генерации исполняемых файлов, очищенных от отладочных данных (strip = «debuginfo») и символов (strip = «symbols»), без необходимости вызова отдельной утилиты. Настройка очистки реализуется через параметр «strip» в Cargo.toml: [profile.release] strip = «debuginfo», «symbols»
- По умолчанию отключена инкрементальная компиляция. В качестве причины называется временный обход ошибки в компиляторе, приводящей к сбоям и выводу ошибок десериализации. Исправление ошибки уже подготовлено и войдёт в состав следующего выпуска. Для возвращения инкрементальной компиляции можно использовать переменную окружения RUSTC_FORCE_INCREMENTAL=1.
- ផ្នែកថ្មីនៃ API ត្រូវបានផ្លាស់ទីទៅប្រភេទនៃស្ថេរភាព រួមទាំងវិធីសាស្រ្ត និងការអនុវត្តលក្ខណៈត្រូវបានធ្វើឱ្យមានស្ថេរភាព៖
- std::thread::available_parallelism
- Result::copied
- Result::cloned
- arch::asm!
- arch::global_asm!
- ops::ControlFlow::is_break
- ops::ControlFlow::is_continue
- TryFrom for u8
- char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
- iter::zip
- NonZeroU8::is_power_of_two
- NonZeroU16::is_power_of_two
- NonZeroU32::is_power_of_two
- NonZeroU64::is_power_of_two
- NonZeroU128::is_power_of_two
- DoubleEndedIterator для структуры ToLowercase
- DoubleEndedIterator для структуры ToUppercase
- TryFrom<&mut [T]> for [T; N]
- UnwindSafe для структуры Once
- RefUnwindSafe для Once
- встроенные в компилятор функции поддержки armv8 neon для aarch64
- គុណលក្ខណៈ "const" ដែលកំណត់លទ្ធភាពនៃការប្រើប្រាស់វានៅក្នុងបរិបទណាមួយជំនួសឱ្យថេរ ត្រូវបានប្រើក្នុងមុខងារ៖
- mem::MaybeUninit::as_ptr
- mem::MaybeUninit::assume_init
- mem::MaybeUninit::assume_init_ref
- ffi::CStr::from_bytes_with_nul_unchecked
ប្រភព: opennet.ru