การเปิดตัวของภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไปของ Rust 1.68 ซึ่งก่อตั้งโดยโครงการ Mozilla แต่ปัจจุบันได้รับการพัฒนาภายใต้การอุปถัมภ์ขององค์กรอิสระ Rust Foundation ที่ไม่แสวงหาผลกำไร ได้รับการเผยแพร่แล้ว ภาษานี้เน้นไปที่ความปลอดภัยของหน่วยความจำและให้แนวทางเพื่อให้ได้งานที่มีความเท่าเทียมกันสูง ในขณะที่หลีกเลี่ยงการใช้ตัวรวบรวมขยะและรันไทม์ (รันไทม์จะลดลงเหลือเพียงการเริ่มต้นพื้นฐานและการบำรุงรักษาไลบรารีมาตรฐาน)
วิธีการจัดการหน่วยความจำของ Rust ช่วยนักพัฒนาจากข้อผิดพลาดเมื่อจัดการพอยน์เตอร์และป้องกันปัญหาที่เกิดขึ้นเนื่องจากการจัดการหน่วยความจำระดับต่ำ เช่น การเข้าถึงพื้นที่หน่วยความจำหลังจากปล่อยให้ว่าง การยกเลิกการอ้างอิงพอยน์เตอร์ null บัฟเฟอร์เกิน เป็นต้น เพื่อแจกจ่ายไลบรารี่ จัดเตรียมการสร้างและจัดการการอ้างอิง โครงการพัฒนาตัวจัดการแพ็คเกจสินค้า ที่เก็บ crates.io รองรับการโฮสต์ไลบรารี
ความปลอดภัยของหน่วยความจำมีให้ใน Rust ณ เวลาคอมไพล์ผ่านการตรวจสอบการอ้างอิง การติดตามความเป็นเจ้าของออบเจกต์ การติดตามอายุอ็อบเจ็กต์ (ขอบเขต) และการประเมินความถูกต้องของการเข้าถึงหน่วยความจำระหว่างการดำเนินการโค้ด สนิมยังให้การป้องกันการล้นของจำนวนเต็ม, จำเป็นต้องมีการกำหนดค่าเริ่มต้นที่จำเป็นของค่าตัวแปรก่อนใช้งาน, จัดการข้อผิดพลาดได้ดีขึ้นในไลบรารีมาตรฐาน, ใช้แนวคิดของการอ้างอิงและตัวแปรที่ไม่เปลี่ยนรูปแบบตามค่าเริ่มต้น, เสนอการพิมพ์แบบคงที่ที่แข็งแกร่งเพื่อลดข้อผิดพลาดเชิงตรรกะ
นวัตกรรมหลัก:
- ตัวจัดการแพ็กเกจ Cargo และคลัง crates.io ได้ปรับปรุงการรองรับโปรโตคอล Sparse ให้มีเสถียรภาพมากขึ้น ซึ่งกำหนดวิธีการใหม่ในการทำงานกับดัชนีที่แสดงเวอร์ชันที่มีอยู่ของแพ็กเกจทั้งหมดที่มีอยู่ในคลัง โปรโตคอลใหม่นี้ช่วยปรับปรุงประสิทธิภาพของ crates.io อย่างมีนัยสำคัญ และแก้ไขปัญหาการปรับขนาดเมื่อจำนวนแพ็กเกจในคลังเพิ่มขึ้นอย่างต่อเนื่อง
เพื่อลดความล่าช้าที่เกิดจากการดาวน์โหลดดัชนีฉบับเต็ม Sparse จะใช้การดาวน์โหลด HTTPS โดยตรงสำหรับข้อมูลดัชนีที่จำเป็นเท่านั้น ซึ่งครอบคลุมการอ้างอิงของโปรเจกต์เฉพาะ แทนที่จะเข้าถึงดัชนีผ่าน Git บริการ index.crates.io ใหม่นี้ใช้เพื่อให้บริการข้อมูลดัชนี โปรโตคอลใหม่นี้มีแผนที่จะเปิดใช้งานเป็นค่าเริ่มต้นใน Rust 1.70 ในระหว่างนี้ คุณสามารถเปิดใช้งานได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" หรือเพิ่มพารามิเตอร์ 'protocol = "sparse"' ในส่วน "[registries.crates-io]" ของไฟล์ .cargo/config.toml
- เพิ่มแมโคร "pin!" ซึ่งช่วยให้คุณสร้างโครงสร้าง Pin<&mut T> จากนิพจน์ "T" ด้วยการตรึงสถานะในเครื่อง (ไม่เหมือนกับ Box::pin ซึ่งจะไม่จัดสรรหน่วยความจำบนฮีป แต่ดำเนินการผูกที่ระดับสแต็ก)
- มีการนำตัวจัดการข้อผิดพลาดการจัดสรรหน่วยความจำเริ่มต้นมาใช้กับแพ็กเกจ alloc มาตรฐาน แอปพลิเคชันที่เปิดใช้งานเฉพาะ alloc (ไม่มี std) จะเรียกใช้ตัวจัดการ "panic!" เมื่อการจัดสรรหน่วยความจำล้มเหลว ซึ่งสามารถสกัดกั้นได้โดยใช้ "#[panic_handler]" โปรแกรมที่ใช้ไลบรารี std จะยังคงพิมพ์ข้อมูลข้อผิดพลาดไปยัง stderr และยกเลิกต่อไป
- ส่วนใหม่ของ API ถูกย้ายไปยังหมวดหมู่ของความเสถียร ซึ่งรวมถึงวิธีการและการใช้งานลักษณะต่างๆ ที่ได้รับการทำให้เสถียร:
- {แกน,มาตรฐาน}::พิน::พิน!
- impl จาก สำหรับ {f32,f64}
- มาตรฐาน::เส้นทาง::ตัวคั่นหลัก_STR
- impl DerefMut สำหรับ PathBuf
- แฟล็ก "const" ซึ่งกำหนดความเป็นไปได้ในการใช้งานในบริบทใดๆ แทนค่าคงที่ จะถูกใช้ในฟังก์ชัน VecDeque::new
- Для работы на платформе Android теперь требуется как минимум NDK r25 (API 19), т.е. минимальная поддерживаемая версия Android повышена до 4.4 (KitKat).
- มีการนำการรองรับระดับ 3 มาใช้กับแพลตฟอร์ม Sony PlayStation Vita (armv7-sony-vita-newlibeabihf) ระดับ 3 ให้การสนับสนุนขั้นพื้นฐาน แต่ไม่รวมการทดสอบอัตโนมัติ การเปิดตัวรุ่นอย่างเป็นทางการ หรือการตรวจสอบรุ่น
ที่มา: opennet.ru
