Hoʻokuʻu ʻia ka ʻōlelo papahana Rust 1.59 me ke kākoʻo no nā hoʻokomo hui

Ua paʻi ʻia ka hoʻokuʻu ʻia ʻana o ka ʻōlelo hoʻolālā kumu nui ʻo Rust 1.59, i hoʻokumu ʻia e ka papahana Mozilla, akā i kēia manawa ua hoʻomohala ʻia ma lalo o ka mana o ka hui kūʻokoʻa waiwai ʻole ʻo Rust Foundation. Hoʻopili ʻia ka ʻōlelo i ka palekana hoʻomanaʻo a hāʻawi i nā ala e hoʻokō ai i ka parallelism kiʻekiʻe i ka hoʻokō ʻana i ka hana, ʻoiai e pale ana i ka hoʻohana ʻana i ka ʻōpala a me ka manawa holo (ua hoʻemi ʻia ka manawa holo i ka hoʻomaka kumu a me ka mālama ʻana i ka waihona maʻamau).

Hoʻokuʻu ʻia nā ʻenehana hoʻomanaʻo hoʻomanaʻo a Rust i ka mea hoʻomohala mai nā hewa manipulation pointer a pale i nā pilikia e kū mai ana mai ka hoʻohana ʻana i ka hoʻomanaʻo haʻahaʻa haʻahaʻa, e like me ke komo ʻana ma hope o ka loaʻa ʻole ʻana, nā kuhi kuhikuhi null, overruns buffer, a me nā mea like. No ka hāʻawi ʻana i nā hale waihona puke, e hōʻoia i ka hui ʻana a me ka mālama ʻana i nā hilinaʻi, ke kūkulu nei ka papahana i ka luna pūʻolo Cargo. Kākoʻo ʻia ka waihona crates.io no ka mālama ʻana i nā hale waihona puke.

Hoʻoikaika ʻia ka palekana hoʻomanaʻo ma Rust i ka manawa hōʻuluʻulu ma o ka nānā ʻana, ka nānā ʻana i ka mea nona ka mea, ka noʻonoʻo ʻana i ke ola o ka mea (scoping), a me ka loiloi hoʻomanaʻo i ka wā holo. Hāʻawi pū ʻo Rust i ka pale ʻana i ka integer overflows, pono e hoʻomaka mua ʻia nā waiwai hoʻololi ma mua o ka hoʻohana ʻana, ʻoi aku ka maikaʻi o ka lawelawe hewa ʻana i ka waihona maʻamau, hoʻohana i ka manaʻo o nā kuhikuhi immutable a me nā loli ma ke ʻano maʻamau, a hāʻawi i ka paʻi static ikaika e hōʻemi i nā hewa loiloi.

