Rust 1.65 programmeertaal release

De release van de algemene programmeertaal Rust 1.65, 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:

  • Ondersteuning toegevoegd voor generieke geassocieerde typen (GAT, Generic Associated Types), die het mogelijk maken om type-aliassen te maken die aan een ander type zijn gekoppeld en waarmee u typeconstructors aan eigenschappen kunt koppelen. eigenschap Foo {type Bar<'x>; }
  • De “let... else”-expressie is geïmplementeerd, waardoor u de patroonovereenkomstvoorwaarde direct binnen de “let”-expressie kunt controleren en willekeurige code kunt uitvoeren als het patroon niet overeenkomt. let Ok(count) = u64::from_str(count_str) else { paniek!("Kan geheel getal niet parseren: '{count_str}'"); };
  • Sta het gebruik van een break-instructie toe om benoemde blokken voortijdig te verlaten, waarbij de bloknaam (label) wordt gebruikt om het blok te identificeren dat moet worden beëindigd. laat resultaat = 'blok: {do_thing(); if condition_not_met() {breek 'blok 1; } doe_next_thing(); if condition_not_met() {breek 'blok 2; } doe_laatste_ding(); 3 };
  • Voor Linux is de mogelijkheid toegevoegd om foutopsporingsinformatie afzonderlijk op te slaan (split-debuginfo), voorheen alleen beschikbaar voor het macOS-platform. Wanneer u de optie "-Csplit-debuginfo=unpacked" specificeert, worden debuginfo-gegevens in DWARF-indeling opgeslagen in verschillende afzonderlijke objectbestanden met de extensie ".dwo". Als u "-Csplit-debuginfo=packed" opgeeft, wordt één pakket in de indeling ".dwp" gemaakt dat alle debuginfo-gegevens voor het project bevat. Om debuginfo rechtstreeks in de .debug_*-sectie van ELF-objecten te integreren, kunt u de optie "-Csplit-debuginfo=off" gebruiken.
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • std::backtrace::Backtrace
    • Gebonden::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Het attribuut “const”, dat de mogelijkheid bepaalt om het in elke context te gebruiken in plaats van constanten, wordt gebruikt in de functies <*const T&>::offset_from en <*mut T>::offset_from
  • Als onderdeel van de laatste fase van het overbrengen van de implementatie van het LSP-protocol (Language Server Protocol) naar roest-analyzer, werd de verouderde implementatie van Rust Language Server (RLS) vervangen door een stub-server die een waarschuwing geeft met de suggestie om over te schakelen naar met behulp van een roestanalysator.
  • Tijdens het compileren wordt ondersteuning voor inline implementatie van MIR-tussencode ingeschakeld, wat de compilatie van typische kratpakketten met 3-10% versnelt.
  • Om geplande builds te versnellen, zorgt de Cargo-pakketmanager voor het sorteren van taken die in de wachtrij wachten op uitvoering.

Daarnaast kunt u het interview bekijken over het gebruik van de Rust-taal bij Volvo om componenten van auto-informatiesystemen te ontwikkelen. Er zijn geen plannen om bestaande en geteste code in Rust te herschrijven, maar voor nieuwe code is Rust een van de voorkeursopties om de kwaliteit te verbeteren tegen lagere kosten. Er zijn ook werkgroepen opgericht die zich bezighouden met het gebruik van de Rust-taal in de automobielverenigingen AUTOSAR (AUTomotive Open System ARchitecture) en SAE (Society of Automotive Engineers).

Daarnaast sprak David Kleidermacher, vice-president engineering van Google, over de vertaling van de code die op het Android-platform wordt gebruikt om encryptiesleutels naar Rust te beheren, evenals het gebruik van Rust bij de implementatie van het DNS via HTTPS-protocol in de stack voor UWB-chips (Ultra-Wideband) en in het virtualisatieframework (Android Virtualization Framework) geassocieerd met de Tensor G2-chip. Er worden ook nieuwe stacks voor Bluetooth en Wi-Fi ontwikkeld, herschreven in Rust, voor Android. De algemene strategie is om de beveiliging geleidelijk te versterken, eerst door de meest kwetsbare en vitale softwarecomponenten naar Rust te converteren en vervolgens uit te breiden naar andere gerelateerde subsystemen. Vorig jaar werd de Rust-taal opgenomen in de lijst met toegestane talen voor de ontwikkeling van het Android-platform.

Bron: opennet.ru

Voeg een reactie