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

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

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

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

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

  • Бүтін көрсетілімдері бар санауларда («#[repr(Int)]» атрибуты), санамақта өрістер болса да, дискриминанттың анық көрсетіліміне (санақтағы опцияның нөмірі) рұқсат етіледі. #[repr(u8)] enum Foo { A(u8), # дискриминант 0 B(i8), # дискриминант 1 C(bool) = 42, # дискриминант 42}
  • Қосылған core::hint::black_box функциясы, ол жай алынған мәнді қайтарады. Компилятор берілген функция белгілі бір нәрсені жасайды деп есептейтіндіктен, black_box функциясын код өнімділігін тексеру кезінде немесе жасалған машина кодын тексеру кезінде компилятордың циклдарды оңтайландыруын өшіру үшін пайдалануға болады (компилятор кодты жарамсыз деп санамауы және жою үшін). ол). Мысалы, төмендегі мысалда black_box(v.as_ptr()) көрсету компилятордың v векторы пайдаланылмаған деп болжауына жол бермейді. std::hint::black_box пайдаланыңыз; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • «Жүк» пакет менеджері «жою» пәрменін ұсынады, ол пәрмен жолынан Cargo.toml манифестінен тәуелділіктерді жоюға мүмкіндік береді.
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_signed}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_signed}
    • BTreeSet::{бірінші, соңғы, қалқымалы_бірінші, қалқымалы_соңғы}
    • BTreeMap::{бірінші_кілт_мәні, соңғы_кілт_мәні, бірінші_енгізу, соңғы_енгізу, бірінші_жазба, қалқымалы_соңғы}
    • WASI пайдалану кезінде stdio құлпы түрлері үшін AsFd іске асыруларын қосыңыз.
    • impl TryFrom > Box<[T үшін; N]>
    • core::hint::black_box
    • Ұзақтығы::try_from_secs_{f32,f64}
    • Опция :: ZIP файлын ашыңыз
    • std::os::fd
  • Үлгілерде «..X» және «..=X» ауқымдарын пайдалануға рұқсат етіледі.
  • Rustc компиляторының алдыңғы жағын және LLVM серверін құрастыру кезінде алынған кодтың өнімділігін арттыруға және жадты тұтынуды азайтуға мүмкіндік беретін LTO (Link Time Optimization) және BOLT (екілік оңтайландыру және орналасу құралы) оңтайландыру режимдері пайдаланылады.
  • Қолдаудың үшінші деңгейі armv5te-none-eabi және thumbv5te-none-eabi платформалары үшін жүзеге асырылды. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.
  • macOS әмбебап кітапханаларымен байланысуға қолдау қосылды.

Сонымен қатар, GCC код базасына Rust тілінің компиляторының (gccrs) алдыңғы жағының қосылғанын атап өтуге болады. Фронтенд GCC 13 тармағына кіреді, ол 2023 жылдың мамыр айында шығарылады. GCC 13-тен бастап, жергілікті GCC құралдарын Rust тілінде бағдарламаларды құрастыру үшін rustc компиляторын орнатуды қажет етпей, LLVM әзірлемелерімен құрастырылған пайдалануға болады. Rust қолданбасының GCC 13 іске асырылуы әдепкі бойынша қосылмаған бета нұсқасы болады.

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

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