Rust 1.34, Mozilla әзірлеген жүйелік бағдарламалау тілі шығарылды. Тіл жад қауіпсіздігіне назар аударады, жадты автоматты түрде басқаруды қамтамасыз етеді және қоқыс жинаушы немесе жұмыс уақытына қажеттілікті жоя отырып, жоғары параллелизмге қол жеткізу үшін құралдарды ұсынады.
Rust бағдарламасындағы жадты автоматты басқару әзірлеушілерді көрсеткішті манипуляциялаудан босатады және оны босатқаннан кейін жадқа қол жеткізу, нөлдік көрсеткіштерге сілтемені жою, буфердің асып кетуі және т.б. сияқты төмен деңгейлі жадты басқарудан туындайтын мәселелерден қорғайды. Кітапханаларды тарату, құрастыруды қамтамасыз ету және тәуелділіктерді басқару үшін жоба бағдарламаңызға қажетті кітапханаларды бір рет басу арқылы алуға мүмкіндік беретін Cargo пакетінің менеджерін әзірлеуде. Crates.io репозиторийіне хостинг кітапханалары үшін қолдау көрсетіледі.
Негізгі инновациялар:
- Жүк пакетінің менеджері crates.io жалпы тізілімімен қатар өмір сүре алатын балама бума тізілімдерімен жұмыс істеуге арналған құралдарды қосты. Мысалы, меншікті қолданбаларды әзірлеушілер енді Cargo.toml ішіндегі тәуелділіктерді тізімдеу кезінде пайдаланылуы мүмкін жеке жеке тізілімін пайдалана алады және өз өнімдері үшін crates.io нұсқасына ұқсас нұсқа үлгісін пайдалана алады, сондай-ақ екі жәшікке де тәуелділіктерді сілтеме жасай алады. io және өзіңіздің тізіліміңізге.
~/.cargo/config ішіне сыртқы тізілімді қосу үшін
"[тізілімдер]" бөлімінде енді жаңа "менің тізілімім" опциясы бар және "басқа жәшік" опциясы сыртқы тізілімге тәуелділік ретінде сілтеме жасау үшін Cargo.toml сайтының "[тәуелділіктер]" бөліміне қосылды. Қосымша тізілімге қосылу үшін, ~/.cargo/credentials файлына аутентификация белгісін қойып, пәрменді іске қосыңыз.
"жүк логин --registry=my-registry" және пакетті жариялау үшін -
"жүкті жариялау -регистр=менің-тізілім"; - "?" үшін толық қолдау қосылды. doctests операторы, бұл құжаттамадағы мысал кодын сынақтар ретінде пайдалануға мүмкіндік береді. Бұрын оператор
"?" сынақты орындау кезінде қателерді өңдеу үшін тек “fn main()” функциясының немесе “#[test]” функцияларының болуы кезінде пайдаланылуы мүмкін; - Процедуралық макростар арқылы анықталған теңшелетін атрибуттар енді таңбалауыштардың ерікті жиындарын (#[attr($tokens)], #[attr[$tokens]] және #[attr{$tokens}]) пайдалануды қолдайды. Бұрын элементтерді тек "#[foo(bar, baz(quux, foo = "bar"))]" сияқты жол литералдары арқылы ағаш/рекурсивті пішінде анықтауға болатын еді, бірақ енді санауларды ('#[аралығы(0..10)]') және "#[bound(T: MyTrait)]" сияқты конструкцияларды пайдалануға болады;
- TryFrom және TryInto белгілері тұрақтандырылды, бұл қателерді өңдеу түрін түрлендіруге мүмкіндік береді. Мысалы, бүтін түрлері бар from_be_bytes сияқты әдістер массивтерді енгізу ретінде пайдаланады, бірақ деректер жиі Slice түрі ретінде беріледі және массивтер мен кесінділер арасында түрлендіру қолмен қиындық тудырады. Жаңа белгілермен бұл әрекетті .try_into() функциясына қоңырау шалу арқылы жылдам орындауға болады, мысалы, "let num = u32::from_be_bytes(slice.try_into()?)". Әрқашан сәтті болатын түрлендірулер үшін (мысалы, u8-ден u32-ге дейін) мөлдір пайдалануға мүмкіндік беретін қатесіз қате түрі қосылды.
"Кімнен" бар барлық іске асырулары үшін TryFrom; - CommandExt::before_exec функциясы ескірген. Бұл функция fork() шақыруынан кейін бөлінген еншілес процестің контекстінде орындалатын exec шақыруының алдында өңдеушіні орындауға мүмкіндік берді. Бұл шарттарда файл дескрипторлары және шағылыстырылған жад аймақтары сияқты кейбір ата-аналық процесс ресурстары қайталануы мүмкін, бұл анықталмаған әрекетке және кітапхананың дұрыс жұмыс істемеуіне әкеледі.
before_exec орнына қауіпті CommandExt::pre_exec функциясын пайдалану ұсынылады. - 8-ден 64 битке дейінгі таңбалы және таңбасыз атомдық бүтін сан түрлері (мысалы, AtomicU8), сондай-ақ таңбалы түрлері NonZeroI[8|16|32|54|128] тұрақтандырылды.
- API жаңа бөлігі тұрақты санатқа жылжытылды, соның ішінде Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[қосу|қосу ] және SystemTime әдістері тұрақтандырылды ::checked_[add|sub]. iter::from_fn және iter::successors функциялары тұрақтандырылды;
- Барлық бүтін сан түрлері үшін checked_pow, saturating_pow, wrapping_pow және overflowing_pow әдістері орындалады;
- "-C linker-plugin-lto" құрастыру опциясын көрсету арқылы байланыстыру кезеңінің оңтайландыруларын қосу мүмкіндігі қосылды (rustc бағдарламасы Rust кодын LLVM биткодына құрастырады, бұл LTO оңтайландыруларын қолдануға мүмкіндік береді).
Ақпарат көзі: opennet.ru
