Rust 1.64 programmeertaal release

De release van de algemene programmeertaal Rust 1.64, opgericht door het Mozilla-project, maar nu ontwikkeld onder auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation, is gepubliceerd. De taal is gericht op geheugenveiligheid en biedt de middelen om een ​​hoog parallellisme te bereiken bij het uitvoeren van taken, terwijl het gebruik van een garbage collector en runtime wordt vermeden (runtime wordt beperkt tot basisinitialisatie en onderhoud van de standaardbibliotheek).

De geheugenbeheertechnieken van Rust bevrijden de ontwikkelaar van pointermanipulatiefouten en beschermen tegen problemen die voortkomen uit geheugenmanipulatie op laag niveau, zoals after-free toegang, null pointer-dereferenties, bufferoverruns en dergelijke. Om bibliotheken te distribueren, de assemblage te garanderen en afhankelijkheden te beheren, ontwikkelt het project de Cargo-pakketbeheerder. De kratten.io-repository wordt ondersteund voor het hosten van bibliotheken.

Geheugenveiligheid wordt in Rust afgedwongen tijdens het compileren door middel van referentiecontrole, het volgen van objecteigendom, overweging van de levensduur van objecten (scoping) en evaluatie van geheugentoegang tijdens runtime. Rust biedt ook bescherming tegen overflows van gehele getallen, vereist dat variabelewaarden vóór gebruik worden geïnitialiseerd, heeft een betere foutafhandeling in de standaardbibliotheek, gebruikt standaard het concept van onveranderlijke referenties en variabelen en biedt sterke statische typering om logische fouten te minimaliseren.

Belangrijkste innovaties:

  • De vereisten voor de Linux-omgeving in de compiler, de Cargo-pakketbeheerder en de libstd-standaardbibliotheek zijn verhoogd - de minimumvereisten voor Glibc zijn verhoogd van versie 2.11 naar 2.17, en de Linux-kernel van versie 2.6.32 naar 3.2. De beperkingen zijn ook van toepassing op uitvoerbare bestanden van Rust-toepassingen die zijn gebouwd met libstd. De distributiekits RHEL 7, SLES 12-SP5, Debian 8 en Ubuntu 14.04 voldoen aan de nieuwe eisen. Ondersteuning voor RHEL 6, SLES 11-SP4, Debian 7 en Ubuntu 12.04 wordt stopgezet. Gebruikers die door Rust gebouwde uitvoerbare bestanden gebruiken in omgevingen met een oudere Linux-kernel worden aangemoedigd om hun systemen te upgraden, oudere releases van de compiler te blijven gebruiken of hun eigen libstd-fork met lagen te onderhouden om de compatibiliteit te behouden.

    Een van de redenen voor het beëindigen van de ondersteuning voor oudere Linux-systemen is de beperkte middelen om de compatibiliteit met oudere omgevingen te kunnen blijven behouden. Ondersteuning voor oudere Glibc vereist het gebruik van oudere tools bij het inchecken van een continu integratiesysteem, in het licht van de toenemende versievereisten in LLVM en cross-compilatiehulpprogramma's. De toename van de vereisten voor de kernelversie is te danken aan de mogelijkheid om nieuwe systeemaanroepen in libstd te gebruiken zonder de noodzaak om lagen te onderhouden om compatibiliteit met oudere kernels te garanderen.

  • De IntoFuture-eigenschap is gestabiliseerd, die lijkt op IntoIterator, maar verschilt van de laatste door het gebruik van “.await” in plaats van “for ... in ...”-loops. In combinatie met IntoFuture kan het trefwoord ".await" niet alleen een toekomstige eigenschap verwachten, maar ook alle andere typen die naar een toekomst kunnen worden geconverteerd.
  • Het roestanalysehulpprogramma is opgenomen in de verzameling hulpprogramma's die bij Rust-releases worden geleverd. Het hulpprogramma kan ook worden geïnstalleerd met behulp van Rustup (rustup-component voegt roest-analyzer toe).
  • De Cargo-pakketbeheerder omvat overerving van werkruimten om duplicatie van gemeenschappelijke veldwaarden tussen pakketten, zoals Rust-versies en repository-URL's, te elimineren. Ook ondersteuning toegevoegd voor het bouwen voor meerdere doelplatforms tegelijk (je kunt nu meer dan één parameter opgeven in de optie “--target”).
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • toekomst::IntoFuture
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • C-compatibele typen, eerder gestabiliseerd in de std::ffi-module, zijn toegevoegd aan de core en de alloc-bibliotheek:
    • kern::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • C-typen die eerder in de std::os::raw-module waren gestabiliseerd, zijn toegevoegd aan de core::ffi- en std::ffi-modules (er zijn bijvoorbeeld c_uint- en c_ulong-typen voorgesteld voor de uint- en ulong C-typen):
    • 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
  • Handlers op laag niveau zijn gestabiliseerd voor gebruik met het Poll-mechanisme (in de toekomst is het de bedoeling om een ​​vereenvoudigde API te bieden die niet het gebruik van structuren op laag niveau zoals Pull en Pin vereist):

    • toekomst::poll_fn
    • taak::klaar!
  • Het attribuut “const”, dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt in de functie slice::from_raw_parts.
  • Om gegevens compacter op te slaan, is de geheugenindeling van de Ipv4Addr-, Ipv6Addr-, SocketAddrV4- en SocketAddrV6-structuren gewijzigd. Er kan een compatibiliteitsprobleem zijn met pakketten met enkele kratten die std::mem::transmute gebruiken voor manipulatie van structuren op laag niveau.
  • Bij de bouw van de rust-compiler voor het Windows-platform wordt gebruik gemaakt van PGO-optimalisaties (profielgestuurde optimalisatie), waardoor het mogelijk werd de prestaties van de codecompilatie met 10-20% te verbeteren.
  • De compiler heeft een nieuwe waarschuwing over ongebruikte velden in bepaalde structuren geïmplementeerd.

Bovendien kunt u het statusrapport bekijken over de ontwikkeling van een alternatieve implementatie van de Rust-taalcompiler, opgesteld door het gccrs-project (GCC Rust) en goedgekeurd voor opname in de GCC. Na integratie van de frontend kunnen de standaard GCC-tools worden gebruikt om programma's in de Rust-taal te compileren zonder de noodzaak om de rustc-compiler te installeren, gebouwd met behulp van LLVM-ontwikkelingen. Zolang de ontwikkeling op schema ligt, en onvoorziene problemen voorbehouden, zal de Rust-frontend worden geïntegreerd in de GCC 13-release die gepland staat voor mei volgend jaar. De GCC 13-implementatie van Rust bevindt zich in de bètastatus en is nog niet standaard ingeschakeld.

Bron: opennet.ru

Voeg een reactie