Rust 1.64 programspråk release

Utgivningen av Rust 1.64 allmänt programmeringsspråk, grundat av Mozilla-projektet, men nu utvecklat under överinseende av den oberoende ideella organisationen Rust Foundation, har publicerats. Språket fokuserar på minnessäkerhet och ger möjlighet att uppnå hög jobbparallellism samtidigt som man undviker användningen av en skräpsamlare och körtid (körtiden reduceras till grundläggande initiering och underhåll av standardbiblioteket).

Rusts minneshanteringsmetoder räddar utvecklaren från fel vid manipulering av pekare och skyddar mot problem som uppstår på grund av minneshantering på låg nivå, som att komma åt ett minnesområde efter att det har frigjorts, avläsning av nollpekare, buffertöverskridningar, etc. För att distribuera bibliotek, tillhandahålla builds och hantera beroenden utvecklar projektet Cargo package manager. Crates.io-förvaret stöds för värdbibliotek.

Minnessäkerhet tillhandahålls i Rust vid kompilering genom referenskontroll, hålla reda på objektägande, hålla reda på objektlivslängder (scopes) och bedöma riktigheten av minnesåtkomst under kodexekvering. Rust ger också skydd mot heltalsspill, kräver obligatorisk initiering av variabelvärden innan användning, hanterar fel bättre i standardbiblioteket, tillämpar konceptet med oföränderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga innovationer:

  • Kraven på Linux-miljön i kompilatorn, Cargo-pakethanteraren och libstd-standardbiblioteket har höjts - minimikraven för Glibc har höjts från version 2.11 till 2.17, och Linux-kärnan från version 2.6.32 till 3.2. Restriktionerna gäller även körbara Rust-program byggda med libstd. Distributionspaketen RHEL 7, SLES 12-SP5, Debian 8 och Ubuntu 14.04 uppfyller de nya kraven. Stöd för RHEL 6, SLES 11-SP4, Debian 7 och Ubuntu 12.04 kommer att upphöra. Användare som använder Rust-byggda körbara filer i miljöer med en äldre Linux-kärna uppmuntras att uppgradera sina system, stanna kvar på äldre versioner av kompilatorn eller underhålla sin egen libstd-gaffel med lager för att bibehålla kompatibiliteten.

    Bland skälen till att upphöra med stödet för äldre Linux-system är begränsade resurser för att fortsätta upprätthålla kompatibiliteten med äldre miljöer. Stöd för äldre Glibc kräver användning av äldre verktyg vid incheckning av ett kontinuerligt integrationssystem, inför ökande versionskrav i LLVM och korskompileringsverktyg. Ökningen av kärnversionskraven beror på möjligheten att använda nya systemanrop i libstd utan att behöva underhålla lager för att säkerställa kompatibilitet med äldre kärnor.

  • IntoFuture-egenskapen har stabiliserats, som liknar IntoIterator, men skiljer sig från den senare genom att använda ".await" istället för "for ... in ..."-loopar. När det kombineras med IntoFuture kan nyckelordet ".await" förvänta sig inte bara en Future-egenskap, utan också alla andra typer som kan konverteras till en Future.
  • Rostanalysverktyget ingår i samlingen av verktyg som tillhandahålls med Rust-releaser. Verktyget är också tillgängligt för installation med hjälp av rustup (rustup-komponent lägg till rostanalysator).
  • Cargo-pakethanteraren inkluderar arv av arbetsytor för att eliminera duplicering av vanliga fältvärden mellan paket, såsom Rust-versioner och arkiv-URL:er. Lade också till stöd för att bygga för flera målplattformar samtidigt (du kan nu ange mer än en parameter i alternativet "--target").
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • future::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-kompatibla typer, tidigare stabiliserade i std::ffi-modulen, har lagts till i kärnan och alloc-biblioteket:
    • kärna::ffi::CSr
    • kärna::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • C-typer som tidigare stabiliserats i std::os::råmodulen har lagts till i kärnmodulerna::ffi och std::ffi (till exempel har c_uint- och c_ulong-typerna föreslagits för uint- och ulong C-typerna):
    • ffi::c_char
    • ffi::c_dubbel
    • 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_short
  • Lågnivåhanterare har stabiliserats för användning med Poll-mekanismen (i framtiden är det planerat att tillhandahålla ett förenklat API som inte kräver användning av lågnivåstrukturer som Pull and Pin):

    • framtid::poll_fn
    • uppgift::klar!
  • Attributet "const", som bestämmer möjligheten att använda det i alla sammanhang istället för konstanter, används i funktionen slice::from_raw_parts.
  • För att lagra data mer kompakt har minneslayouten för strukturerna Ipv4Addr, Ipv6Addr, SocketAddrV4 och SocketAddrV6 ändrats. Det kan finnas ett kompatibilitetsproblem med enstaka paket som använder std::mem::transmute för manipulering av strukturer på låg nivå.
  • Bygget av rostkompilatorn för Windows-plattformen använder PGO-optimeringar (profilstyrd optimering), vilket gjorde det möjligt att öka kodkompileringsprestandan med 10-20%.
  • Kompilatorn har implementerat en ny varning om oanvända fält i vissa strukturer.

Dessutom kan du notera statusrapporten om utvecklingen av en alternativ implementering av Rust-språkkompilatorn, utarbetad av gccrs-projektet (GCC Rust) och godkänd för inkludering i GCC. Efter att ha integrerat gränssnittet kan GCC-standardverktygen användas för att kompilera program i Rust-språket utan att behöva installera rustc-kompilatorn, byggd med hjälp av LLVM-utvecklingar. Så länge utvecklingen går på rätt spår, och med undantag för oförutsedda problem, kommer Rust-fronten att integreras i GCC 13-utgåvan som är planerad till maj nästa år. GCC 13-implementeringen av Rust kommer att vara i betastatus, ännu inte aktiverad som standard.

Källa: opennet.ru

Lägg en kommentar