Rust 1.64 Варақаи забони барномасозӣ

Нашри забони барномасозии Rust 1.64, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии созмони мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди кор ҳангоми канорагирӣ аз истифодаи коллектори партовҳо ва вақти корӣ таъмин мекунад (вақти кор то оғозкунии асосӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Усулҳои коркарди хотираи Rust таҳиякунандаро аз хатогиҳо ҳангоми коркарди нишонаҳо наҷот медиҳанд ва аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, барҳам додани ишораҳои нул, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмин кардани сохтан ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Бехатарии хотира дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект, нигоҳ доштани мӯҳлати умри объект (миқёс) ва арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

Навовариҳои асосӣ:

  • Талабот ба муҳити Linux дар компилятор, менеҷери бастаи Cargo ва китобхонаи стандартии libstd зиёд карда шуд - талаботи ҳадди ақал барои Glibc аз версияи 2.11 то 2.17 ва ядрои Linux аз версияи 2.6.32 ба 3.2 боло бурда шуд. Маҳдудиятҳо инчунин ба дуликҳои Rust, ки бо libstd сохта шудаанд, татбиқ мешаванд. Тақсимоти RHEL 7, SLES 12-SP5, Debian 8 ва Ubuntu 14.04 ба талаботи нав ҷавобгӯ мебошанд. Дастгирии RHEL 6, SLES 11-SP4, Debian 7 ва Ubuntu 12.04 қатъ карда мешавад. Истифодабарандагоне, ки файлҳои иҷрошавандаи аз Rust сохташударо дар муҳитҳои дорои ядроҳои кӯҳнаи Linux истифода мебаранд, ташвиқ карда мешавад, ки системаҳои худро навсозӣ кунанд, дар версияҳои кӯҳнаи компилятор бимонанд ё барои нигоҳ доштани мутобиқат фаршҳои libstd-и худро бо қабатҳо нигоҳ доранд.

    Дар байни сабабҳои рад кардани дастгирӣ барои системаҳои кӯҳнаи Linux захираҳои маҳдуд барои идома додани мутобиқат бо муҳитҳои кӯҳна мебошанд. Дастгирии Glibcs-и кӯҳна истифодаи санҷишҳои кӯҳнаи CI, талаботҳои афзояндаи нусхабардорӣ дар LLVM ва утилитаҳои байниҳамдигариро талаб мекунад. Афзоиши талаботи версияи ядро ​​​​бо сабаби қобилияти libstd барои истифода бурдани зангҳои нави система бе зарурати нигоҳ доштани қабатҳо барои таъмини мутобиқат бо ядроҳои кӯҳна мебошад.

  • Хусусияти IntoFuture, ки ба IntoIterator шабоҳат дорад, вале бо истифода аз ".await" ба ҷои ҳалқаҳои "for … in …" фарқ мекунад, устувор карда шуд. Дар якҷоягӣ бо IntoFuture, калимаи калидии ".await" метавонад на танҳо хислати Оянда, балки ҳама навъҳои дигареро, ки метавонанд ба Оянда табдил дода шаванд, интизор шаванд.
  • Утилитаи таҳлилгари занг ба маҷмӯи хидматҳои бо релизҳои Rust фиристодашуда дохил карда шудааст. Утилита инчунин барои насб кардан бо rustup дастрас аст (компоненти rustup илова кардани занг-анализер).
  • Менеҷери бастаи боркаш мероси фазои кориро барои аз байн бурдани такрори байни бастаҳои арзишҳои маъмулии саҳроӣ, ба монанди версияҳои Rust ва URL-и анбор амалӣ мекунад. Инчунин, дастгирӣ барои сохтани якчанд платформаҳои мақсаднок якбора илова карда шудааст (ҳоло зиёда аз як параметрро дар варианти "--target" муайян кардан мумкин аст).
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • оянда :: IntoFuture
    • адад :: NonZero * :: checked_mul
    • адад :: NonZero * :: checked_pow
    • адад :: NonZero * :: saturating_mul
    • num :: NonZero * :: saturating_pow
    • шумораи ::NonZeroI*::abs
    • адад :: NonZeroI * :: checked_abs
    • num :: NonZeroI * :: overflowing_abs
    • num :: NonZeroI * :: saturating_abs
    • адад :: NonZeroI * :: unsigned_abs
    • num :: NonZeroI * :: wrapping_abs
    • адад :: NonZeroU * :: checked_add
    • num ::NonZeroU* ::санҷидашуда_навбати_қувваи_ду
    • адад ::NonZeroU*::saturating_add
    • os :: unix :: раванд ::CommandExt ::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Навъҳои мувофиқи C, ки қаблан дар модули std::ffi устувор карда шуда буданд, ба аслӣ ва китобхонаи alloc илова карда шуданд:
    • аслӣ ::ffi ::CStr
    • core ::ffi ::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc ::ffi ::FromVecWithNulError
    • alloc ::ffi :: IntoStringError
    • alloc::ffi::NulError
  • Навъҳои C, ки қаблан дар модули std::os::raw устувор карда шуда буданд, ба модулҳои аслӣ::ffi ва std::ffi илова карда шуданд (масалан, намудҳои c_uint ва c_ulong барои намуди C uint ва ulong пешниҳод карда шуданд. ):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Коркарди сатҳи паст барои истифода бо механизми Poll устувор карда шуд (дар оянда пешниҳод кардани API-и соддакардашуда ба нақша гирифта шудааст, ки истифодаи сохторҳои сатҳи пасти Pull and Pin-ро талаб намекунад):

    • оянда ::poll_fn
    • вазифа:: тайёр!
  • Дар функсияи slice::from_raw_parts хусусияти "const", ки имконияти истифодаи онро ба ҷои константаҳо дар ҳама гуна контекст муайян мекунад, истифода мешавад.
  • Бо мақсади нигоҳ доштани маълумоти бештар, тарҳбандии хотираи сохторҳои Ipv4Addr, Ipv6Addr, SocketAddrV4 ва SocketAddrV6 тағир дода шудааст. Метавонад мутобиқатро бо бастаҳои яккаса, ки std::mem::transmute барои коркарди сохтори сатҳи паст истифода мебаранд, вайрон кунад.
  • Ҷамъоварии компилятори занг барои платформаи Windows оптимизатсияи PGO-ро (оптимизатсияи профилактикӣ) истифода мебарад, ки имкон дод, ки иҷрои рамзгузорӣ то 10-20% зиёд карда шавад.
  • Компилятор огоҳии навро дар бораи майдонҳои истифоданашуда дар сохторҳои муайян амалӣ кардааст.

Илова бар ин, мо метавонем гузориши вазъро дар бораи таҳияи татбиқи алтернативии компилятори забони Rust, ки аз ҷониби лоиҳаи gccrs (GCC Rust) таҳия ва барои дохил шудан ба GCC тасдиқ шудааст, қайд кунем. Пас аз ҳамгиро кардани фронт, маҷмӯаи стандартии GCC метавонад барои тартиб додани барномаҳои Rust бидуни насби компилятори rustc, ки бо истифода аз таҳияҳои LLVM сохта шудааст, истифода шавад. То он даме, ки таҳия мувофиқи нақша идома дорад ва ҳама гуна мушкилоти ғайричашмдоштро манъ мекунад, интерфейси забони Rust ба нашри GCC 13, ки моҳи майи соли оянда ба нақша гирифта шудааст, ворид карда мешавад. Татбиқи Rust дар GCC 13 дар ҳолати бета хоҳад буд, ки ҳанӯз ба таври нобаёнӣ фаъол нашудааст.

Манбаъ: opennet.ru

Илова Эзоҳ