Nā hana hou nui:

  • Hiki ke hoʻohana i nā mea hoʻokomo ʻōlelo hui, i koi ʻia i nā noi e pono ai ke kāohi i ka hoʻokō ma kahi haʻahaʻa a i ʻole hiki ke hoʻohana i nā ʻōlelo kuhikuhi mīkini kūikawā. Hoʻohui ʻia nā mea hoʻohui hui me ka hoʻohana ʻana i nā macros "asm!" a me "global_asm!" me ka hoʻohana ʻana i ka syntax formatting string no ka hoʻopaʻa inoa ʻana e like me ka mea i hoʻohana ʻia no ka hoʻololi ʻana i ke kaula i Rust. Kākoʻo ka mea hōʻuluʻulu i nā ʻōlelo aʻoaʻo no ka x86, x86-64, ARM, AArch64 a me RISC-V architectures. Laʻana hoʻokomo: hoʻohana std::arch::asm; // E hoʻonui i ka x me ka 6 me ka hoʻololi a hoʻohui i ka let mut x: u64 = 4; palekana { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "hoʻohui {x}, {tmp}", x = inout(reg ) x, tmp = waho(reg) _, ); } assert_eq!(x, 4 * 6);
  • Kākoʻo hoʻohui ʻia no nā hana i hoʻopau ʻia (parallel), kahi i kuhikuhi ʻia ai kekahi mau ʻano, nā ʻāpana a i ʻole nā ​​hale ma ka ʻaoʻao hema o ka ʻōlelo. Eia kekahi laʻana: let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Hana { e, .. } = Hana { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Hiki ke kuhikuhi i nā waiwai paʻamau no const generics: struct ArrayStorage { arr: [T; N], } impl ArrayStorage { fn hou(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } } }
  • Hāʻawi ka luna pūʻolo Cargo i nā ʻōlelo aʻo e pili ana i ka hoʻohana ʻana i nā hale kūpono ʻole i nā hilinaʻi i hana ʻia ma muli o nā hewa i ka mea hoʻopili (no ka laʻana, ma muli o kahi hewa, ua ʻae ʻia nā māla o nā hale i hoʻopaʻa ʻia e hōʻaiʻē i nā poloka palekana). ʻAʻole kākoʻo hou ʻia ia mau hana i kahi mana o Rust e hiki mai ana.
  • Loaʻa i ka Cargo a me ka rustc kahi mana i kūkulu ʻia e hana i nā faila hiki ke hoʻopau ʻia i ka ʻikepili debugging (strip = "debuginfo") a me nā hōʻailona (strip = "hōʻailona"), me ka ʻole o ka pono e kāhea i kahi pono ʻokoʻa. Hoʻokō ʻia ka hoʻonohonoho hoʻomaʻemaʻe ma o ka ʻāpana "strip" ma Cargo.toml: [profile.release] strip = "debuginfo", "hōʻailona"
  • Hoʻopau ʻia ka hōʻuluʻulu hoʻonui ʻia e ka paʻamau. ʻO ke kumu i ʻōlelo ʻia he workaround pōkole no kahi bug i ka compiler e alakaʻi ana i nā ulia a me nā hewa deserialization. Ua hoʻomākaukau mua ʻia kahi hoʻoponopono bug a e hoʻokomo ʻia i loko o ka hoʻokuʻu aʻe. No ka hoʻihoʻi ʻana i ka hōʻuluʻulu hoʻohui, hiki iā ʻoe ke hoʻohana i ka ʻano hoʻololi kaiapuni RUSTC_FORCE_INCREMENTAL=1.
  • Ua hoʻoili ʻia kahi ʻāpana hou o ka API i ka ʻāpana paʻa, me nā ʻano a me nā hoʻokō o nā ʻano:
    • std::thread::available_parallelism
    • Ka hopena::kope
    • Ka hopena:: cloned
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • E hoao mai no u8
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Hapa)
    • iter::zip
    • NonZeroU8::ʻo ia ka_mana_o_ʻelua
    • NonZeroU16::ʻo ia ka_mana_o_ʻelua
    • NonZeroU32::ʻo ia ka_mana_o_ʻelua
    • NonZeroU64::ʻo ia ka_mana_o_ʻelua
    • NonZeroU128::ʻo ia ka_mana_o_ʻelua
    • DoubleEndedIterator no ka hoʻolālā ToLowercase
    • DoubleEndedIterator no ka hoʻolālā ToUppercase
    • E hoao mai no [T; N]
    • UnwindSafe no ka hana Once
    • RefUnwindSafe no hoʻokahi manawa
    • armv8 neon kākoʻo hana i kūkulu ʻia i loko o ka compiler no aarch64
  • Hoʻohana ʻia ka ʻano "const", ka mea e hoʻoholo ai i ka hiki ke hoʻohana ʻia i kēlā me kēia pōʻaiapili ma kahi o nā mea mau, hoʻohana ʻia i nā hana:
    • mem::Uninit paha::as_ptr
    • mem::Uninit paha::assume_init
    • mem::Uninit paha:: assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka