Basa pemrograman Rust 1.38 release

diterbitake release basa pemrograman sistem Karat 1.38, didegaké déning proyèk Mozilla. Basa fokus ing safety memori, menehi Manajemen memori otomatis, lan menehi liya kanggo entuk podo tugas dhuwur tanpa nggunakake kolektor uwuh utawa runtime.

Manajemen memori otomatis Rust mbebasake pangembang saka manipulasi pointer lan nglindhungi saka masalah sing muncul saka manipulasi memori tingkat rendah, kayata akses memori sawise-free, dereferensi null pointer, overruns buffer, lan liya-liyane. Pangatur paket dikembangake kanggo nyebarake perpustakaan, mesthekake perakitan lan ngatur dependensi dening proyek kasebut. Cargo, ngidini sampeyan entuk perpustakaan sing dibutuhake kanggo program ing siji klik. Repositori didhukung kanggo dadi tuan rumah perpustakaan peti.io.

Utama inovasi:

  • Nambahake mode kompilasi pipelined (pipelined), ing ngendi pambangunan paket peti gumantung diwiwiti sanalika metadata dependensi kasedhiya, tanpa ngenteni kompilasi rampung. Nalika nyusun paket, dependensi ora perlu dirakit kanthi lengkap, mung nemtokake metadata, sing kalebu dhaptar jinis, dependensi, lan unsur sing diekspor. Metadata kasedhiya ing awal proses kompilasi, mula paket sing disambung saiki bisa dikompilasi luwih awal. Nalika mbangun paket siji, mode ngajokaken ora mengaruhi kinerja, nanging yen mbangun isine paket karo dependensi branched, wektu mbangun sakabèhé bisa suda dening 10-20%;
  • Njamin deteksi panggunaan fungsi sing salah std::mem::uninitialized и std::mem::nol. Contone, std::mem::uninitialized trep kanggo nggawe array kanthi cepet, nanging mislead compiler amarga katon diinisialisasi, nanging ing kasunyatan, nilai kasebut tetep ora diinisialisasi. Fungsi mem:: uninitialized wis ditandhani minangka ora digunakake lan dianjurake kanggo nggunakake jinis penengah tinimbang MungkinUnit. Minangka mem :: nul, fungsi iki bisa nimbulaké masalah karo jinis sing ora bisa nampa nilai nul.

    Kanggo bantuan ngenali prilaku undefined, release anyar nambah lint mriksa kanggo compiler sing ndeteksi sawetara masalah karo mem:: uninitialized utawa mem:: zeroed. Contone, sampeyan saiki entuk kesalahan nalika nyoba nggunakake mem:: uninitialized utawa mem:: zeroed karo jinis & T lan Box‹T›, sing makili obyek pointer sing ora bisa nampa nilai null;

  • Atribut "#[deprecated]" wis ditambahi kanggo ngidini paket peti ditandhani lungse lan dijadwal kanggo pambusakan ing mangsa ngarep. Ing Rust 1.38, atribut iki uga bisa digunakake kanggo makro;
  • Nambahake kemampuan kanggo nggunakake atribut "#[global_allocator]" ing submodules;
  • Fitur ditambahake std::any::type_name, sing ngidini sampeyan ngerteni jeneng jinis kasebut, sing bisa migunani kanggo tujuan debugging. Contone, sajrone eksekusi program sampeyan bisa ngerteni apa jinis fungsi kasebut:

    fn gen_value‹T: Default>() -› T {
    println!("Inisialisasi instance {}", std::any::type_name::‹T›());
    Default::default()
    }

    fn utama() {
    let _: i32 = gen_value(); # "i32" bakal dicithak
    let _: String = nilai_gen(); # bakal nyithak "alloc::string::String"
    }

  • Fungsi tambahan saka perpustakaan standar:
    • irisan :: {concat, nyambung, gabung} saiki bisa njupuk nilai & [T] saliyane & T;
    • "*const T" lan "*mut T" saiki ngleksanakake marker:: Unpin;
    • "Arc‹[T]›" lan "Rc‹[T]›" saiki ngleksanakake FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} saiki ngleksanakake DoubleEndedIterator.
    • ascii :: EscapeDefault ngleksanakake Klone lan Tampilan.
  • Bagean anyar saka API wis ditransfer menyang kategori stabil, kalebu cara sing wis stabil
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Durasi::as_secs_f{32|64},
    • Durasi::div_duration_f{32|64},
    • Durasi::div_f{32|64},
    • Durasi::from_secs_f{32|64},
    • Durasi::mul_f{32|64},
    • operasi divisi karo sisa
      div_euclid lan rem_euclid kanggo kabeh primitif integer;

  • Dhukungan ditambahake kanggo nemtokake pilihan "--fitur" kaping pirang-pirang kanggo ngaktifake fitur sing beda ing manajer paket kargo;
  • Compiler nyedhiyakake katelu level dhukungan kanggo platform target aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-target, armlinux7 -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl lan riscv32i-unknown-none-elf. Tingkat katelu kalebu dhukungan dhasar, nanging tanpa tes otomatis lan publikasi bangunan resmi.

Source: opennet.ru

Add a comment