Rust 1.39 Programming Language Release

diterbitkeun release basa programming sistem Karat 1.39, 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:

  • Distabilkeun sintaksis programming Asynchronous anyar dumasar kana fungsi "async", async move {...} block, sarta operator ".await", nu matak ngamudahkeun nulis pawang nu teu meungpeuk aliran paréntah utama. Dibandingkeun jeung API saméméhna ditawarkeun keur Asynchronous I / O, async / .await constructs basajan ngartos, kacida dibaca, sarta ngidinan Anjeun pikeun nerapkeun interaksi Asynchronous kompléks ngagunakeun téhnik kontrol aliran akrab dumasar kana loop, pernyataan kondisional, sarta iwal.

    Sintaksis Async-await ngidinan Anjeun pikeun nyieun pungsi nu bisa ngareureuhkeun palaksanaan maranéhanana, balik kontrol ka thread utama, lajeng neruskeun palaksanaan ti tempat aranjeunna antepkeun. Salaku conto, jeda sapertos kitu diperyogikeun nalika ngolah I / O, dimana padamelan sanésna tiasa dilakukeun bari ngantosan potongan data salajengna sumping. Fungsi sareng blok ditetepkeun ku "async fn" sareng "async move" ngabalikeun sipat hareup, nu ngahartikeun representasi komputasi Asynchronous nunggak. Anjeun tiasa langsung initiate itungan nunggak sarta ménta hasil ngagunakeun operator ".await". Taya aksi dipigawé atawa pre-rencanana dugi .await disebut, sahingga constructs nested kompléks bisa dijieun tanpa overhead tambahan.

    async fn first_function() -> u32 { .. }
    ...
    hayu hareup = first_function();
    ...
    hayu hasilna: u32 = future.await;

  • Distabilkeun "#! [fitur(bind_by_move_pattern_guards)]", ngamungkinkeun pamakéan variabel jeung tipe mengikat "ku-gerak" dina témplat sareng nganggo référénsi kana variabel ieu dina bagian "upami" éksprési "pertandingan". Salaku conto, konstruksi di handap ieu ayeuna diidinan:

    fn utama() {
    hayu Asép Sunandar Sunarya: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    susunan cocok {
    nomer
    lamun nums.iter().sum::() == 10

    => {
    serelek (angka);
    }
    _ => teu bisa dihontal!(),
    }
    }

  • Indikasi diwenangkeun atribut nalika nangtukeun parameter fungsi, panutupanana, sareng panunjuk fungsi. Atribut kompilasi kondisional (cfg, cfg_attr) nu ngadalikeun diagnostics via lint (ngawenangkeun, ngingetkeun, mungkir jeung nyaram) jeung atribut panggero makro bantu dirojong.

    fn len (
    #[cfg (jandela)] keureutan: & [u16], // ngagunakeun parameter dina Windows
    # [cfg (henteu (jandela))] nyiksikan: & [u8], // dipaké dina OS séjén
    ) -> ngagunakeun {
    slice.len()
    }

  • Perhatosan ngeunaan masalah anu diidentifikasi nalika mariksa injeuman variabel (borrow checker) ngagunakeun téknik NLL (Non-Lexical Lifetimes), ditarjamahkeun kana kategori kasalahan fatal. Hayu urang ngelingan yén sistem verifikasi dumasar kana mékanisme anyar pikeun tumut kana akun umur variabel injeuman ngamungkinkeun pikeun ngaidentipikasi sababaraha masalah nu indit unnoticed ku kode verifikasi heubeul. Kusabab kaluaran kasalahan pikeun pamariksaan sapertos kitu tiasa mangaruhan kasaluyuan sareng kode anu dianggo sateuacana, peringatan mimitina dikaluarkeun tibatan kasalahan. Peringatan ayeuna parantos diganti ku kasalahan nalika ngajalankeun dina modeu Rust 2018. Dina sékrési salajengna, kaluaran kasalahan ogé bakal dilaksanakeun dina modeu Rust 2015, anu tungtungna bakal ngaleungitkeun pamariksaan injeuman lami;
  • Atribut "const", nu nangtukeun kamungkinan ngagunakeun dina sagala konteks tinimbang konstanta, dipaké pikeun fungsi Vec :: anyar, String :: anyar, LinkedList :: anyar, str:: len, [T]:: len. , str::as_bytes,
    abs, wrapping_abs jeung overflowing_abs;

  • Bagian anyar API parantos dialihkeun kana kategori stabil, kalebet metode anu parantos distabilkeun
    Pin :: ka jero, Instan :: dipariksa_durasi_saprak jeung Instan :: jenuh_durasi_saprak;

  • Pangatur pakét kargo ayeuna gaduh kamampuan ngagunakeun ekstensi ".toml" kanggo file konfigurasi. Ditambahkeun dukungan awal pikeun ngawangun perpustakaan standar langsung ti Cargo. Nambahkeun bandéra "--workspace", ngagentos bandéra "--all" anu kontroversial. Hiji widang anyar geus ditambahkeun kana metadata "nyebarkeun", anu ngamungkinkeun anjeun nyebarkeun kagumantungan ku netepkeun tag git sareng nomer versi. Ditambahkeun pilihan tés "-Ztimings" pikeun ngahasilkeun laporan HTML ngeunaan waktos palaksanaan sababaraha tahapan kompilasi.
  • Dina kompiler rustc, pesen diagnostik kalebet motong buntut kode anu henteu pas kana terminal. Disadiakeun tingkat katilu pangrojong pikeun platform target
    i686-teu dipikanyaho-uefi sareng sparc64-teu dipikanyaho-openbsd. Tingkat katilu ngalibatkeun dukungan dasar, tapi tanpa tés otomatis sareng publikasi wangunan resmi.

sumber: opennet.ru

Tambahkeun komentar