Rust 1.73 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.73 umumiy maqsadli dasturlash tilining nashri chop etildi. Til xotira xavfsizligiga e'tibor qaratadi va axlat yig'uvchi va ish vaqtidan foydalanishdan qochgan holda yuqori ish parallelligiga erishish vositalarini taqdim etadi (ish vaqti standart kutubxonani asosiy ishga tushirish va texnik xizmat ko'rsatishga qisqartiriladi).

Rust-ning xotira bilan ishlash usullari ishlab chiquvchini ko'rsatkichlarni boshqarishda xatolardan qutqaradi va past darajadagi xotira bilan ishlash natijasida yuzaga keladigan muammolardan himoya qiladi, masalan, bo'shatilgandan so'ng xotira maydoniga kirish, null ko'rsatkichlarni o'chirish, buferni ortiqcha yuklash va hokazo. Kutubxonalarni tarqatish, qurishni ta'minlash va bog'liqliklarni boshqarish uchun loyiha Cargo paketi menejerini ishlab chiqadi. Crates.io ombori kutubxonalarni joylashtirish uchun qo'llab-quvvatlanadi.

Xotira xavfsizligi Rust-da kompilyatsiya vaqtida mos yozuvlarni tekshirish, ob'ektga egalik qilish, ob'ektning ishlash muddatini (ko'lamini) kuzatib borish va kodni bajarish paytida xotiraga kirishning to'g'riligini baholash orqali ta'minlanadi. Rust shuningdek, butun sonlarning to'lib ketishidan himoya qiladi, ishlatishdan oldin o'zgaruvchan qiymatlarni majburiy ishga tushirishni talab qiladi, standart kutubxonada xatolarni yaxshiroq boshqaradi, sukut bo'yicha o'zgarmas havolalar va o'zgaruvchilar tushunchasini qo'llaydi, mantiqiy xatolarni minimallashtirish uchun kuchli statik yozishni taklif qiladi.

Asosiy innovatsiyalar:

  • Odatiy dasturning ishdan chiqishiga ishlov beruvchi (vahima) tomonidan chiqarilgan xabarlar formati qayta ishlab chiqildi. "Vahima!" makrosida ko'rsatilgan matn Endi qo'shtirnoqsiz alohida satrda ko'rsatiladi, bu xabarni o'qishni osonlashtiradi va ichki qo'shtirnoqlar mavjud bo'lganda yoki bir nechta satrlarga bo'linganida chalkashliklarni bartaraf qiladi. fn main() { let file = "ferris.txt"; vahima!("Yo'q! {fayl:?} topilmadi!"); } "Asosiy" mavzu "Oh, yo'q! "ferris.txt" topilmadi!', src/main.rs:3:5 "asosiy" mavzu src/main.rs:3:5 da vahimaga tushdi: yo'q! "ferris.txt" topilmadi!

    “assert_eq” va “assert_ne” makroslari ishga tushirilganda ko'rsatiladigan xabarlarning chiqishi ham qayta ishlangan. fn main() { assert_eq!("🦀", "🐟", "ferris baliq emas"); } "Assertion failed: `(chap == o'ng)" chap: `"🦀"`, o'ngda: `"🐟"`: ferris baliq emas', src/main.rs: 2 :5 "Asosiy" mavzu src/main.rs:2:5 da vahimaga tushdi: "chapda == o'ng" da'vosi muvaffaqiyatsiz tugadi: ferris baliq emas chapda: "🦀" o'ngda: "🐟"

  • RFC 3184 ga muvofiq, mahalliy tarmoq (thread_local) LocalKey saqlash kalitlarini to'g'ridan-to'g'ri boshqarish imkoniyati qo'shildi. > va LocalKey > get(), set(), take() va replace() usullaridan foydalanish orqali, “with(|inner| ...)” yopilish oʻrniga, bu qoʻshimcha ishga tushirish kodini bajarish zaruriyatini yoʻq qiladi. “thread_local!” makrosidan foydalanganda yangi mavzular uchun belgilangan standart qiymatlar. thread_local! { statik NARSALAR: Hujayra > = Hujayra::new(Vec::new()); } fn f() { // THINGS.with(|i| i.set(vec![32, 1, 2])); // THINGS.setga aylandi(vec![3, 1, 2]); // ... // edi let v = THINGS.with(|i| i.take()); // let v bo'ldi: Vec = THINGS.take(); }
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • Imzosiz {integer}::div_ceil
    • Imzosiz {integer}::next_multiple_of
    • Imzosiz {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • Mahalliy kalit:: >:: olish
    • Mahalliy kalit:: >:: sozlash
    • Mahalliy kalit:: >:: oling
    • Mahalliy kalit:: >:: almashtiring
    • Mahalliy kalit:: >::bozor bilan
    • Mahalliy kalit:: >::with_borrow_mut
    • Mahalliy kalit:: >:: sozlash
    • Mahalliy kalit:: >:: oling
    • Mahalliy kalit:: >:: almashtiring
  • Konstantalar o'rniga uni istalgan kontekstda ishlatish imkoniyatini belgilovchi "const" atributi funksiyalarda qo'llaniladi:
    • rc::Zaif::yangi
    • sinxronlash :: Zaif :: yangi
    • Nonull::as_ref
  • Kompilyator GCC va Clangga o'xshash ".comment" bo'limida versiya ma'lumotlarini yozib olishni ta'minlaydi.
  • Qo'llab-quvvatlashning uchinchi darajasi aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl va x86_64-unknown-linux platformalari uchun amalga oshirildi. -hos. Uchinchi daraja asosiy qo'llab-quvvatlashni o'z ichiga oladi, lekin avtomatlashtirilgan testlarsiz, rasmiy tuzilmalarni nashr etmasdan yoki kodni qurish mumkinligini tekshirmasdan.
  • Maqsadli platforma wasm32-wasi-preview1-threads uchun ikkinchi darajali qo'llab-quvvatlash amalga oshirildi. Qo'llab-quvvatlashning ikkinchi darajasi montaj kafolatini o'z ichiga oladi.

Manba: opennet.ru

a Izoh qo'shish