Rust 1.64 dasturlash tilining relizi

Mozilla loyihasi tomonidan asos solingan, ammo hozirda Rust Foundation mustaqil notijorat tashkiloti homiyligida ishlab chiqilgan Rust 1.64 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:

  • Atrof-muhitga bo'lgan talablarning ortishi Linux kompilyatorda, Cargo paket menejerida va standart kutubxona libstdda Glibc uchun minimal talablar 2.11 versiyasidan 2.17 ga oshirildi va yadrolar Linux 2.6.32 versiyasidan 3.2 versiyasigacha. Cheklovlar libstd bilan yaratilgan Rust ilovasining bajariladigan fayllariga ham tegishli. RHEL 7, SLES 12-SP5 va boshqa distributivlar yangi talablarga javob beradi. Debian 8 va Ubuntu 14.04. RHEL 6, SLES 11-SP4 ni qo'llab-quvvatlash to'xtatiladi, Debian 7 va Ubuntu 12.04. Eski yadroli muhitlarda Rust toolchain asosida yaratilgan bajariladigan fayllardan foydalanadigan foydalanuvchilar uchun Linux, moslikni saqlab qolish uchun tizimlarini yangilash, eski kompilyator versiyalarida qolish yoki mustaqil ravishda o'zlarining libstd filialini interlayerlar bilan saqlash tavsiya etiladi.

    Eskilarini qo'llab-quvvatlashning tugashi sabablari orasida Linux-tizimlar eski muhitlar bilan moslikni saqlab qolish uchun cheklangan resurslarni eslatib o'tadi. Eski Glibc-ni qo'llab-quvvatlash, LLVM va o'zaro kompilyatsiya vositalari uchun versiya talablarining ortishi hisobga olinsa, uzluksiz integratsiya tizimida tekshirishda eski vositalardan foydalanishni talab qiladi. Yadro versiyasi talablarining ortishi eski yadrolar bilan moslikni ta'minlash uchun vositachilarni saqlab qolish zaruratisiz libstd-da yangi tizim chaqiruvlaridan foydalanish imkoniyati bilan bog'liq.

  • IntoFuture xususiyati barqarorlashtirildi, u IntoIteratorga o'xshaydi, lekin ikkinchisidan "for ... in ..." tsikllari o'rniga ".await" dan foydalanish bilan farqlanadi. IntoFuture bilan birlashganda, ".await" kalit so'zi nafaqat Future xususiyatini, balki Futurega aylantirilishi mumkin bo'lgan har qanday boshqa turlarni ham kutishi mumkin.
  • Rust-analizator yordam dasturi Rust relizlari bilan ta'minlangan yordam dasturlari to'plamiga kiritilgan. Yordamchi dastur rustup yordamida o'rnatish uchun ham mavjud (rustup komponenti zang-analizatorni qo'shadi).
  • Yuk paketi menejeri Rust versiyalari va ombor URL manzillari kabi paketlar orasidagi umumiy maydon qiymatlarining takrorlanishini bartaraf etish uchun ish maydoni merosini o'z ichiga oladi. Bundan tashqari, bir vaqtning o'zida bir nechta maqsadli platformalar uchun qurilish qo'llab-quvvatlashi qo'shildi (endi "--target" variantida bir nechta parametrlarni belgilashingiz mumkin).
  • APIning yangi qismi barqaror toifaga ko'chirildi, shu jumladan xususiyatlarning usullari va amalga oshirilishi barqarorlashtirildi:
    • kelajak::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_key_qudrati ikki
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Ilgari std::ffi modulida barqarorlashtirilgan C-mos keluvchi turlar yadro va alloc kutubxonasiga qo'shildi:
    • yadro::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Oldin std::os::raw modulida barqarorlashtirilgan C turlari yadro ::ffi va std::ffi modullariga qo‘shildi (masalan, uint va ulong C turlari uchun c_uint va c_ulong turlari taklif qilingan):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • So'rov mexanizmi bilan foydalanish uchun past darajadagi ishlov beruvchilar barqarorlashtirildi (kelajakda Pull va Pin kabi past darajadagi tuzilmalardan foydalanishni talab qilmaydigan soddalashtirilgan API taqdim etish rejalashtirilgan):
    • kelajak::poll_fn
    • vazifa::tayyor!
  • Slice::from_raw_parts funksiyasida uni doimiylar o‘rniga istalgan kontekstda ishlatish imkoniyatini belgilovchi “const” atributi qo‘llaniladi.
  • Ma'lumotlarni yanada ixcham saqlash uchun Ipv4Addr, Ipv6Addr, SocketAddrV4 va SocketAddrV6 tuzilmalarining xotira tartibi o'zgartirildi. Tuzilmalarni past darajadagi manipulyatsiya qilish uchun std::mem::transmute ishlatadigan bitta quti paketlari bilan moslik muammosi bo'lishi mumkin.
  • Platforma uchun zang kompilyatori qurilishida Windows PGO optimallashtirishlari (profilga yo'naltirilgan optimallashtirish) qo'llanildi, bu kod kompilyatsiya samaradorligini 10-20% ga oshirish imkonini berdi.
  • Kompilyator muayyan tuzilmalarda foydalanilmagan maydonlar haqida yangi ogohlantirishni amalga oshirdi.

Bundan tashqari, siz gccrs loyihasi (GCC Rust) tomonidan tayyorlangan va GCCga qo'shish uchun tasdiqlangan Rust tili kompilyatorining muqobil joriy etilishini ishlab chiqish bo'yicha holat hisobotini qayd etishingiz mumkin. Frontendni integratsiyalashgandan so'ng, standart GCC vositalari LLVM ishlanmalari yordamida qurilgan rustc kompilyatorini o'rnatmasdan Rust tilida dasturlarni kompilyatsiya qilish uchun ishlatilishi mumkin. Rivojlanish yo'lda va har qanday kutilmagan muammolarni bartaraf etar ekan, Rust frontend keyingi yilning may oyida rejalashtirilgan GCC 13 versiyasiga birlashtiriladi. Rust-ning GCC 13 ilovasi beta holatida bo'ladi, hali sukut bo'yicha yoqilmagan.

Manba: opennet.ru

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster