Rust 1.60 programspråk release

Utgivningen av Rust 1.60 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:

  • Rustc-kompilatorn har ett stabiliserat LLVM-baserat system för att generera täckningsdata som används för att utvärdera kodtäckning under testning. För att aktivera täckningsdata under montering måste du använda "-Cinstrument-coverage"-flaggan, till exempel starta monteringen med kommandot "RUSTFLAGS="-C instrument-coverage" cargo build". Efter att ha kört den körbara filen som kompilerats på detta sätt kommer filen default.profraw att sparas i den aktuella katalogen, för bearbetning som du kan använda verktyget llvm-profdata från komponenten llvm-tools-preview. Utdata som behandlas av llvm-profdata kan sedan skickas till llvm-cov för att generera en kommenterad kodtäckningsrapport. Information om länken till källkoden hämtas från den körbara filen som undersöks, som innehåller nödvändiga data om kopplingen mellan täckningsräknare och koden. 1| 1|fn main() { 2| 1| println!("Hej världen!"); 3| 1|}
  • I lastpakethanteraren har stödet för "-timings"-flaggan stabiliserats, vilket inkluderar generering av en detaljerad rapport om byggets framsteg och utförandetiden för varje steg. Rapporten kan vara användbar för att optimera prestandan för monteringsprocessen.
  • Lastpakethanteraren erbjuder en ny syntax för mekanismen för villkorlig kompilering och val av valfria beroenden, konfigurerad i filen Cargo.toml genom att lista en lista med namngivna egenskaper i avsnittet [funktioner] och aktiveras genom att aktivera egenskaperna under paketbygget med flaggan "--features". Den nya versionen lägger till stöd för beroenden i separata namnområden och svaga beroenden.

    I det första fallet är det möjligt att använda element med prefixet "dep:" i avsnittet "[funktioner]" för att explicit länka till ett valfritt beroende utan att implicit representera detta beroende som en funktion. I det andra fallet har stöd för märkning med "?"-tecknet lagts till. ("paketnamn?/funktionsnamn") valfria beroenden som endast bör inkluderas om någon annan egenskap inkluderar det givna valfria beroendet. Till exempel, i exemplet nedan kommer aktivering av egenskapen serde att aktivera "serde"-beroendet, såväl som "serde"-egenskapen för "rgb"-beroendet, men bara om "rgb"-beroendet är aktiverat någon annanstans: [beroenden] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [funktioner] serde = ["dep:serde", "rgb?/serde"]

  • Stöd för inkrementell kompilering, som inaktiverades i den senaste versionen, har returnerats. Kompilatorfelet som gjorde att funktionen inaktiverades har lösts.
  • Löste några problem med att tillhandahålla Instant-timers med en garanti för monoton timing, som tar hänsyn till tiden som systemet spenderar i viloläge. Tidigare användes OS API när det var möjligt för att styra timern, vilket inte tog hänsyn till problematiska situationer som bryter tidens monotoni, såsom hårdvaruproblem, användandet av virtualisering eller fel i operativsystemet.
  • En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • skiva::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • Kanske Uninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Display för io::ErrorKind
    • Från för ExitCode
    • Inte för ! (skriv "aldrig")
    • _Op_Tilldela<$t>
    • arch::is_aarch64_feature_detected!
  • Den tredje nivån av stöd har implementerats för plattformarna mips64-openwrt-linux-musl* och armv7-unknown-linux-uclibceabi (softfloat). Den tredje nivån innebär grundläggande support, men utan automatiserad testning, publicering av officiella builds eller kontroll av om koden kan byggas.
  • Kompilatorn har bytts till att använda LLVM 14.

Dessutom kan du notera:

  • Lade till stöd för bootstrapping av rustc-kompilatorn med hjälp av rustc_codegen_gcc-backend, vilket låter dig använda libgccjit-biblioteket från GCC-projektet som en kodgenerator i rustc, vilket gör att rustc kan ge stöd för arkitekturer och optimeringar tillgängliga i GCC. Kompilatorkampanj innebär möjligheten att använda en GCC-baserad kodgenerator i rustc för att bygga rustc-kompilatorn själv. På den praktiska sidan låter den här funktionen dig bygga rostprogram för arkitekturer som tidigare inte stöddes i rustc.
  • Utgivningen av verktygssatsen uutils coreutils 0.0.13 är tillgänglig, inom vilken en analog till GNU Coreutils-paketet, omskrivet på Rust-språket, utvecklas. Coreutils kommer med över hundra verktyg, inklusive sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln och ls. Målet med projektet är att skapa en plattformsoberoende alternativ implementering av Coreutils, som kan köras på Windows, Redox och Fuchsia-plattformar, samt distribution under den tillåtande MIT-licensen, istället för GPL copyleft-licensen.

    Den nya versionen har förbättrade implementeringar av många verktyg, inklusive avsevärt förbättrad kompatibilitet av verktygen cp, dd, df, split och tr med deras motsvarigheter från GNU-projektet. Onlinedokumentation tillhandahålls. Clap-parsern används för att analysera kommandoradsargument, vilket har förbättrat utdata för "--help"-flaggan och lagt till stöd för förkortningar av långa kommandon (du kan till exempel ange "ls -col" istället för "ls -color" ”).

Källa: opennet.ru

Lägg en kommentar