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

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

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

басты инновациялар:

  • Жүк пакетінің менеджері crates.io жалпы тізілімімен қатар өмір сүре алатын балама бума тізілімдерімен жұмыс істеуге арналған құралдарды қосты. Мысалы, меншікті қолданбаларды әзірлеушілер енді Cargo.toml ішіндегі тәуелділіктерді тізімдеу кезінде пайдаланылуы мүмкін жеке жеке тізілімін пайдалана алады және өз өнімдері үшін crates.io нұсқасына ұқсас нұсқа үлгісін пайдалана алады, сондай-ақ екі жәшікке де тәуелділіктерді сілтеме жасай алады. io және өзіңіздің тізіліміңізге.

    .cargo/config ішіне сыртқы тізілімдерді қосу үшін ($HOME ішінде немесе бума каталогында орналасқан)
    қамтамасыз етілген «[тізілімдер]» бөлімінде және сыртқы тізілімді пайдалану үшін Cargo.toml сайтындағы әрбір тәуелділіктің сипаттамасында «тізілім» опциясы пайда болды. Қосымша тізілімге қосылу үшін, ~/.cargo/credentials файлына аутентификация белгісін қойып, пәрменді іске қосыңыз.
    "жүк логин --registry=my-registry" және пакетті жариялау үшін -
    "жүкті жариялау -регистр=менің-тізілім";

  • «?» операторын пайдалану үшін толық қолдау қосылды. сынақтарда доктесттер, құжаттамадағы мысал кодын сынақтар ретінде пайдалануға мүмкіндік береді. Бұрынғы оператор
    "?" сынақты орындау кезінде қателерді өңдеу үшін тек “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|64|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» құрастыру опциясын көрсету арқылы байланыстыру сатысында оңтайландыруларды қосу мүмкіндігі қосылды.

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

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