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

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

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

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

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

  • ในการแจงนับด้วยการแสดงจำนวนเต็ม (แอตทริบิวต์ "#[repr(Int)]") อนุญาตให้มีการระบุอย่างชัดเจนของการเลือกปฏิบัติ (หมายเลขตัวแปรในการแจงนับ) แม้ว่าการแจงนับจะมีฟิลด์ก็ตาม #[repr(u8)] enum Foo { A(u8), # จำแนก 0 B(i8), # จำแนก 1 C(บูล) = 42, # จำแนก 42 }
  • เพิ่มฟังก์ชัน core::hint::black_box ซึ่งจะส่งคืนค่าที่ได้รับ เนื่องจากคอมไพลเลอร์คิดว่าฟังก์ชันนี้กำลังทำอะไรบางอย่างอยู่ จึงสามารถใช้ฟังก์ชัน black_box เพื่อปิดใช้งานการปรับให้เหมาะสมของคอมไพลเลอร์สำหรับลูปเมื่อทำการทดสอบประสิทธิภาพของโค้ดหรือเมื่อตรวจสอบโค้ดเครื่องที่สร้างขึ้น (เพื่อให้คอมไพลเลอร์ไม่พิจารณาโค้ดที่ไม่ได้ใช้และลบออก) ตัวอย่างเช่น ในตัวอย่างด้านล่าง black_box(v.as_ptr()) ป้องกันไม่ให้คอมไพเลอร์คิดว่าเวกเตอร์ v ไม่ถูกใช้งาน ใช้ std::hint::black_box; fn push_cap (v: &mut Vec) { สำหรับฉันใน 0..4 { v.push (ฉัน); black_box (v.as_ptr ()); } }
  • ตัวจัดการแพ็คเกจ "cargo" มีคำสั่ง "remove" ซึ่งอนุญาตให้คุณลบการอ้างอิงจากไฟล์ Manifest ของ Cargo.toml จากบรรทัดคำสั่ง
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • proc_macro::Span::source_text
    • คุณ*::{checked_add_signed, overflow_add_signed, saturating_add_signed, wrapping_add_signed}
    • ฉัน*::{checked_add_unsigned, overflow_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • ฉัน*::{checked_sub_unsigned, overflow_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{ครั้งแรก สุดท้าย pop_first pop_last}
    • BTreeMap::{first_key_value, Last_key_value, first_entry, Last_entry, pop_first, pop_last}
    • เพิ่มการใช้งาน AsFd สำหรับประเภทล็อค stdio เมื่อใช้ WASI
    • นัย TryFrom > สำหรับกล่อง <[T; น]>
    • แกน::คำใบ้::black_box
    • ระยะเวลา::try_from_secs_{f32,f64}
    • ตัวเลือก::คลายซิป
    • มาตรฐาน::os::fd
  • อนุญาตให้ใช้ช่วง "..X" และ "..=X" ในเทมเพลต
  • เมื่อสร้างส่วนหน้าของคอมไพเลอร์ rustc และแบ็กเอนด์ LLVM จะใช้โหมดการปรับให้เหมาะสม LTO (Link Time Optimization) และ BOLT (Binary Optimization and Layout Tool) เพื่อเพิ่มประสิทธิภาพของโค้ดผลลัพธ์ และลดการใช้หน่วยความจำ
  • ใช้การสนับสนุนระดับ 5 สำหรับแพลตฟอร์ม armv5te-none-eabi และ thumbvXNUMXte-none-eabi ระดับที่สามแสดงถึงการสนับสนุนขั้นพื้นฐาน แต่ไม่มีการทดสอบอัตโนมัติ การเผยแพร่การสร้างอย่างเป็นทางการและการตรวจสอบความสามารถในการสร้างรหัส
  • เพิ่มการรองรับการเชื่อมโยงไปยัง macOS Generic Libraries

นอกจากนี้ เราสามารถสังเกตการรวมไว้ในโค้ดเบส GCC ของคอมไพเลอร์ส่วนหน้าของภาษา Rust (gccrs) ส่วนหน้ารวมอยู่ในสาขา GCC 13 ซึ่งจะเปิดตัวในเดือนพฤษภาคม 2023 เริ่มต้นด้วย GCC 13 ชุดเครื่องมือ GCC มาตรฐานจะสามารถใช้ในการคอมไพล์โปรแกรม Rust โดยไม่จำเป็นต้องติดตั้งคอมไพเลอร์ rustc ที่สร้างขึ้นโดยใช้การพัฒนา LLVM การใช้งาน Rust ใน GCC 13 จะอยู่ในสถานะเบต้า ไม่ได้เปิดใช้งานตามค่าเริ่มต้น

ที่มา: opennet.ru

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