Rust 1.34 Programming Language Release

Basa pemrograman sistem Rust 1.34, dikembangkeun ku proyék Mozilla, parantos dileupaskeun. Basa museurkeun kana kaamanan memori, nyadiakeun manajemén memori otomatis, jeung nyadiakeun sarana pikeun ngahontal paralelisme tugas tinggi tanpa ngagunakeun collector sampah atanapi runtime.

Manajemén mémori otomatis Rust ngabébaskeun pamekar tina manipulasi pointer sareng ngajagi tina masalah anu timbul tina manipulasi mémori tingkat rendah, sapertos aksés mémori saatos gratis, dereferensi pointer nol, overruns panyangga, sareng anu sanésna. Pikeun ngadistribusikaeun perpustakaan, mastikeun assembly jeung ngatur kagumantungan, proyék ieu ngamekarkeun manajer pakét Cargo, nu ngidinan Anjeun pikeun meunangkeun perpustakaan diperlukeun pikeun program dina hiji klik. Repositori crates.io dirojong pikeun perpustakaan hosting.

Inovasi utama:

  • Nambahkeun alat ka manajer pakét kargo pikeun damel sareng pendaptaran pakét alternatif anu tiasa hirup babarengan sareng pendaptaran umum crates.io. Salaku conto, pamekar aplikasi swasta ayeuna tiasa nganggo pendaptaran pribadi sorangan anu tiasa dianggo nalika daptar katergantungan dina Cargo.toml sareng nganggo modél vérsi sapertos crates.io pikeun produkna, ogé ngarujuk kana crates.io sareng crates.io. dina dependensi. ka pendaptaran anjeun sorangan.

    Pikeun nambahkeun hiji pendaptaran éksternal ka ~/.cargo/config
    pilihan anyar "abdi-pendaptaran" disadiakeun dina "[registries]" bagian, sarta "lain-crate" pilihan geus ditambahkeun pikeun nyebut pendaptaran éksternal di dependensi di Cargo.toml dina "[dependencies]" bagian. Pikeun nyambung ka pendaptaran tambahan, cukup nempatkeun token auténtikasi dina file ~/.cargo/credentials tur ngajalankeun paréntah
    "login kargo --registry=my-registry", sareng nyebarkeun pakét -
    "cargo publish --registry=my-registry";

  • Ditambahkeun dukungan pinuh pikeun ngagunakeun operator "?". dina doctests, nu ngidinan Anjeun pikeun make conto kode tina dokuméntasi salaku tés. operator saméméhna
    "?" bisa dipaké pikeun nanganan kasalahan salila palaksanaan test ngan lamun aya "fn main ()" fungsi atawa dina "# [test]" fungsi;

  • Dina atribut custom diartikeun maké macros prosedural, kasebut nyaéta dimungkinkeun pikeun ngagunakeun susunan sawenang tina tokens ("#[attr ($ token)]", "#[attr[$token]] jeung #[attr{$token}]"). Saméméhna, elemen ngan bisa dieusian dina bentuk tangkal / recursive ngagunakeun string literals, contona "#[foo (bar, baz (quux, foo = "bar"))]", tapi ayeuna kasebut nyaéta dimungkinkeun pikeun ngagunakeun enumerations (' # [rentang (0. .10)]') sareng konstruksi sapertos "# [kabeungkeut (T: MyTrait)]";
  • Tret TryFrom sareng TryInto parantos distabilkeun, ngamungkinkeun konvérsi jinis kalayan penanganan kasalahan. Contona, métode kawas from_be_bytes kalawan tipe integer ngagunakeun arrays salaku input, tapi data mindeng datang dina tipe Slice, sarta ngarobah antara arrays jeung keureut masalah mun ngalakukeun sacara manual. Kalayan bantuan Tret anyar, operasi dieusian bisa dipigawé dina laleur ngaliwatan panggero pikeun .try_into (), Contona, "hayu num = u32 :: from_be_bytes (slice.try_into ()?)". Pikeun konvérsi anu salawasna suksés (contona, tina jinis u8 dugi ka u32), jinis kasalahan Infallible parantos ditambah pikeun ngamungkinkeun panggunaan transparan
    TryFrom pikeun sakabéh palaksanaan "Ti" aya;

  • Deprecated fungsi CommandExt :: before_exec, nu diwenangkeun palaksanaan Handler saméméh exec nu ieu dieksekusi dina konteks prosés anak forked sanggeus garpu () panggero. Dina kaayaan sapertos kitu, sababaraha sumber tina prosés indungna, sapertos deskriptor file sareng daérah mémori anu dipetakeun, tiasa diduplikasi, anu tiasa nyababkeun kabiasaan anu teu ditangtukeun sareng operasi perpustakaan anu salah.
    Gantina before_exec, disarankeun pikeun nganggo fungsi anu teu aman CommandExt :: pre_exec.

  • Jinis integer atom anu ditandatanganan sareng anu teu ditandatanganan anu distabilkeun ukuranna ti 8 dugi ka 64 bit (contona, AtomicU8), ogé jinis anu ditandatanganan NonZeroI[8|16|32|54|128].
  • Bagian anyar API geus dipindahkeun kana kategori stabil, kaasup métode Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[tambahkeun |sub] sareng SystemTime distabilkeun ::checked_[add|sub]. The iter :: from_fn na iter :: fungsi panerusna geus stabilized;
  • Pikeun sakabéh jenis integer, metode checked_pow, saturating_pow, wrapping_pow, sarta overflowing_pow;
  • Ditambahkeun kamampuhan pikeun ngaktipkeun optimizations dina tahap linking ku nangtukeun pilihan ngawangun "-C linker-plugin-lto" (rustc compiles kode Rust kana bitcode LLVM, nu ngidinan optimizations LTO bisa dilarapkeun).

sumber: opennet.ru

Tambahkeun komentar