Rust 1.93 มาถึงแล้ว นี่คือสิ่งใหม่ ๆ
Rust 1.93.0 ได้กลายเป็นเวอร์ชันเสถียรแล้วและถูกปล่อยออกมาในวันนี้ โดยเวอร์ชันนี้มุ่งเน้นไปที่การเสริมความมั่นคงด้านความปลอดภัยของคอมไพเลอร์ พร้อมทั้งมอบเครื่องมือสำคัญใหม่ ๆ สำหรับงานที่ต้องการประสิทธิภาพสูง นับเป็นการอัปเดตที่มั่นคงซึ่งทำให้ภาษาดูมีความสมบูรณ์และน่าเชื่อถือมากขึ้นในด้านที่สำคัญที่สุด
หากคุณสร้างไบนารีแบบสแตติกสำหรับ Linux (โดยเฉพาะบน x86_64 หรือ aarch64) ความเสถียรของเครือข่ายของคุณกำลังจะได้รับการปรับปรุงครั้งใหญ่ Rust 1.93 ได้อัปเดตไลบรารี musl ที่รวมมาด้วยเป็นเวอร์ชัน 1.2.5 ซึ่งแก้ไขปัญหาเกี่ยวกับการแก้ไข DNS ที่มีมานานในเวอร์ชันเก่า นี่ถือเป็นข่าวดีหากคุณกำลังสร้างไบนารี Linux แบบพกพาที่จัดการเรื่องเครือข่าย เพราะมันทำให้ฟังก์ชันดังกล่าวมีความน่าเชื่อถือมากขึ้น
สิ่งนี้ช่วยได้เป็นพิเศษเมื่อจัดการกับระเบียน DNS ขนาดใหญ่หรือ nameserver แบบ recursive ที่ซับซ้อน การอัปเดต musl ได้ลบสัญลักษณ์ความเข้ากันได้แบบเก่าบางส่วน crate libc ของ Rust เคยใช้สัญลักษณ์เหล่านี้ อย่างไรก็ตาม ได้มีการแก้ไขปัญหานี้เมื่อกว่าสองปีที่แล้ว ดังนั้นโครงการสมัยใหม่ส่วนใหญ่ควรจะไม่มีปัญหาใด ๆ ในระหว่างกระบวนการอัปเกรด
โดยการอนุญาตให้ตัวจัดสรรระดับโลกเข้าถึงที่เก็บข้อมูลเฉพาะเธรด ไลบรารีมาตรฐานตอนนี้ช่วยให้คุณสามารถใช้ฟีเจอร์ต่างๆ เช่น std::thread_local! ได้อย่างปลอดภัยโดยไม่เกิดปัญหาการเรียกซ้ำ สำหรับผู้ที่เขียนโค้ดขั้นต่ำที่ปรับแต่งอย่างสูง การสนับสนุนใหม่สำหรับแอตทริบิวต์ cfg บนบรรทัด asm! โดยตรงเป็นสิ่งที่ยอดเยี่ยม ก่อนหน้านี้ หากคุณต้องการรวมคำสั่งแอสเซมบลีบางส่วนตามคุณสมบัติของเป้าหมาย คุณต้องทำซ้ำบล็อก asm! ทั้งหมดภายในคำสั่งคอมไพล์ตามเงื่อนไข
ตอนนี้คุณสามารถใช้การคอมไพล์ตามเงื่อนไข เช่น #[cfg(target_feature="sse2")] โดยตรงกับบรรทัดของแอสเซมบลีหรือข้อจำกัดภายในบล็อกได้ สิ่งนี้ทำให้การเขียนการปรับแต่งเฉพาะแพลตฟอร์มสะอาดขึ้นและง่ายต่อการดูแลรักษามากขึ้น
เวอร์ชันนี้ทำให้ API หลายตัวมีความเสถียร เพิ่มเครื่องมือใหม่ให้กับนักพัฒนาสำหรับการจัดการหน่วยความจำและโครงสร้างข้อมูล วิธีใหม่หลายวิธีสำหรับ MaybeUninit slices ตอนนี้มีความเสถียรแล้ว ซึ่งรวมถึง assume_init_drop, assume_init_ref และวิธีต่างๆ เช่น write_copy_of_slice วิธีเหล่านี้ช่วยให้ควบคุมความปลอดภัยของหน่วยความจำได้อย่างละเอียดเมื่อทำงานกับบัฟเฟอร์ที่ยังไม่ได้ถูกเริ่มต้นค่า หากคุณทำงานกับ FFI หรือการจัดการหน่วยความจำแบบกำหนดเอง คุณจะยินดีที่ทราบว่า String::into_raw_parts และ Vec::into_raw_parts ตอนนี้เป็นทางการแล้ว
สิ่งนี้ช่วยให้คุณสามารถแยกคอลเลกชันเหล่านี้เป็นส่วนประกอบหลักของมันได้ เช่น ตัวชี้ดิบ ความยาว และความจุ ผู้ที่สนใจประสิทธิภาพจะชื่นชมการทำให้การดำเนินการจำนวนเต็มที่ไม่ตรวจสอบอย่าง unchecked_neg, unchecked_shl, และ unchecked_shr มีความเสถียร สิ่งเหล่านี้มีความสำคัญสำหรับการเขียนโค้ดที่รวดเร็วมาก ๆ และไม่ปลอดภัย ซึ่งผู้พัฒนารับประกันว่าจะไม่เกิด overflow หรือการเลื่อนที่ไม่ถูกต้อง
สำหรับการใช้งานประจำวัน คอลเลกชัน VecDeque มีเมธอดอย่าง pop_front_if และ pop_back_if ซึ่งช่วยให้ผู้ใช้สามารถลบรายการจากปลายใดก็ได้ของคิวตามเงื่อนไข ทำให้ตรรกะของคิวง่ายขึ้นมาก
ข้อเตือน deref_nullptr ซึ่งตรวจจับความพยายามในการเข้าถึง pointer ที่เป็น null ตอนนี้ถูกตั้งค่าให้ปฏิเสธโดยค่าเริ่มต้น นี่เป็นการเปลี่ยนแปลงที่น่ายินดีมากเพราะช่วยจับปัญหาด้านความปลอดภัยที่สำคัญตั้งแต่ช่วงคอมไพล์แทนที่จะเกิดระหว่างรันไทม์ นอกจากนี้ยังมีการเพิ่มคำเตือนใหม่ ๆ เช่น function_casts_as_integer และ const_item_interior_mutations ซึ่งช่วยบังคับใช้แนวปฏิบัติที่ดีที่สุดและป้องกันบั๊กที่ซับซ้อนเกี่ยวกับการเปลี่ยนค่าภายในของ items ที่เป็นค่าคงที่
ตัวแปรสภาพแวดล้อม CARGO_CFG_DEBUG_ASSERTIONS ขณะนี้ถูกเปิดใช้งานในสคริปต์การสร้างตามโปรไฟล์ที่ใช้งานอยู่ ซึ่งช่วยให้สคริปต์การสร้างมีบริบทมากขึ้นเกี่ยวกับวิธีการคอมไพล์โค้ด นอกจากนี้ cargo clean ขณะนี้รองรับแฟลก --workspace ช่วยให้ง่ายต่อการทำความสะอาดสำหรับโปรเจกต์หลายแพ็กเกจขนาดใหญ่ หากคุณมักวิเคราะห์กราฟของการพึ่งพา cargo tree ขณะนี้รองรับรูปแบบยาวสำหรับตัวแปร --format ทำให้การปรับแต่งเอาต์พุตที่ซับซ้อนง่ายขึ้น
มีสิ่งให้ดูมากมายในเวอร์ชันใหม่นี้ และคุณจะดีใจที่ได้อัปเกรด หากคุณติดตั้ง Rust แล้ว คุณสามารถอัปเดตได้ทันทีโดยรัน rustup update stable
แหล่งที่มา: สนิม (1), สนิม (2)
