Rust 1.58 Варақаи забони барномасозӣ

Нашри забони барномасозии умумӣ Rust 1.58, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии ташкилоти мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад, идоракунии автоматии хотираро таъмин мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди вазифаҳо бидуни истифодаи коллектори партов ё вақти корӣ таъмин мекунад (вақти кор то ибтидосозӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Идоракунии хотираи автоматии Rust хатогиҳоро ҳангоми коркарди нишондиҳандаҳо бартараф мекунад ва аз мушкилоте, ки аз коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, истинодҳои нули нишоннамо, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмини ҷамъбаст ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Навовариҳои асосӣ:

  • Дар блокҳои форматкунии сатр, ба ғайр аз имкони иваз кардани тағирёбандаҳои қаблан дастраси пас аз сатр аз рӯи рақам ва ном, қобилияти иваз кардани идентификаторҳои худсарона тавассути илова кардани ифодаи "{идентификатор}" ба сатр амалӣ карда мешавад. Масалан: // Сохтмони қаблан дастгирӣшаванда: println!("Салом, {}!", get_person()); println!("Салом, {0}!", get_person()); println!("Салом, {шахсе}!", person = get_person()); // акнун шумо метавонед муайян кунед let person = get_person(); println!("Салом, {шахсе}!");

    Идентификаторҳо инчунин метавонанд бевосита дар имконоти форматкунӣ муайян карда шаванд. бигзор (паҳно, дақиқ) = get_format (); барои (ном, хол) дар get_scores() { println!("{ном}: {хол:width$.precision$}"); }

    Ивазкунии нав дар ҳама макросҳое кор мекунад, ки таърифи формати сатрро дастгирӣ мекунанд, ба истиснои макроси "ваҳшат!". дар версияҳои 2015 ва 2018 забони Rust, ки дар он ваҳм!("{ident}") ҳамчун сатри муқаррарӣ баррасӣ мешавад (дар Rust 2021 ивазкунӣ кор мекунад).

  • Рафтори сохтори фармони std::process::Дар платформаи Windows ба тавре тағир дода шудааст, ки ҳангоми иҷрои фармонҳо бо сабабҳои амниятӣ он дигар файлҳои иҷрошавандаро дар директорияи ҷорӣ ҷустуҷӯ намекунад. Феҳристи ҷорӣ хориҷ карда шудааст, зеро он метавонад барои иҷро кардани рамзи зараровар истифода шавад, агар барномаҳо дар директорияҳои беэътимод иҷро шаванд (CVE-2021-3013). Мантиқи нави муайянкунии иҷрошаванда ҷустуҷӯи директорияҳои Rust, директорияи барнома, директорияи системаи Windows ва директорияҳои дар тағирёбандаи муҳити PATH нишондодашударо дар бар мегирад.
  • Китобхонаи стандартӣ шумораи функсияҳои бо аломати "#[бояд_истифода]" -ро васеъ кард, то огоҳӣ диҳад, агар арзиши баргардонидашуда сарфи назар карда шавад, ки ба муайян кардани хатогиҳое, ки дар натиҷаи фарз кардани функсия ба вуҷуд омадаанд, ба ҷои баргардонидани арзиши нав арзишҳоро тағир медиҳад.
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • Метамаълумот :: is_symlink
    • Path :: is_symlink
    • {integer}::saturating_div
    • Опсия :: unwrap_unchecked
    • Натиҷа :: unwrap_unchecked
    • Натиҷа :: unwrap_err_unchecked
  • Аттрибути "const", ки имкони истифодаи онро дар ҳама гуна контекст ба ҷои доимӣ муайян мекунад, дар функсияҳо истифода мешавад:
    • Давомнокӣ::нав
    • Давомнокӣ::checked_add
    • Давомнокӣ ::saturating_add
    • Давомнокӣ :: checked_sub
    • Давомнокӣ::saturating_sub
    • Давомнокӣ::checked_mul
    • Давомнокӣ::saturating_mul
    • Давомнокӣ::checked_div
  • Иҷоза дода шудааст, ки истинод ба нишондиҳандаҳои "*const T" дар контекстҳои "const".
  • Дар менеҷери бастаи боркаш майдони rust_version ба метамаълумоти баста илова карда шудааст ва опсияи "--message-format" ба фармони "насбкунии бор" илова карда шудааст.
  • Компилятор механизми муҳофизати CFI (Control Flow Integrity) -ро дастгирӣ мекунад, ки пеш аз ҳар як занги ғайримустақим санҷишҳоро барои муайян кардани баъзе шаклҳои рафтори номуайяне, ки эҳтимолан ба вайрон кардани тартиби муқаррарии иҷро (ҷараёни назорат) дар натиҷаи истифодаи эксплойтҳо, ки нишондиҳандаҳои дар хотира нигоҳ дошташударо дар функсияҳо иваз мекунанд.
  • Компилятор барои версияҳои 5 ва 6 формати муқоисаи фарогирии LLVM, ки барои арзёбии фарогирии код ҳангоми санҷиш истифода мешавад, илова кардааст.
  • Дар компилятор талабот ба версияи ҳадди ақали LLVM ба LLVM 12 боло бурда мешавад.
  • Сатҳи сеюми дастгирӣ барои платформаи x86_64-unknown-none амалӣ карда шуд. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматӣ, нашри сохторҳои расмӣ ё тафтиши он, ки оё код сохта мешавад.

Илова бар ин, мо метавонем нашрияи Microsoft-ро дар бораи нашри китобхонаҳои Rust for Windows 0.30 қайд кунем, ки ба шумо имкон медиҳад забони Rustро барои таҳияи замимаҳо барои OS Windows истифода баред. Маҷмӯа ду бастаи сандуқро дар бар мегирад (windows ва windows-sys), ки тавассути онҳо шумо метавонед ба Win API дар барномаҳои Rust дастрасӣ пайдо кунед. Рамзи дастгирии API аз метамаълумоти тавсифкунандаи API ба таври динамикӣ тавлид мешавад, ки ба шумо имкон медиҳад дастгирӣ на танҳо барои зангҳои мавҷудаи Win API, балки барои зангҳое, ки дар оянда пайдо мешаванд, амалӣ карда шавад. Версияи нав дастгирии платформаи мақсадноки UWP (Universal Windows Platform) илова мекунад ва намудҳои Handle ва Debug -ро амалӣ мекунад.

Манбаъ: opennet.ru

Илова Эзоҳ