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

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

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

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

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

  • คุณสามารถกำหนดโค้ดส่งคืนของคุณเองได้จากฟังก์ชันหลัก เดิมทีฟังก์ชันหลักของ Rust สามารถส่งคืนได้เฉพาะประเภท "()" (หน่วย) ซึ่งจะระบุสถานะการออกที่สำเร็จเสมอ เว้นแต่นักพัฒนาจะเรียกฟังก์ชัน "กระบวนการ::ทางออก (รหัส)" อย่างชัดเจน ใน Rust 1.26 การใช้คุณลักษณะการสิ้นสุดที่ไม่เสถียรในฟังก์ชันหลักสามารถส่งคืนค่า "Ok" และ "Err" ซึ่งสอดคล้องกับรหัส EXIT_SUCCESS และ EXIT_FAILURE ในโปรแกรม C ใน Rust 1.61 ลักษณะการสิ้นสุดได้รับการทำให้เสถียร และมีการเสนอประเภท ExitCode แยกต่างหากเพื่อแสดงโค้ดส่งคืนเฉพาะ ซึ่งจะสรุปประเภทการส่งคืนเฉพาะแพลตฟอร์มโดยจัดเตรียมทั้งค่าคงที่ที่กำหนดไว้ล่วงหน้า SUCCESS และ FAILURE และเมธอด From เพื่อส่งคืนรหัสส่งคืนแบบกำหนดเอง ใช้ std::กระบวนการ::ExitCode; fn main() -> ExitCode { ถ้า !check_foo() { กลับ ExitCode::from(8); } รหัสทางออก::ความสำเร็จ }
  • ความสามารถเพิ่มเติมของฟังก์ชันที่กำหนดโดยใช้นิพจน์ "const fn" ได้รับความเสถียร ซึ่งสามารถเรียกได้ไม่เพียงแค่เป็นฟังก์ชันปกติเท่านั้น แต่ยังใช้ในบริบทใดๆ แทนค่าคงที่ได้ด้วย ฟังก์ชันเหล่านี้คำนวณ ณ เวลาคอมไพล์ ไม่ใช่ที่รันไทม์ ดังนั้นจึงอยู่ภายใต้ข้อจำกัดบางประการ เช่น ความสามารถในการอ่านจากค่าคงที่เท่านั้น ในเวอร์ชันใหม่ การดำเนินการพื้นฐานพร้อมพอยน์เตอร์ฟังก์ชันจะได้รับอนุญาตภายในฟังก์ชัน const (อนุญาตให้สร้าง ส่งผ่าน และแคสต์พอยน์เตอร์ได้ แต่ไม่อนุญาตให้เรียกใช้ฟังก์ชันด้วยพอยน์เตอร์) ลักษณะขอบเขตสำหรับพารามิเตอร์ทั่วไปของฟังก์ชัน const เช่น T: Copy; ลักษณะที่สามารถส่งได้แบบไดนามิก (ลักษณะ dyn); ประเภทลักษณะนัยสำหรับอาร์กิวเมนต์ของฟังก์ชันและส่งกลับค่า
  • สตรีมจัดการ Stdin, Stdout และ Stderr ใน std::io ขณะนี้มีอายุการใช้งานแบบคงที่ ("'คงที่") เมื่อถูกล็อค ซึ่งช่วยให้สามารถสร้างโครงสร้างเช่น "let out = std::io::stdout().lock();" ด้วยการจับและตั้งล็อคในหนึ่งเดียว
  • ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
    • ปักหมุด::static_mut
    • ปักหมุด::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • เขียนสำหรับเคอร์เซอร์<[u8; เอ็น]>
    • มาตรฐาน::os::unix::net::SocketAddr::from_pathname
    • มาตรฐาน::กระบวนการ::ExitCode
    • มาตรฐาน::กระบวนการ::การสิ้นสุด
    • มาตรฐาน::thread::JoinHandle::is_finished
  • คุณลักษณะ “const” ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนที่จะเป็นค่าคงที่ ถูกใช้ในฟังก์ชัน:
    • <*const T>::ออฟเซ็ต และ <*mut T>::ออฟเซ็ต
    • <*const T>::wrapping_offset และ <*mut T>::wrapping_offset
    • <*const T>::เพิ่ม และ <*mut T>::เพิ่ม
    • <*const T>::sub และ <*mut T>::sub
    • <*const T>::wrapping_add และ <*mut T>::wrapping_add
    • <*const T>::wrapping_sub และ <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

นอกจากนี้ คุณสามารถสังเกตบทความ "Rust: A Critical Retrospective" พร้อมบทสรุปการแสดงผลของภาษา Rust หลังจากเขียนโค้ด 100 บรรทัดในระหว่างการพัฒนาระบบปฏิบัติการ Xous microkernel ที่ใช้ในเฟิร์มแวร์ ข้อเสีย ได้แก่ ไวยากรณ์ที่เข้าใจยาก ความไม่สมบูรณ์และการพัฒนาภาษาอย่างต่อเนื่อง การขาดการสร้างซ้ำ ปัญหาทั่วไปเกี่ยวกับความไว้วางใจในการพึ่งพาใน Crates.io และความจำเป็นในการรักษาระเบียบวินัยในการเขียนโค้ดที่ปลอดภัย คุณสมบัติที่เกินความคาดหมาย ได้แก่ เครื่องมือสำหรับการปรับโครงสร้างโค้ดและการทำงานซ้ำ “แฮ็ก” ที่เพิ่มเข้ามาในระหว่างการสร้างต้นแบบอย่างรวดเร็ว

ที่มา: opennet.ru

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