Uitgave Rust 1.78. De programmeertaal Borgo, die de sterke punten van Go en Rust combineert

De release van de algemene programmeertaal Rust 1.78 is gepubliceerd, oorspronkelijk ontwikkeld door Mozilla, maar tegenwoordig verder ontwikkeld onder de auspiciën van de onafhankelijke non-profitorganisatie Rust Foundation. De taal richt zich op veilig geheugenbeheer en biedt middelen voor het bereiken van hoge parallellisme zonder gebruik te maken van een garbage collector en runtime (de runtime beperkt zich tot basisinitialisatie en ondersteuning van de standaardbibliotheek).

Geheugenmethoden in Rust helpen ontwikkelaars om fouten bij het manipuleren van pointers te voorkomen en beschermen tegen problemen die voortkomen uit laag-niveau geheugenwerk, zoals toegang tot geheugen na vrijgave, derefereren van null pointers, buffer overflows, enz. Voor het verspreiden van bibliotheken, het garanderen van builds en het beheren van projectafhankelijkheden is er een pakketbeheerder genaamd Cargo ontwikkeld. Voor het plaatsen van bibliotheken wordt de repository crates.io ondersteund.

Veilige geheugenwerking in Rust wordt tijdens de compilatie gegarandeerd door middel van referentiecontrole, het bijhouden van eigenaarschap van objecten, het in acht nemen van de levensduur van objecten (scope) en het evalueren van toegangsrechten tot geheugen tijdens de uitvoering van code. Rust biedt ook middelen om integer-overflows te voorkomen, vereist dat waarden van variabelen voor gebruik worden geïnitialiseerd, behandelt fouten beter in de standaardbibliotheek, past het concept van onveranderlijke (immutable) referenties en variabelen als standaard toe en biedt sterke statische type-onderzoek voor het minimaliseren van logische fouten.

Belangrijkste vernieuwingen:

  • Er is een nieuwe naamruimte voor attributen voorgesteld: «#[diagnostic]», waarmee invloed kan worden uitgeoefend op de foutmeldingen die door de compiler worden gegeven. De eerste in de nieuwe naamruimte is het attribuut «#[diagnostic::on_unimplemented]», dat kan worden gebruikt om foutmeldingen aan te passen die worden gegeven wanneer een typeclass die niet is geïmplementeerd voor een type vereist is. #[diagnostic::on_unimplemented( message = «My Message for `ImportantTrait<{A}>` is not implemented for `{Self}`», label = «My Label», note = «Note 1», note = «Note 2») ] trait ImportantTrait<A> {} fn use_my_trait(_: impl ImportantTrait<i32>) {} fn main() { use_my_trait(String::new()); } error[E0277]: My Message for `ImportantTrait<i32>` is not implemented for `String` —> src/main.rs:12:18 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ My Label | | | vereist door een beperking geïntroduceerd door deze aanroep | = help: de trait `ImportantTrait<i32>` is niet geïmplementeerd voor `String` = opmerking: Note 1 = opmerking: Note 2
  • Voorgestelde assert-controles die worden toegepast op unsafe functies kunnen nu worden uitgesteld tot de codegeneratiefase, waardoor deze controles kunnen worden uitgevoerd zonder dat de standaardbibliotheek hoeft te worden opgebouwd in de modus «#[cfg(debug_assertions)]». Voor het activeren van de controles is het nu voldoende om debug asserts in te schakelen voor test- of debug builds van uw code.
  • Het gedrag van functies in de standaardbibliotheek die invloed hebben op de uitlijning van pointers en slices is nu voorspelbaar tijdens runtime en afhankelijk van de invoer. De functie pointer::align_offset, die de offset voor de uitlijning van een pointer berekent, geeft nu alleen usize::MAX terug als de operatie niet kan worden uitgevoerd. De functies slice::align_to en slice::align_to_mut, die slices omzetten naar een representatie met een uitgelijnde gemiddelde slice en de oorspronkelijke begin- en eind slices, geven nu altijd het grootste gemiddelde deel terug.
  • In de stabiele categorie zijn overgezet:
    • impl Read for &Stdin
    • Het is toegestaan om niet-statische (niet 'static) levensduur te gebruiken voor sommige implementaties die verband houden met std::error::Error.
    • In de implementatie impl is het toegestaan om de waarde ?Sized te gebruiken.
    • impl From for io::Error
  • De functie Barrier::new() is gestabiliseerd voor gebruik met het kenmerk 'const' in elke context in plaats van constanten.
  • Voor de doelplatforms x86_64-pc-windows-msvc, i686-pc-windows-msvc, x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-pc-windows-gnullvm en i686-pc-windows-gnullvm is nu minimaal Windows 10 vereist.
  • Derde niveau van ondersteuning is geïmplementeerd voor de platforms wasm32-wasip2, arm64ec-pc-windows-msvc, armv8r-none-eabihf en loongarch64-unknown-linux-musl. Derde niveau betekent basisondersteuning, maar zonder automatische tests, publicatie van officiële builds en verificatie van de mogelijkheid om de code te bouwen.
  • Tweede niveau van ondersteuning is geïmplementeerd voor het doelplatform Add wasm32-wasip1. Tweede niveau van ondersteuning biedt garantie voor build.
  • Het platform wasm32-wasi-preview1-threads is hernoemd naar wasm32-wasip1-threads.
  • De compiler is overgeschakeld naar het gebruik van LLVM 18. Bij gebruik van LLVM 18 voor de architecturen x86-32 en x86-64 is de ABI veranderd met betrekking tot de types u128 en i128.
  • In de pakketbeheerder Cargo is versie 4 van lockfiles (lockfile v4) gestabiliseerd.
  • In Cargo is een globale cache met informatie over het laatste gebruik van gegevens gestabiliseerd. De cache wordt opgeslagen in het bestand $CARGO_HOME/.global-cache met behulp van SQLite, wordt automatisch bijgewerkt en weerspiegelt de laatste wijzigingen met betrekking tot de index, crate-bestand, code-map, git clone en git checkout.

Daarnaast kan de programmeertaal Borgo worden vermeld, die probeert meer expressief te zijn dan de taal Go, maar minder complex dan de taal Rust. Borgo combineert de beste eigenschappen van Go en Rust en vult de tekortkomingen van elk van de talen aan. Bijvoorbeeld, de taal Go is eenvoudig en duidelijk, maar biedt geen geavanceerde middelen voor typeveiligheid. De taal Rust biedt middelen voor veilig programmeren, maar is overgecompliceerd. Dit project wordt ontwikkeld door Marco Sampellegrini, de auteur van het boek 'The Simple Haskell Handbook' en ontwikkelaar van het systeem voor continue integratie Quad CI.

Uitgave Rust 1.78. De programmeertaal Borgo, die de sterke punten van Go en Rust combineert

In Borgo wordt statische typing gebruikt, met types die lijken op die van Go en een syntaxis die lijkt op Rust. Het gebruik van puntkomma's aan het einde van regels in de Borgo-code is niet verplicht. Code geschreven in Borgo wordt gecompileerd naar Go-code, die volledig compatibel is met bestaande pakketten voor Go. De compiler is geschreven in Rust en wordt verspreid onder de ISC-licentie. use fmt enum NetworkState { Loading, Failed(int), Success(T), } struct Response { title: string, duration: int, } fn main() { let res = Response { title: "Hello world", duration: 0, } let state = NetworkState.Success(res) let msg = match state { NetworkState.Loading => "still loading", NetworkState.Failed(code) => fmt.Sprintf("Got error code: %d", code), NetworkState.Success(res) => res.title, } fmt.Println(msg) }

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster