การเปิดตัวภาษาการเขียนโปรแกรม Rust 1.73

การเปิดตัวของภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไปของ Rust 1.73 ซึ่งก่อตั้งโดยโครงการ Mozilla แต่ปัจจุบันได้รับการพัฒนาภายใต้การอุปถัมภ์ขององค์กรอิสระ Rust Foundation ที่ไม่แสวงหาผลกำไร ได้รับการเผยแพร่แล้ว ภาษานี้เน้นไปที่ความปลอดภัยของหน่วยความจำและให้แนวทางเพื่อให้ได้งานที่มีความเท่าเทียมกันสูง ในขณะที่หลีกเลี่ยงการใช้ตัวรวบรวมขยะและรันไทม์ (รันไทม์จะลดลงเหลือเพียงการเริ่มต้นพื้นฐานและการบำรุงรักษาไลบรารีมาตรฐาน)

วิธีการจัดการหน่วยความจำของ Rust ช่วยนักพัฒนาจากข้อผิดพลาดเมื่อจัดการพอยน์เตอร์และป้องกันปัญหาที่เกิดขึ้นเนื่องจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงพื้นที่หน่วยความจำหลังจากปล่อยให้ว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ null บัฟเฟอร์เกิน เป็นต้น เพื่อแจกจ่ายไลบรารี่ จัดเตรียมการสร้างและจัดการการอ้างอิง โครงการพัฒนาตัวจัดการแพ็คเกจสินค้า ที่เก็บ crates.io รองรับการโฮสต์ไลบรารี

ความปลอดภัยของหน่วยความจำมีให้ใน Rust ณ เวลาคอมไพล์ผ่านการตรวจสอบการอ้างอิง การติดตามความเป็นเจ้าของออบเจกต์ การติดตามอายุอ็อบเจ็กต์ (ขอบเขต) และการประเมินความถูกต้องของการเข้าถึงหน่วยความจำระหว่างการดำเนินการโค้ด สนิมยังให้การป้องกันการล้นของจำนวนเต็ม, จำเป็นต้องมีการกำหนดค่าเริ่มต้นที่จำเป็นของค่าตัวแปรก่อนใช้งาน, จัดการข้อผิดพลาดได้ดีขึ้นในไลบรารีมาตรฐาน, ใช้แนวคิดของการอ้างอิงและตัวแปรที่ไม่เปลี่ยนรูปแบบตามค่าเริ่มต้น, เสนอการพิมพ์แบบคงที่ที่แข็งแกร่งเพื่อลดข้อผิดพลาดเชิงตรรกะ

นวัตกรรมหลัก:

  • รูปแบบของข้อความที่ออกโดยตัวจัดการข้อขัดข้องของโปรแกรมเริ่มต้น (ตื่นตระหนก) ได้รับการออกแบบใหม่ ข้อความที่ระบุในแมโคร "ตื่นตระหนก!" ตอนนี้แสดงเป็นบรรทัดแยกกันโดยไม่มีเครื่องหมายคำพูด ทำให้อ่านข้อความได้ง่ายขึ้น และขจัดความสับสนเมื่อมีเครื่องหมายคำพูดซ้อนกันหรือแยกเป็นหลายบรรทัด fn main() { ให้ไฟล์ = "ferris.txt"; ตกใจ!("โอ้ ไม่! ไม่พบ {file:?}!"); } มีกระทู้ 'main' ตื่นตระหนกที่ 'โอ้ไม่! ไม่พบ "ferris.txt"!', src/main.rs:3:5 เธรด 'main' ตื่นตระหนกที่ src/main.rs:3:5: ไม่นะ! ไม่พบ "ferris.txt"!

    ผลลัพธ์ของข้อความที่แสดงเมื่อมีการทริกเกอร์มาโคร “assert_eq” และ “assert_ne” ก็ได้รับการแก้ไขเช่นกัน fn main() { assert_eq!("🦀", "🐟", "ชิงช้าสวรรค์ไม่ใช่ปลา"); } มีเธรด 'main' ตื่นตระหนกที่ 'การยืนยันล้มเหลว: `(ซ้าย == ขวา)` ซ้าย: `"🦀"` ขวา: `"🐟"`: ชิงช้าสวรรค์ไม่ใช่ปลา' src/main.rs: 2 :5 กระทู้ 'main' ตื่นตระหนกที่ src/main.rs:2:5: assertion `left == right` ล้มเหลว: ชิงช้าสวรรค์ไม่ใช่ปลาที่เหลือ: “🦀” ขวา: “🐟”

  • ตาม RFC 3184 ได้มีการเพิ่มความสามารถในการจัดการคีย์การจัดเก็บ LocalKey ของเธรดภายในเครื่อง (thread_local) โดยตรง > และ LocalKey > ผ่านการใช้เมธอด get(), set(), take() และแทนที่() แทนที่จะใช้การปิด "ด้วย(|inner| ...)" ซึ่งช่วยลดความจำเป็นในการดำเนินการโค้ดเริ่มต้นเพิ่มเติมสำหรับ ค่าเริ่มต้นที่กำหนดไว้สำหรับเธรดใหม่เมื่อใช้มาโคร “thread_local!” thread_local! { สิ่งที่คงที่: เซลล์ > = เซลล์::ใหม่(Vec::ใหม่()); } fn f() { // เป็น THINGS.with(|i| i.set(vec![32, 1, 2])); // กลายเป็น THINGS.set(vec![3, 1, 2]); // ... // ถูกปล่อยให้ v = THINGS.with(|i| i.take()); // กลายเป็นให้ v: Vec = สิ่ง.เอา(); }
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • {จำนวนเต็ม}::div_ceil ที่ไม่ได้ลงนาม
    • {จำนวนเต็ม}::next_multiple_of ที่ไม่ได้ลงนาม
    • ไม่ได้ลงนาม {จำนวนเต็ม}::checked_next_multiple_of
    • มาตรฐาน::ffi::FromBytesUntilNulError
    • มาตรฐาน::os::unix::fs::chown
    • มาตรฐาน::os::unix::fs::fchown
    • มาตรฐาน::os::unix::fs::lfchown
    • คีย์ท้องถิ่น:: >::รับ
    • คีย์ท้องถิ่น:: >::ตั้งค่า
    • คีย์ท้องถิ่น:: >::เอา.
    • คีย์ท้องถิ่น:: >::แทนที่
    • คีย์ท้องถิ่น:: >::with_borrow
    • คีย์ท้องถิ่น:: >::with_borrow_mut
    • คีย์ท้องถิ่น:: >::ตั้งค่า
    • LocalKey::<RefCell<T>>::take
    • คีย์ท้องถิ่น:: >::แทนที่
  • คุณลักษณะ “const” ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนที่จะเป็นค่าคงที่ ถูกใช้ในฟังก์ชัน:
    • rc::อ่อนแอ::ใหม่
    • ซิงค์::อ่อนแอ::ใหม่
    • ไม่ใช่ค่า Null::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 -โอ้ ระดับที่สามเกี่ยวข้องกับการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติ การเผยแพร่บิลด์อย่างเป็นทางการ หรือการตรวจสอบว่าสามารถสร้างโค้ดได้หรือไม่
  • การสนับสนุนระดับที่สองสำหรับแพลตฟอร์มเป้าหมาย wasm32-wasi-preview1-threads ได้ถูกนำมาใช้แล้ว การสนับสนุนระดับที่สองเกี่ยวข้องกับการรับประกันการประกอบ

ที่มา: opennet.ru

เพิ่มความคิดเห็น