Itusilẹ ti ede siseto Rust 1.59 pẹlu atilẹyin fun awọn ifibọ apejọ

Itusilẹ ti ede siseto gbogboogbo-idi Rust 1.59, ti o da nipasẹ iṣẹ akanṣe Mozilla, ṣugbọn ni bayi ni idagbasoke labẹ awọn atilẹyin ti ominira ti kii ṣe èrè agbari Rust Foundation, ti ṣe atẹjade. Ede naa dojukọ aabo iranti ati pese awọn ọna lati ṣaṣeyọri isọdọkan iṣẹ giga lakoko ti o yago fun lilo ikojọpọ idoti ati akoko asiko (akoko asiko ti dinku si ipilẹṣẹ ipilẹ ati itọju ile-ikawe boṣewa).

Awọn ọna mimu iranti Rust ṣe igbala awọn olupilẹṣẹ lati awọn aṣiṣe nigbati o ba ni ifọwọyi awọn itọka ati daabobo lodi si awọn iṣoro ti o dide nitori mimu iranti ipele kekere, gẹgẹbi iraye si agbegbe iranti lẹhin ti o ti ni ominira, piparẹ awọn itọka asan, awọn ifasilẹ ifipamọ, ati bẹbẹ lọ. Lati kaakiri awọn ile-ikawe, pese awọn kikọ ati ṣakoso awọn igbẹkẹle, iṣẹ akanṣe n ṣe idagbasoke oluṣakoso package Ẹru. Ibi ipamọ crates.io jẹ atilẹyin fun awọn ile-ikawe alejo gbigba.

Ailewu iranti ti pese ni ipata ni akoko iṣakojọ nipasẹ ṣiṣe ayẹwo itọkasi, ṣiṣe itọju ohun-ini ohun, titọju awọn igbesi aye ohun (awọn iwọn), ati iṣiro deede wiwọle iranti lakoko ṣiṣe koodu. Ipata tun pese aabo lodi si ṣiṣan odidi odidi, nilo ipilẹṣẹ dandan ti awọn iye oniyipada ṣaaju lilo, mu awọn aṣiṣe dara julọ ni ile-ikawe boṣewa, lo imọran ti awọn itọkasi ailagbara ati awọn oniyipada nipasẹ aiyipada, nfunni titẹ aimi to lagbara lati dinku awọn aṣiṣe ọgbọn.

Awọn imotuntun akọkọ:

  • O ṣee ṣe lati lo awọn ifibọ ede apejọ, eyiti o wa ni ibeere ni awọn ohun elo ti o nilo lati ṣakoso ipaniyan ni ipele kekere tabi ni anfani lati lo awọn ilana ẹrọ pataki. Awọn ifibọ Apejọ ti wa ni afikun nipa lilo macros "asm!" ati "agbaye_asm!" lilo okun kika sintasi fun lorukọ awọn iforukọsilẹ iru si ti o lo fun awọn aropo okun ni ipata. Olupilẹṣẹ ṣe atilẹyin awọn ilana apejọ fun x86, x86-64, ARM, AArch64 ati awọn faaji RISC-V. Apeere ifibọ: lo std :: arch :: asm; // Ṣe isodipupo x nipasẹ 6 nipa lilo awọn iyipada ati ṣafikun jẹ ki mut x: u64 = 4; lewu {asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "fi {x}, {tmp}", x = inout(reg ) x, tmp = jade(reg) _, ); } assert_eq! (x, 4 * 6);
  • Atilẹyin ti a ṣafikun fun awọn iṣẹ iyansilẹ (ni afiwe), ninu eyiti ọpọlọpọ awọn abuda, awọn ege tabi awọn ẹya ti wa ni pato ni apa osi ti ikosile naa. Fun apẹẹrẹ: jẹ ki (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Ilana {e, ..} = Ilana {e: 5, f: 3}; assert_eq! ([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • O ṣee ṣe lati pato awọn iye aiyipada fun const generics: struct ArrayStorage {arr: [T; N], } impl ArrayStorage {fn titun (a: T, b: T) -> ArrayStorage { ArrayStorage {arr: [a, b],}}}
  • Oluṣakoso package ẹru n pese awọn ikilọ nipa lilo awọn ẹya aiṣedeede ni awọn igbẹkẹle ti a ṣe ilana nitori awọn aṣiṣe ninu akopọ (fun apẹẹrẹ, nitori aṣiṣe kan, awọn aaye ti awọn ẹya ti o kun ni a gba laaye lati yawo ni awọn bulọọki ailewu). Iru awọn itumọ ti yoo ko to gun ni atilẹyin ni ojo iwaju ti ikede ipata.
  • Ẹru ati rustc ni agbara ti a ṣe sinu rẹ lati ṣe ina awọn faili ti o ṣiṣẹ ti yọkuro ti data n ṣatunṣe aṣiṣe (rinho = "debuginfo") ati awọn aami (rinrin = "awọn aami"), laisi iwulo lati pe ohun elo lọtọ. Eto mimọ jẹ imuse nipasẹ paramita “rinhoho” ni Cargo.toml: [profile.release] rinhoho = “debuginfo”, “awọn aami”
  • Akopọ afikun jẹ alaabo nipasẹ aiyipada. Idi ti wa ni wi lati wa ni a ibùgbé workaround fun a kokoro ni alakojo ti o nyorisi si ipadanu ati deserialization aṣiṣe. Atunṣe kokoro kan ti pese tẹlẹ ati pe yoo wa ninu itusilẹ atẹle. Lati da akojọpọ afikun pada, o le lo oniyipada ayika RUSTC_FORCE_INCREMENTAL=1.
  • Apa tuntun ti API ni a ti gbe si ẹka ti iduroṣinṣin, pẹlu awọn ọna ati awọn imuse ti awọn abuda ti jẹ imuduro:
    • std :: okun :: available_parallelism
    • Esi:: daakọ
    • Abajade :: cloned
    • arch:: asm!
    • arch :: agbaye_asm!
    • ops :: ControlFlow :: is_break
    • ops :: ControlFlow :: ni_tesiwaju
    • GbiyanjuLati fun u8
    • char :: GbiyanjuLatiCharError (Oniye, Ṣatunkọ, Ifihan, PartialEq, Daakọ, Eq, Aṣiṣe)
    • iter :: zip
    • NonZeroU8 :: ni_agbara_ti_meji
    • NonZeroU16 :: ni_agbara_ti_meji
    • NonZeroU32 :: ni_agbara_ti_meji
    • NonZeroU64 :: ni_agbara_ti_meji
    • NonZeroU128 :: ni_agbara_ti_meji
    • DoubleEndedIterator fun ToLowercase be
    • DoubleEndedIterator fun ToUppercase be
    • GbiyanjuFrom fun [T; N]
    • UnwindSafe fun eto Lọgan
    • RefUnwindSafe fun ẹẹkan
    • awọn iṣẹ atilẹyin armv8 neon ti a ṣe sinu akopọ fun aarch64
  • Ẹya “const”, eyiti o pinnu iṣeeṣe ti lilo ni eyikeyi ipo dipo awọn iduro, ni a lo ninu awọn iṣẹ:
    • mem :: MaybeUninit :: as_ptr
    • mem :: MaybeUninit :: arosinu_init
    • mem :: MaybeUninit :: assume_init_ref
    • ffi :: CStr :: lati_bytes_with_nul_unchecked

orisun: opennet.ru

Fi ọrọìwòye kun