Rust 1.61 programmeertaal release

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

  • Het is mogelijk om vanuit de hoofdfunctie uw eigen retourcodes te definiëren. Oorspronkelijk kon de hoofdfunctie van Rust alleen het type "()" (eenheid) retourneren, wat altijd een succesvolle afsluitstatus aangaf, tenzij de ontwikkelaar expliciet de functie "process::exit(code)" aanriep. In Rust 1.26 was het, met behulp van de onstabiele Termination-eigenschap in de hoofdfunctie, mogelijk om de waarden "Ok" en "Err" te retourneren, overeenkomend met de EXIT_SUCCESS- en EXIT_FAILURE-codes in C-programma's. In Rust 1.61 is de Termination-eigenschap stabiel gemaakt en is een afzonderlijk ExitCode-type voorgesteld om een ​​specifieke retourcode weer te geven, die platformspecifieke retourtypen abstraheert door zowel vooraf gedefinieerde constanten SUCCESS als FAILURE te leveren, en de From-methode. om een ​​aangepaste retourcode te retourneren. gebruik std::process::ExitCode; fn main() -> ExitCode { if!check_foo() { return ExitCode::from(8); } ExitCode::SUCCESS }
  • Extra mogelijkheden van functies die zijn gedefinieerd met de uitdrukking “const fn” zijn gestabiliseerd, die niet alleen als reguliere functies kunnen worden aangeroepen, maar ook in elke context kunnen worden gebruikt in plaats van constanten. Deze functies worden berekend tijdens het compileren en niet tijdens runtime. Ze zijn dus onderworpen aan bepaalde beperkingen, zoals de mogelijkheid om alleen van constanten te lezen. In de nieuwe versie zijn basisbewerkingen met functieaanwijzers toegestaan ​​binnen const-functies (het maken, doorgeven en casten van aanwijzers is toegestaan, maar het aanroepen van een functie via aanwijzer is niet toegestaan); eigenschapsgrenzen voor generieke parameters van const-functies zoals T: Kopiëren; dynamisch verzendbare eigenschappen (dyn Trait); impl Eigenschapstypen voor functieargumenten en retourwaarden.
  • De stream verwerkt Stdin, Stdout en Stderr in std::io hebben nu een statische levensduur (“statisch”) wanneer ze vergrendeld zijn, waardoor constructies als “let out = std::io::stdout().lock();” met het krijgen van een handvat en het instellen van een slot in één uitdrukking.
  • Een nieuw deel van de API is overgebracht naar de stabiele categorie, inclusief de methoden en implementaties van eigenschappen:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Schrijven voor cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::van_padnaam
    • std::process::ExitCode
    • std::proces::Beëindiging
    • std::thread::JoinHandle::is_finished
  • 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 en <*mut T>::offset
    • <*const T>::wrapping_offset en <*mut T>::wrapping_offset
    • <*const T>::add en <*mut T>::add
    • <*const T>::sub en <*mut T>::sub
    • <*const T>::wrapping_add en <*mut T>::wrapping_add
    • <*const T>::wrapping_sub en <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Bovendien kunt u het artikel "Rust: A Critical Retrospective" noteren met een samenvatting van indrukken van de Rust-taal nadat u er 100 regels code in had geschreven tijdens de ontwikkeling van het Xous microkernel-besturingssysteem dat in de firmware wordt gebruikt. Nadelen zijn onder meer de moeilijk te begrijpen syntaxis, de onvolledigheid en voortdurende ontwikkeling van de taal, het gebrek aan herhaalbare builds, typische problemen met het afhankelijkheidsvertrouwen in Crates.io en de noodzaak om een ​​bepaalde discipline te handhaven om veilige code te schrijven. Functies die de verwachtingen overtroffen zijn onder meer tools voor het refactoren van code en het herwerken van ‘hacks’ die zijn toegevoegd tijdens rapid prototyping.

Bron: opennet.ru

Voeg een reactie