Release fan de Rust 1.59 programmeartaal mei stipe foar assembly-ynfoegingen

De algemiene programmeertaal Rust 1.59, oprjochte troch it Mozilla-projekt mar no ûntwikkele ûnder auspysjes fan de ûnôfhinklike non-profit organisaasje Rust Foundation, is frijjûn. De taal rjochtet him op ûnthâld feilichheid en jout de middels te berikken hege baan parallelism wylst it foarkommen fan it brûken fan in garbage collector en runtime (runtime wurdt redusearre ta basis inisjalisaasje en ûnderhâld fan de standert bibleteek).

De metoaden foar ûnthâldbehanneling fan Rust besparje de ûntwikkelder fan flaters by it manipulearjen fan oanwizers en beskermje tsjin problemen dy't ûntsteane troch ûnthâldôfhanneling op leech nivo, lykas tagong krije ta in ûnthâldgebiet nei't it befrijd is, it ferwizen fan nul-oanwizers, buffer-oerrin, ensfh. Om bibleteken te fersprieden, builds te leverjen en ôfhinklikens te behearjen, ûntwikkelet it projekt de Cargo-pakketbehearder. It crates.io repository wurdt stipe foar hosting fan bibleteken.

Unthâld feilichheid wurdt foarsjoen yn Rust op it gearstallen tiid troch referinsje kontrôle, byhâlden fan foarwerp eigendom, byhâlden fan foarwerp lifetimes (omfang), en beoardielje de korrektheid fan ûnthâld tagong by koade útfiering. Rust leveret ek beskerming tsjin oerstreamingen fan heule getal, fereasket ferplichte inisjalisaasje fan fariabele wearden foar gebrûk, behannelet flaters better yn 'e standertbibleteek, tapast standert it konsept fan ûnferoarlike referinsjes en fariabelen, biedt sterke statyske typen om logyske flaters te minimalisearjen.

Wichtichste ynnovaasjes:

  • It is mooglik om assembly-taalynfoegingen te brûken, dy't yn 'e fraach binne yn applikaasjes dy't de útfiering op in leech nivo moatte kontrolearje of spesjalisearre masineynstruksjes kinne brûke. Montage-ynfoegingen wurde tafoege mei makro's "asm!" en "global_asm!" mei help fan string opmaak syntaksis foar nammejouwing registers fergelykber mei dy brûkt foar string substitúsjes yn Rust. De gearstaller stipet montage-ynstruksjes foar x86, x86-64, ARM, AArch64 en RISC-V-arsjitektuer. Ynfoegje foarbyld: brûk std :: arch :: asm; // Fermannichfâldigje x mei 6 mei help fan ferskowings en foeget lit mut x: u64 = 4; ûnfeilich { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • Stipe tafoege foar destruktuerde (parallelle) opdrachten, wêryn ferskate skaaimerken, plakjes of struktueren oan 'e lofterkant fan' e útdrukking oantsjutte binne. Bygelyks: lit (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • It is mooglik om standertwearden oan te jaan foar const generics: struct ArrayStorage {arr: [T; N], } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • De Cargo-pakketbehearder jout warskôgings oer it brûken fan ûnjildige struktueren yn ôfhinklikens dy't wurde ferwurke troch flaters yn 'e kompilator (bygelyks, troch in flater, mochten fjilden fan ynpakte struktueren liend wurde yn feilige blokken). Sokke konstruksjes sille net mear wurde stipe yn in takomstige ferzje fan Rust.
  • Cargo en rustc hawwe in ynboude mooglikheid om útfierbere bestannen te generearjen dy't ûntslein binne fan debuggegevens (strip = "debuginfo") en symboalen (strip = "symboalen"), sûnder de needsaak om in apart nut te neamen. De skjinmeitsjen ynstelling wurdt ymplemintearre fia de "strip" parameter yn Cargo.toml: [profile.release] strip = "debuginfo", "symboalen"
  • Inkrementele kompilaasje is standert útskeakele. De reden wurdt sein in tydlike oplossing foar in brek yn 'e kompilator dy't liedt ta crashes en deserialisaasjeflaters. In bugfix is ​​al taret en sil wurde opnommen yn 'e folgjende release. Om inkrementele kompilaasje werom te jaan, kinne jo de omjouwingsfariabele RUSTC_FORCE_INCREMENTAL=1 brûke.
  • In nij diel fan 'e API is ferpleatst nei de kategory stabile, ynklusyf de metoaden en ymplemintaasjes fan eigenskippen binne stabilisearre:
    • std::thread::beskikber_parallelisme
    • Resultaat :: kopiearre
    • Resultaat :: klonen
    • bosk: :asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • TryFrom foar u8
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • iter ::zip
    • NonZeroU8 :: is_power_of_two
    • NonZeroU16 :: is_power_of_two
    • NonZeroU32 :: is_power_of_two
    • NonZeroU64 :: is_power_of_two
    • NonZeroU128 :: is_power_of_two
    • DoubleEndedIterator foar ToLowercase-struktuer
    • DoubleEndedIterator foar ToUppercase-struktuer
    • TryFrom foar [T; N]
    • UnwindSafe foar de Once-struktuer
    • RefUnwindSafe foar ien kear
    • armv8 neon-stipefunksjes ynboud yn 'e kompilator foar aarch64
  • It attribút "const", dat de mooglikheid bepaalt om it yn elke kontekst te brûken ynstee fan konstanten, wurdt brûkt yn 'e funksjes:
    • mem::MiskienUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MiskienUninit::assume_init_ref
    • ffi :: CStr:: from_bytes_with_nul_unchecked

Boarne: opennet.ru

Add a comment