ការចេញផ្សាយភាសាសរសេរកម្មវិធី Rust 1.59 ជាមួយនឹងការគាំទ្រសម្រាប់ការបញ្ចូលការជួបប្រជុំគ្នា។

ការចេញផ្សាយភាសាកម្មវិធីគោលបំណងទូទៅ 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

បន្ថែមមតិយោបល់