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

Mozilla жобасымен жасалған Rust 1.34 жүйелік бағдарламалау тілі шығарылды. Тіл жад қауіпсіздігіне назар аударады, жадты автоматты басқаруды қамтамасыз етеді және қоқыс жинағышты немесе жұмыс уақытын пайдаланбай жоғары тапсырма параллелизміне қол жеткізу құралын ұсынады.

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

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