Rust 1.73 бағдарламалау тілі шығарылымы

Mozilla жобасы негізін қалаған, бірақ қазір Rust Foundation тәуелсіз коммерциялық емес ұйымының қолдауымен әзірленген Rust 1.73 жалпы мақсаттағы бағдарламалау тілінің шығарылымы жарияланды. Тіл жад қауіпсіздігіне назар аударады және қоқыс жинаушы мен жұмыс уақытын пайдалануды болдырмай, жоғары жұмыс параллелизміне қол жеткізу құралдарын қамтамасыз етеді (орындау уақыты стандартты кітапхананың негізгі инициализациясы мен қызмет көрсетуіне дейін қысқарады).

Rust жадты өңдеу әдістері әзірлеушіні көрсеткіштерді өңдеу кезіндегі қателерден сақтайды және жадтың төменгі деңгейін өңдеуге байланысты туындайтын мәселелерден қорғайды, мысалы, оны босатқаннан кейін жад аймағына қол жеткізу, нөлдік көрсеткіштерге сілтеме жасау, буфердің асып кетуі және т.б. Кітапханаларды тарату, құрастыруды қамтамасыз ету және тәуелділіктерді басқару үшін жоба Cargo пакетінің менеджерін әзірлейді. Crates.io репозиторийіне хостинг кітапханалары үшін қолдау көрсетіледі.

Жадтың қауіпсіздігі Rust бағдарламасында компиляция уақытында анықтамалық тексеру, объект иеленуін қадағалау, объектінің қызмет ету мерзімін (аумақтарын) қадағалау және кодты орындау кезінде жадқа қол жеткізудің дұрыстығын бағалау арқылы қамтамасыз етіледі. Rust сонымен қатар бүтін сандардың толып кетуінен қорғауды қамтамасыз етеді, пайдалану алдында айнымалы мәндерді міндетті түрде инициализациялауды талап етеді, стандартты кітапханада қателерді жақсы өңдейді, әдепкі бойынша өзгермейтін сілтемелер мен айнымалылар тұжырымдамасын қолданады, логикалық қателерді азайту үшін күшті статикалық теруді ұсынады.

Негізгі инновациялар:

  • Әдепкі бағдарламаның бұзылу өңдеушісі (паника) шығаратын хабарлардың пішімі қайта жасалды. «Үрей!» макросында көрсетілген мәтін енді тырнақшасыз бөлек жолда көрсетіледі, бұл хабарламаны оқуды жеңілдетеді және кірістірілген тырнақшалар болған кезде немесе бірнеше жолға бөлінген кезде шатасуды болдырмайды. fn main() { let file = "ferris.txt"; дүрбелең!("о, жоқ! {файл:?} табылмады!"); } «Негізгі» ағыны «о, жоқ! "ferris.txt" табылмады!', src/main.rs:3:5 'main' ағыны src/main.rs:3:5 мекенжайында дүрбелеңге түсті: жоқ! "ferris.txt" табылмады!

    «assert_eq» және «assert_ne» макростары іске қосылғанда көрсетілетін хабарлардың шығысы да қайта өңделген. fn main() { assert_eq!("🦀", "🐟", "феррис балық емес"); } There was the thread 'main' panicked at 'assertion failed: `(left == right)` сол жақта: `"🦀"`, оң жақта: `"🐟"`: ferris балық емес', src/main.rs: 2 :5 src/main.rs:2:5 мекенжайында "негізгі" тақырып үрейленді: `left == right` бекіту сәтсіз аяқталды: феррис балық емес сол жақта: "🦀" оң жақта: "🐟"

  • RFC 3184 сәйкес жергілікті ағынды (thread_local) LocalKey сақтау кілттерін тікелей басқару мүмкіндігі қосылды. > және LocalKey > "with(|inner| ...)" жабуды пайдаланудың орнына get(), set(), take() және replace() әдістерін пайдалану арқылы «thread_local!» макросын пайдалану кезінде жаңа ағындар үшін көрсетілген әдепкі мәндер thread_local! { статикалық ЗАТТАР: ұяшық > = Ұяшық::жаңа(Vec::new()); } fn f() { // THINGS.with(|i| i.set(vec![32, 1, 2])); // THINGS.set(vec![3, 1, 2]); // ... // болды let v = THINGS.with(|i| i.take()); // let v болды: Vec = THINGS.take(); }
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • Белгісіз {integer}::div_ceil
    • Белгісіз {integer}::next_multiple_of
    • Белгісіз {integer}::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • Жергілікті кілт:: >::алу
    • Жергілікті кілт:: >::орнату
    • Жергілікті кілт:: >::алыңыз
    • Жергілікті кілт:: >:: ауыстырыңыз
    • Жергілікті кілт:: >::қарызбен
    • Жергілікті кілт:: >::with_borrow_mut
    • Жергілікті кілт:: >::орнату
    • Жергілікті кілт:: >::алыңыз
    • Жергілікті кілт:: >:: ауыстырыңыз
  • Оны тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын "const" атрибуты функцияларда қолданылады:
    • rc::Әлсіз::жаңа
    • синхрондау::Әлсіз::жаңа
    • Nonull::as_ref
  • Компилятор GCC және Clang сияқты «.comment» бөлімінде нұсқа ақпаратының жазылуын қамтамасыз етеді.
  • Қолдау көрсетудің үшінші деңгейі aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl және x86_64-unknown-linux платформалары үшін жүзеге асырылды. -ау. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.
  • Мақсатты платформа wasm32-wasi-preview1-threads қолдауының екінші деңгейі жүзеге асырылды. Қолдау көрсетудің екінші деңгейі құрастыру кепілдігін қамтиды.

Ақпарат көзі: opennet.ru

пікір қалдыру