UtgÄvan Rust 1.89. Cirka 8% av src-paketen i Debian Sid Àr knutna till Rust.

Utgivningen av programmeringssprÄket Rust 1.89 har offentliggjorts, som ursprungligen utvecklades av Mozilla men nu vidmakthÄlls av den oberoende icke-vinstdrivande organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering och erbjuder verktyg för att uppnÄ hög parallellism i uppgiftsutförande, samtidigt som det klarar sig utan att anvÀnda en skrÀpaare och runtime (runtime begrÀnsas till grundlÀggande initialisering och underhÄll av standardbiblioteket).

Minneshanteringsmetoderna i Rust skyddar utvecklare frÄn att göra fel vid manipulering av pekare och skyddar mot problem som uppstÄr vid lÄg nivÄ minnesarbete, sÄsom att komma Ät minnesomrÄden efter att de har frigjorts, dereferera nullpekare, buffer overflow, etc. För distribution av bibliotek, byggande och hantering av projektberoenden utvecklas paketförvaltaren Cargo. För lagring av bibliotek stöds ett repository pÄ crates.io.

SÀker minneshantering sÀkerstÀlls i Rust under kompilering genom att kontrollera referenser, spÄra Àgandeskap över objekt, ta hÀnsyn till livslÀngden av objekt (synlighet) och utvÀrdera korrekt minnesÄtkomst under körning av koden. Rust erbjuder ocksÄ verktyg för att skydda mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan de anvÀnds, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.

Huvudsakliga nyheter:

  • Möjligheten att anvĂ€nda tecknet «_» som argument för generiska parametrar med flaggan «const» har tillhandahĂ„llits för att hĂ€rleda vĂ€rden för dessa parametrar baserat pĂ„ den omgivande kontexten. pub fn all_false<const LEN: usize>() -> [bool; LEN] { [false; _] }
  • Ett nytt lint-varningsmeddelande «mismatched_lifetime_syntaxes» har lagts till för att lösa problemet med otydlig livstid-definition i funktionssignaturer nĂ€r mekanismen «lifetime elision» anvĂ€nds (automatiskt bestĂ€mmer livstiden för referenser, vilket gör det möjligt att undvika manuell angivelse). Varningen kontrollerar att in- och utparametrar för funktionen tillhör samma typgrupp. Grupperna bildas baserat pĂ„ stöd för explicit livstid angivelse och förmĂ„gan för kompilatorn att automatiskt hĂ€rleda livstiden (till exempel i typerna «&’a T» och «ContainsLifetime<‘a>» kan en livstid tydligt anges, men kompilatorn kan inte automatiskt bestĂ€mma livstiden, medan i typerna «&T», «&’_ T» och «ContainsLifetime<‘_>» kan bĂ„de explicit angivelse och automatisk bestĂ€mning anvĂ€ndas).
  • I attributet «target_feature» för x86-system har möjligheten att kontrollera stöd för utvidgade instruktioner som sha512, sm3, sm4, kl och widekl, samt separata funktioner av avx512, implementerats. #[target_feature(enable = «avx512bw»)] pub fn cool_simd_code( .. ) -> { }
  • Körning av doctest (tester inbĂ€ddade i dokumentationen) garanteras inte bara för den aktuella mĂ„lenheten utan ocksĂ„ för andra enheter som anges vid körning av paketmanagern «cargo» («cargo test —doc —target other_target»).
  • För funktioner ‘extern «C»‘ vid byggnation för mĂ„lenheten «wasm32-unknown-unknown» har den standard C ABI för WebAssembly implementerats.
  • Med vissa förbehĂ„ll angĂ„ende typkompatibilitet Ă€r anvĂ€ndning av typerna i128 och u128 tillĂ„ten i externa C-funktioner (extern "C"), för vilka tidigare lintes warnet "improper_ctypes_definitions" visades.
  • En ny uppsĂ€ttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
    • MĂ„nga inbyggda funktioner (Intrinsics) i kompilatorn för x86-processorer, inklusive funktioner för AVX512, SHA512, SM3 och SM4.
    • NonZero
    • File::lock
    • File::lock_shared
    • File::try_lock
    • File::try_lock_shared
    • File::unlock
    • NonNull::from_ref
    • NonNull::from_mut
    • NonNull::without_provenance
    • NonNull::with_exposed_provenance
    • NonNull::expose_provenance
    • OsString::leak
    • PathBuf::leak
    • Result::flatten
    • std::os::linux::net::TcpStreamExt::quickack
    • std::os::linux::net::TcpStreamExt::set_quickack

    Indikatorn "const" har tillÀmpats i funktioner:

    • ::as_mut_slice
    • ::eq_ignore_ascii_case
    • str::eq_ignore_ascii_case
  • ÖvergĂ„ngen till den andra stödplattformen "x86_64-apple-darwin" har pĂ„börjats frĂ„n första stöd-nivĂ„n (Apple planerar att avveckla stödet för x86_64-arkitekturen). Första stöd-nivĂ„n innebĂ€r att skapa binĂ€rupplagor, genomföra noggranna tester och ge den högsta garantin för plattformsstöd – varje förĂ€ndring i kompilatorn kontrolleras med en fullstĂ€ndig testsuite. Den andra stöd-nivĂ„n innebĂ€r garanti för byggnation, men inga garantier för att klara testsuiterna.
  • Den tredje stöd-nivĂ„n för plattformarna "loongarch32-unknown-none" och "loongarch32-unknown-none-softfloat" har implementerats. Tredje stöd-nivĂ„n innebĂ€r grundlĂ€ggande stöd, men utan automatiserad testning, publicering av officiella byggnader och verifiering av kodbyggbarhet.

Relaterade hÀndelser och projekt kopplade till Rust kan ocksÄ nÀmnas:

  • En rapport om tillstĂ„ndet för Rust-paket i Debian har publicerats. Det noteras att i Debian Unstable (Sid) Ă€r cirka 8 % av src-paketen i det huvudsakliga arkivet kopplade till minst ett "librust-*"-paket. I Debian 12 var denna siffra 4,5 %. Det har ocksĂ„ rapporterats att över 3000 paket inkluderar Rust-kod som har flyttats till paket librust-..-dev, och 150 src-paket levererar kompilerade körbara filer eller Rust-bibliotek.

    Av intressanta Debian-paket nÀmns sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d och fish. Valfri Rust-stöd har implementerats i APT, QEMU (virtiofsd), Linux-kÀrnan och Mesa, och förvÀntas ocksÄ i LibreOffice. Ett verktyg för att konvertera crate-paket till Debian src-paket har skapats.

  • Projektet tmux-rs har presenterats, vilket utvecklar en klon av terminalmultiplexern tmux (konsolfönsterhanterare) som har skrivits om frĂ„n C till Rust.
  • Tyr-driften frĂ„n företaget Collabora har publicerat en artikel om enhetstransaktioner pĂ„ kĂ€rnnivĂ„ för GPU:er och principerna för utveckling av sĂ„dana drivrutiner i Rust.
  • Ett universellt program skrivet i Rust har demonstrerats, möjligt att köras bĂ„de pĂ„ CPU och pĂ„ olika GPU-plattformar: CUDA för NVIDIA, SPIR-V för Vulkan-stödda GPU:er, Metal för Apple, DirectX 12 för Windows och WebGPU för webblĂ€sare.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster