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

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

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

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

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

  • Rustc компиляторында тестілеу кезінде кодты қамтуды бағалау үшін пайдаланылатын қамту деректерін жасау үшін тұрақтандырылған LLVM негізіндегі жүйе бар. Құрастыру кезінде қамту деректерін қосу үшін «-Cinstrument-comverage» жалауын пайдалану керек, мысалы, құрастыруды «RUSTFLAGS=»-C instrument-comverage» жүк құрастыру» пәрменімен бастау керек. Осылайша құрастырылған орындалатын файлды іске қосқаннан кейін default.profraw файлы ағымдағы каталогта сақталады, оны өңдеу үшін llvm-tools-preview компонентінен llvm-profdata утилитасын пайдалануға болады. llvm-profdata арқылы өңделген шығыс одан кейін аннотацияланған кодты қамту есебін жасау үшін llvm-cov файлына берілуі мүмкін. Бастапқы кодқа сілтеме туралы ақпарат қамту есептегіштері мен код арасындағы байланыс туралы қажетті деректерді қамтитын зерттелетін орындалатын файлдан алынады. 1| 1|fn main() { 2| 1| println!("Сәлем, әлем!"); 3| 1|}
  • Жүк пакетінің менеджерінде құрастыру барысы және әрбір қадамның орындалу уақыты туралы егжей-тегжейлі есепті құруды қамтитын «-timings» жалаушасын қолдау тұрақтандырылды. Есеп құрастыру процесінің өнімділігін оңтайландыру үшін пайдалы болуы мүмкін.
  • Жүк пакетінің менеджері шартты құрастыру және қосымша тәуелділіктерді таңдау механизмі үшін жаңа синтаксисті ұсынады, Cargo.toml файлында аталған сипаттар тізімін [мүмкіндіктер] бөлімінде тізімдеу арқылы конфигурацияланады және пакетті құрастыру кезінде сипаттарды қосу арқылы белсендіріледі. «--функциялар» жалауын пайдалану. Жаңа нұсқа бөлек аттар кеңістігіндегі және әлсіз тәуелділіктердегі тәуелділіктерді қолдауды қосады.

    Бірінші жағдайда «[мүмкіндіктер]» бөлімінің ішіндегі «dep:» префиксі бар элементтерді бұл тәуелділікті мүмкіндік ретінде жанама түрде көрсетпей-ақ қосымша тәуелділікке тікелей байланыстыруға болады. Екінші жағдайда «?» белгісімен таңбалауды қолдау қосылды. («пакет-атауы?/мүмкіндік-аты») қосымша тәуелділіктер, егер кейбір басқа сипат берілген қосымша тәуелділікті қамтитын болса ғана қосылуы керек. Мысалы, төмендегі мысалда serde сипатын қосу "serde" тәуелділігін, сондай-ақ "rgb" тәуелділігі үшін "serde" сипатын қосады, бірақ егер "rgb" тәуелділігі басқа жерде қосылған болса ғана: [тәуелділіктер] serde = { нұсқа = " 1.0.133", қосымша = шын } rgb = { нұсқа = "0.8.25", қосымша = шын } [мүмкіндіктер] serde = ["dep:serde", "rgb?/serde"]

  • Соңғы шығарылымда өшірілген қосымша компиляцияға қолдау қайтарылды. Мүмкіндіктің өшірілуіне себеп болған компилятор қатесі шешілді.
  • Жүйенің ұйқы режимінде өткізетін уақытын есепке алатын монотонды уақыт кепілдігімен Instant таймерлерін қамтамасыз етудің кейбір мәселелері шешілді. Бұрын таймерді басқару үшін OS API мүмкіндігінше пайдаланылды, бұл уақыттың монотондылығын бұзатын проблемалық жағдайларды, мысалы, аппараттық ақаулар, виртуализацияны пайдалану немесе операциялық жүйедегі қателер ескерілмеді.
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • пайдаланыңыз::abs_diff
    • io::ErrorKind үшін дисплей
    • Шығу кодынан
    • үшін емес! («ешқашан» деп теріңіз)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_анықталды!
  • Қолдаудың үшінші деңгейі mips64-openwrt-linux-musl* және armv7-unknown-linux-uclibceabi (softfloat) платформалары үшін жүзеге асырылды. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.
  • Компилятор LLVM 14 қолдануға ауыстырылды.

Сонымен қатар, мыналарды атап өтуге болады:

  • Rustc компиляторын rustc_codegen_gcc сервері арқылы жүктеуге қолдау қосылды, ол GCC жобасындағы libgccjit кітапханасын rustc тілінде код генераторы ретінде пайдалануға мүмкіндік береді, бұл rustc GCC жүйесінде қол жетімді архитектуралар мен оңтайландыруларға қолдау көрсетуге мүмкіндік береді. Компиляторды жылжыту rustc компиляторының өзін құру үшін rustc тілінде GCC негізіндегі код генераторын пайдалану мүмкіндігін білдіреді. Практикалық жағынан, бұл мүмкіндік бұрын rustc-те қолдау көрсетілмеген архитектуралар үшін тот бағдарламаларын құруға мүмкіндік береді.
  • uutils coreutils 0.0.13 құралдар жинағының шығарылымы бар, оның ішінде Rust тілінде қайта жазылған GNU Coreutils пакетінің аналогы әзірленуде. Coreutils сұрыптау, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln және ls сияқты жүзден астам утилиталармен келеді. Жобаның мақсаты Windows, Redox және Fuchsia платформаларында жұмыс істей алатын, сонымен қатар GPL copyleft лицензиясының орнына рұқсат етілген MIT лицензиясы бойынша таратуға қабілетті Coreutils платформасының баламалы іске асырылуын жасау болып табылады.

    Жаңа нұсқа көптеген утилиталардың іске асырылуын жақсартты, соның ішінде cp, dd, df, split және tr утилиталарының GNU жобасындағы әріптестерімен үйлесімділігі айтарлықтай жақсарды. Онлайн құжаттама қамтамасыз етілген. Clap талдаушысы пәрмен жолы аргументтерін талдау үшін пайдаланылады, ол «--help» жалаушасының шығысын жақсартты және ұзақ командалардың қысқартуларына қолдауды қосты (мысалы, «ls -color» орнына «ls -col» көрсетуге болады. ”).

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

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