Rust 1.38 Programming Language Release

diterbitkeun release basa programming sistem Karat 1.38, diadegkeun ku proyék Mozilla. Basa museurkeun kana kaamanan memori, nyadiakeun manajemén memori otomatis, sarta nyadiakeun sarana pikeun ngahontal paralelisme tugas tinggi tanpa ngagunakeun collector sampah atanapi runtime.

Manajemén mémori otomatis Rust ngahémat pamekar tina ngamanipulasi pointer sareng ngajagi tina masalah anu timbul tina manipulasi mémori tingkat rendah, sapertos ngaksés daérah mémori saatos dibébaskeun, ngémutan pointer nol, overruns panyangga, jsb. Pikeun ngadistribusikaeun perpustakaan, mastikeun assembly jeung ngatur kagumantungan, proyék ngamekarkeun manajer pakét kargo, anu ngamungkinkeun anjeun kéngingkeun perpustakaan anu anjeun peryogikeun pikeun program dina hiji klik. Repository dirojong pikeun host perpustakaan crates.io.

utama inovasi:

  • Ditambahkeun mode kompilasi pipelined (pipelined), dimana ngawangun bungkusan crate gumantung dimimitian pas metadata kagumantungan sadia, tanpa ngantosan kompilasi na réngsé. Nalika nyusun pakét, katergantungan henteu kedah dirakit sapinuhna, ngan ukur netepkeun metadata, anu kalebet daptar jinis, dependensi, sareng unsur anu diékspor. Metadata disayogikeun dina awal prosés kompilasi, ku kituna pakét anu dikaitkeun ayeuna tiasa disusun langkung awal. Nalika ngawangun pakét tunggal, modeu anu diusulkeun henteu mangaruhan kinerja, tapi upami ngawangun nyertakeun bungkusan sareng katergantungan cabang, waktos ngawangun sadayana tiasa dikirangan ku 10-20%;
  • Mastikeun deteksi pamakean fungsi anu salah std::mem::uninitialized и std::mem::nol. Contona, std::mem::uninitialized merenah pikeun gancang nyieun arrays, tapi misleads compiler sabab nembongan jadi initialized, tapi kanyataanana nilai tetep uninitialized. The mem:: fungsi uninitialized geus ditandaan salaku deprecated sarta eta disarankeun pikeun ngagunakeun tipe panengah gantina. MeureunUnit. Sedengkeun pikeun mem :: zeroed, fungsi ieu bisa ngabalukarkeun masalah sareng jenis nu teu bisa nampa nilai enol.

    Pikeun mantuan ngaidentipikasi kabiasaan undefined, release anyar nambihkeun cék lint ka kompiler nu ngadeteksi sababaraha masalah sareng mem :: uninitialized atanapi mem :: zeroed. Contona, anjeun ayeuna meunang kasalahan nalika nyobian ngagunakeun mem::uninitialized atanapi mem::zeroed kalawan tipe & T jeung Box‹T›, nu ngagambarkeun objék pointer nu teu bisa nampa nilai null;

  • Atribut "#[deprecated]" geus dimekarkeun pikeun ngidinan bungkusan crate ditandaan luntur sarta dijadwalkeun pikeun ngahapus hareup. Dina Rust 1.38, atribut ieu ogé tiasa dianggo pikeun makro;
  • Ditambahkeun kamampuhan pikeun ngagunakeun atribut "#[global_allocator]" dina submodules;
  • fitur ditambahkeun std::any::type_name, nu ngidinan Anjeun pikeun manggihan nami tipe, nu bisa jadi mangpaat pikeun tujuan debugging. Salaku conto, nalika palaksanaan program anjeun tiasa terang naon jinis fungsina disebut:

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

    fn utama() {
    hayu _: i32 = gen_value(); # "i32" bakal dicitak
    hayu _: String = gen_value(); # bakal nyitak "alloc:: string:: String"
    }

  • Fungsi tambahan tina perpustakaan standar:
    • keureutan :: {concat, nyambung, gabung} ayeuna tiasa nyandak nilai & [T] salian & T;
    • "* const T" jeung "*mut T" ayeuna nerapkeun spidol:: Unpin;
    • "Arc‹[T]›" jeung "Rc‹[T]›" ayeuna nerapkeun FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} ayeuna nerapkeun DoubleEndedIterator.
    • ascii :: EscapeDefault ngalaksanakeun Klon sareng Tampilan.
  • Bagian anyar API parantos dialihkeun kana kategori stabil, kalebet metode anu parantos distabilkeun
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Durasi::as_secs_f{32|64},
    • Lilana::div_duration_f{32|64},
    • Lilana::div_f{32|64},
    • Lilana::from_secs_f{32|64},
    • Lilana::mul_f{32|64},
    • operasi division kalawan sésana
      div_euclid jeung rem_euclid pikeun sakabéh primitif integer;

  • Ditambahkeun dukungan pikeun netepkeun pilihan "--fitur" sababaraha kali pikeun ngaktipkeun fitur anu béda dina manajer pakét kargo;
  • Compiler nyadiakeun katilu level dukungan pikeun platform target aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-targets, armlinux7 -gnueabi, armv7-teu dipikanyaho-linux-musleabi, sagi genep-teu dipikanyaho-linux-musl sareng riscv32i-teu dipikanyaho-euweuh-elf. Tingkat katilu ngalibatkeun dukungan dasar, tapi tanpa tés otomatis sareng publikasi wangunan resmi.

sumber: opennet.ru

Tambahkeun komentar