เบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเบกเบตเบเบธเบเบเบฐเบชเบปเบเบเบปเปเบงเปเบ Rust 1.73, เบชเปเบฒเบเบเบฑเปเบเบเบถเปเบเปเบเบเปเบเบเบเบฒเบ Mozilla เปเบเปเปเบเบเบฑเบเบเบธเบเบฑเบเปเบเปเบฎเบฑเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเปเบเปเบเบฒเบเบญเบธเบเบฐเบเปเบฒเบเบญเบเบญเบปเบเบเบฒเบเปเบญเบเบฐเบฅเบฒเบเบเบตเปเบเปเปเบซเบงเบฑเบเบเบปเบเบเปเบฒเปเบฅ Rust Foundation, เปเบเปเบเบทเบเบเปเบญเบเบญเบญเบเบกเบฒ. เบเบฒเบชเบฒเบเบตเปเปเบเบฑเปเบเปเบชเปเบเบงเบฒเบกเบเบญเบเปเบเบเบญเบเบเบงเบฒเบกเบเบปเบเบเปเบฒเปเบฅเบฐเบชเบฐเบซเบเบญเบเบงเบดเบเบตเบเบฒเบเปเบเบทเปเบญเบเบฑเบเบฅเบธเบเบงเบฒเบกเบเบฐเบซเบเบฒเบเบเบญเบเบงเบฝเบเบชเบนเบเปเบเบเบฐเบเบฐเบเบตเปเบซเบผเบตเบเปเบงเบฑเปเบเบเบฒเบเบเปเบฒเปเบเปเปเบเบทเปเบญเบเปเบเบฑเบเบเบตเปเปเบซเบเบทเปเบญเปเบฅเบฐเปเบงเบฅเบฒเปเบฅเปเบ (runtime เบซเบผเบธเบเบฅเบปเบเปเบเบฑเบเบเบทเปเบเบเบฒเบเปเบเบทเปเบญเบเบเบปเปเบเปเบฅเบฐเบเบฒเบเบฎเบฑเบเบชเบฒเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบกเบฒเบเบเบฐเบเบฒเบ).
เบงเบดเบเบตเบเบฒเบเบเบฑเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบญเบ Rust เบเปเบงเบเบเบฐเบขเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเปเบงเบฅเบฒเบเบตเป manipulating pointers เปเบฅเบฐเบเปเบญเบเบเบฑเบเบเบฑเบเบซเบฒเบเบตเปเปเบเบตเบเบเบทเปเบเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบเบฑเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบฅเบฐเบเบฑเบเบเปเปเบฒ, เปเบเบฑเปเบ: เบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบทเปเบเบเบตเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบซเบผเบฑเบเบเบฒเบเบเบตเปเบกเบฑเบเปเบเปเบเบทเบเบเบปเบเบเปเบญเบ, dereferencing null pointers, buffer overruns, เปเบฅเบฐเบญเบทเปเบเป. เปเบเบทเปเบญเปเบเบเบขเบฒเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบ, เบชเบฐเบซเบเบญเบเบเบฒเบเบเปเปเบชเปเบฒเบเปเบฅเบฐเบเบฒเบเบเบธเปเบกเบเบญเบเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบช, เปเบเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบนเปเบเบฑเบเบเบฒเบเบเบธเบเบชเบดเบเบเปเบฒ. เบเบฑเบเปเบเบฑเบ crates.io เปเบเปเบฎเบฑเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบฑเบเปเบเบปเปเบฒเบเบฒเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบ.
เบเบงเบฒเบกเบเบญเบเปเบเบเบญเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบกเปเบเบชเบฐเบซเบเบญเบเปเบซเปเบขเบนเปเปเบ Rust เปเบเปเบงเบฅเบฒเบฅเบงเบเบฅเบงเบกเปเบเบเบเปเบฒเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเบญเปเบฒเบเบญเบดเบ, เบเบฒเบเบเบดเบเบเบฒเบกเบเบงเบฒเบกเปเบเบฑเบเปเบเบปเปเบฒเบเบญเบเบงเบฑเบเบเบธ, เบเบฒเบเบเบดเบเบเบฒเบกเบญเบฒเบเบธเบเบญเบเบงเบฑเบเบเบธ (เบเบญเบเปเบเบ), เปเบฅเบฐเบเบฒเบเบเบฐเปเบกเบตเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบฅเบฐเบซเบฑเบ. Rust เบเบฑเบเบชเบฐเบซเบเบญเบเบเบฒเบเบเปเบญเบเบเบฑเบเบเบฒเบ overflows integer, เบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฑเบเบเบฑเบเบเบญเบเบเปเบฒเบเบปเบงเปเบเบเปเบญเบเบเบฒเบเบเปเบฒเปเบเป, เบเบฑเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเบเบตเบเบงเปเบฒเปเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบกเบฒเบเบเบฐเบเบฒเบ, เบเปเบฒเปเบเปเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบเบเบฒเบเบญเปเบฒเบเบญเบดเบ immutable เปเบฅเบฐเบเบปเบงเปเบเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เบชเบฐเบซเบเบญเบเบเบฒเบเบเบดเบกเบเบปเบเบเบตเปเบเบตเปเปเบเบฑเปเบกเปเบเบเปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบขเปเบฒเบเบกเบตเปเบซเบเบเบปเบ.
เบเบฐเบงเบฑเบเบเบฐเบเปเบฒเบเบปเปเบเบเป:
- ะะตัะตัะฐะฑะพัะฐะฝะพ ะพัะพัะผะปะตะฝะธะต ัะพะพะฑัะตะฝะธะน, ะฒัะดะฐะฒะฐะตะผัั
ะฟัะธะผะตะฝัะตะผัะผ ะฟะพ ัะผะพะปัะฐะฝะธั ะพะฑัะฐะฑะพััะธะบะพะผ ะฐะฒะฐัะธะนะฝะพะณะพ ะทะฐะฒะตััะตะฝะธั ะฟัะพะณัะฐะผะผั (panic). ะขะตะบัั, ัะบะฐะทะฐะฝะฝัะน ะฒ ะผะฐะบัะพัะต ยซpanic!ยป ัะตะฟะตัั ะฟะพะบะฐะทัะฒะฐะตััั ะฒ ะพัะดะตะปัะฝะพะน ัััะพะบะต ะฑะตะท ะพะฑัะฐะผะปะตะฝะธั ะบะฐะฒััะบะฐะผะธ, ััะพ ัะฟัะพัะฐะตั ัะธัะฐะตะผะพััั ัะพะพะฑัะตะฝะธั ะธ ััััะฐะฝัะตั ะฟััะฐะฝะธัั ะฟัะธ ะฝะฐะปะธัะธะธ ะฒ ะฒะปะพะถะตะฝะฝัั
ะบะฐะฒััะตะบ ะธะปะธ ัะฐะทะดะตะปะตะฝะธั ะฝะฐ ะฝะตัะบะพะปัะบะพ ัััะพะบ. fn main() { let file = ยซferris.txtยป; panic!(ยซoh no! {file:?} not found!ยป); } ะัะปะพ thread โmainโ panicked at โoh no! ยซferris.txtยป not found!โ, src/main.rs:3:5 ะกัะฐะปะพ thread โmainโ panicked at src/main.rs:3:5: oh no! ยซferris.txtยป not found!
ะขะฐะบะถะต ะฟะตัะตัะฐะฑะพัะฐะฝ ะฒัะฒะพะด ัะพะพะฑัะตะฝะธะน, ะฟะพะบะฐะทัะฒะฐะตะผัั ะฟัะธ ััะฐะฑะฐััะฒะฐะฝะธะธ ะผะฐะบัะพัะพะฒ ยซassert_eqยป ะธ ยซassert_neยป. fn main() { assert_eq!(ยซ๐ฆยป, ยซ๐ยป, ยซferris is not a fishยป); } ะัะปะพ thread โmainโ panicked at โassertion failed: `(left == right)` left: `ยป๐ฆยป`, right: `ยป๐ยป`: ferris is not a fishโ, src/main.rs:2:5 Cัะฐะปะพ thread โmainโ panicked at src/main.rs:2:5: assertion `left == right` failed: ferris is not a fish left: ยซ๐ฆยป right: ยซ๐ยป
- ะ ัะพะพัะฒะตัััะฒะธะธ ั RFC 3184 ะดะพะฑะฐะฒะปะตะฝะฐ ะฒะพะทะผะพะถะฝะพััั ะฟััะผะพะน ะผะฐะฝะธะฟัะปััะธะธ ะปะพะบะฐะปัะฝัะผะธ ะดะปั ะฟะพัะพะบะฐ (thread_local) ะบะปััะฐะผะธ ั ัะฐะฝะธะปะธัะฐ LocalKey<Cell<T>> ะธ LocalKey<RefCell<T>> ัะตัะตะท ะธัะฟะพะปัะทะพะฒะฐะฝะธะต ะผะตัะพะดะพะฒ get(), set(), take() ะธ replace(), ะฒะผะตััะพ ะธัะฟะพะปัะทะพะฒะฐะฝะธั ะทะฐะผัะบะฐะฝะธั ยซwith(|inner| โฆ)ยป, ััะพ ะฟะพะทะฒะพะปัะตั ะฝะต ะฒัะฟะพะปะฝััั ะดะพะฟะพะปะฝะธัะตะปัะฝัะน ะบะพะด ะธะฝะธัะธะฐะปะธะทะฐัะธะธ ะดะปั ะทะฝะฐัะตะฝะธะน ะฟะพ ัะผะพะปัะฐะฝะธั, ัะบะฐะทะฐะฝะฝัั ะดะปั ะฝะพะฒัั ะฟะพัะพะบะพะฒ ะฟัะธ ะฟะพะผะพัะธ ะผะฐะบัะพัะฐ ยซthread_local!ยป. thread_local! { static THINGS: Cell<Vec<i32>> = Cell::new(Vec::new()); } fn f() { // ะฑัะปะพ THINGS.with(|i| i.set(vec![1, 2, 3])); // ััะฐะปะพ THINGS.set(vec![1, 2, 3]); // โฆ // ะฑัะปะพ let v = THINGS.with(|i| i.take()); // ััะฐะปะพ let v: Vec<i32> = THINGS.take(); }
- เบเบฒเบเบชเปเบงเบเปเบซเบกเปเบเบญเบ API เปเบเปเบเบทเบเบเปเบฒเบเปเบเบขเบนเปเปเบเบเบฐเปเบเบเบเบญเบเบเบงเบฒเบกเบซเบกเบฑเปเบเบเบปเบ, เบฅเบงเบกเบเบฑเบเบงเบดเบเบตเบเบฒเบเปเบฅเบฐเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเบฅเบฑเบเบชเบฐเบเบฐเบเปเบฒเบเปเปเบกเปเบเบกเบตเบเบงเบฒเบกเบซเบกเบฑเปเบเบเบปเบ:
- Unsigned {integer}::div_ceil
- Unsigned {integer}::next_multiple_of
- Unsigned {integer}::checked_next_multiple_of
- std::ffi::FromBytesUntilNulError
- std::os::unix::fs::chown
- std::os::unix::fs::fchown
- std::os::unix::fs::lfchown
- LocalKey::<Cell<T>>::get
- LocalKey::<Cell<T>>::set
- LocalKey::<Cell<T>>::take
- LocalKey::<Cell<T>>::replace
- LocalKey::<RefCell<T>>::with_borrow
- LocalKey::<RefCell<T>>::with_borrow_mut
- LocalKey::<RefCell<T>>::set
- LocalKey::<RefCell<T>>::take
- LocalKey::<RefCell<T>>::replace
- เบเบธเบเบฅเบฑเบเบชเบฐเบเบฐ "const", เปเบเบดเปเบเบเปเบฒเบเบปเบเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบกเบฑเบเปเบเบชเบฐเบเบฒเบเบเบฒเบเปเบเบเปเปเบเบฒเบกเปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบเปเบฒเบเบปเบเบเบตเป, เบเบทเบเบเปเบฒเปเบเปเปเบเบซเบเปเบฒเบเบตเป:
- rc::Weak::new
- sync::Weak::new
- NonNull::as_ref
- ะ ะบะพะผะฟะธะปััะพัะต ะพะฑะตัะฟะตัะตะฝะฐ ะทะฐะฟะธัั ะธะฝัะพัะผะฐัะธะธ ะพ ะฒะตััะธะธ ะฒ ัะตะบัะธั ยซ.commentยป ะฟะพ ะฐะฝะฐะปะพะณะธะธ ั GCC ะธ Clang.
- ะ ะตะฐะปะธะทะพะฒะฐะฝ ััะตัะธะน ััะพะฒะตะฝั ะฟะพะดะดะตัะถะบะธ ะดะปั ะฟะปะฐััะพัะผ aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl ะธ x86_64-unknown-linux-ohos. ะขัะตัะธะน ััะพะฒะตะฝั ะฟะพะดัะฐะทัะผะตะฒะฐะตั ะฑะฐะทะพะฒัั ะฟะพะดะดะตัะถะบั, ะฝะพ ะฑะตะท ะฐะฒัะพะผะฐัะธะทะธัะพะฒะฐะฝะฝะพะณะพ ัะตััะธัะพะฒะฐะฝะธั, ะฟัะฑะปะธะบะฐัะธะธ ะพัะธัะธะฐะปัะฝัั ัะฑะพัะพะบ ะธ ะฟัะพะฒะตัะบะธ ะฒะพะทะผะพะถะฝะพััะธ ัะฑะพัะบะธ ะบะพะดะฐ.
- ะ ะตะฐะปะธะทะพะฒะฐะฝ ะฒัะพัะพะน ััะพะฒะตะฝั ะฟะพะดะดะตัะถะบะธ ัะตะปะตะฒะพะน ะฟะปะฐััะพัะผั wasm32-wasi-preview1-threads. ะัะพัะพะน ััะพะฒะตะฝั ะฟะพะดะดะตัะถะบะธ ะฟะพะดัะฐะทัะผะตะฒะฐะตั ะณะฐัะฐะฝัะธั ัะฑะพัะบะธ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: opennet.ru