Rust 1.100 ฉลองเวอร์ชันที่ 100 เปิดตัว Never Type อย่างเป็นทางการ

ทีมงาน Rust ประกาศเปิดตัว Rust 1.100 ซึ่งเป็นเวอร์ชันเสถียร (stable) ลำดับที่ 100 ของภาษาโปรแกรมนี้ โดยมีการเปลี่ยนแปลงครั้งสำคัญคือการทำให้ never type (!) เข้าสู่สถานะเสถียร หลังจากใช้เวลาพัฒนานานถึงสิบปีและผ่านความพยายามที่ไม่สำเร็จถึงห้าครั้ง ตัวแปรประเภทนี้ใช้แสดงถึงการคำนวณที่ไม่เคยส่งค่ากลับออกมา เช่น ฟังก์ชันที่ยุติการทำงานทันทีหรือเกิด panic

แม้ว่าก่อนหน้านี้ Rust จะรองรับ never type ใน signature ของการคืนค่าฟังก์ชันอยู่แล้ว แต่ในเวอร์ชัน 1.100 นักพัฒนาจะสามารถใช้งานในตำแหน่งประเภทใดก็ได้ รวมถึงประเภท generic อย่าง Result<T, !> นอกจากนี้ประเภท Infallible ที่มีอยู่เดิมได้กลายเป็นชื่อนามแฝงสำหรับ ! เพื่อให้ API ต่างๆ สามารถทำงานร่วมกันได้ทันที

อย่างไรก็ตาม มีข้อควรระวังด้านความเข้ากันได้เล็กน้อย เนื่องจาก Rust 1.100 เปลี่ยนการ fallback ของ never-type จาก () เป็น ! สำหรับรุ่นปี 2015, 2018 และ 2021 เพื่อให้สอดคล้องกับพฤติกรรมใน Rust 2024 แม้จะส่งผลกระทบต่อโครงการส่วนน้อย แต่โค้ดหรือ dependency เดิมบางส่วนอาจจำเป็นต้องได้รับการอัปเดตใหม่

อีกหนึ่งการพัฒนาที่สำคัญคือการทำให้ core Allocator API มีสถานะเสถียร ทำให้นักพัฒนาสามารถกำหนดตัวจัดสรรหน่วยความจำแบบกำหนดเอง (custom memory allocators) และใช้งานร่วมกับประเภทข้อมูลในไลบรารีมาตรฐานอย่าง Vec และ Box ได้แล้ว ช่วยให้การควบคุมหน่วยความจำทำได้ละเอียดขึ้น โดยเฉพาะในแอปพลิเคชันเฉพาะทาง ส่วนการรองรับคอลเลกชันและพอยเตอร์ประเภทอื่นมีแผนจะเพิ่มเข้ามาในอนาคต

นอกจากนี้ยังมีการแนะนำ DropGuard ตัวช่วยใหม่ในไลบรารีมาตรฐานสำหรับรัน closure เมื่อค่าหลุดออกจากขอบเขต (out of scope) รวมถึงกรณีที่ฟังก์ชันคืนค่าก่อนกำหนดหรือเกิด panic โดยมีเมธอด dismiss เพื่อระงับการทำความสะอาดข้อมูล ซึ่งมีประโยชน์มากสำหรับการดำเนินการที่ต้องย้อนคืนการเปลี่ยนแปลง (rollback) เมื่อเกิดความผิดพลาด

ในส่วนของเครื่องมือจัดการแพ็คเกจ Cargo ได้เพิ่มกลไก cooldown ของ dependency แบบใหม่เพื่อลดความเสี่ยงจากการโจมตีแบบ software supply-chain โดยนักพัฒนาสามารถระบุอายุขั้นต่ำของแพ็คเกจที่เพิ่งเผยแพร่ใหม่ ก่อนที่ Cargo จะอนุญาตให้นำมาใช้ในระหว่างการแก้ไข dependency

ฟีเจอร์ cooldown นี้เป็นทางเลือกเสริมและไม่ส่งผลต่อ cargo install ทั้งนี้ยังต้องพึ่งพาข้อมูลประทับเวลาจาก registry ของแพ็คเกจด้วย จึงควรใช้เป็นมาตรการป้องกันเพิ่มเติมมากกว่าจะเป็นทางออกด้านความปลอดภัยที่สมบูรณ์เพียงอย่างเดียว

ยิ่งไปกว่านั้น Cargo จะเริ่มรายงาน dependency ที่ไม่ได้ใช้งานแต่ถูกประกาศไว้ใน Cargo.toml เพื่อช่วยลดระยะเวลาการ build โดยไม่จำเป็น ซึ่งการแจ้งเตือนนี้จะเปิดใช้งานเป็นค่าเริ่มต้น อย่างไรก็ตาม ระบบจะตรวจจับตาม build target ที่ระบุและยังไม่ครอบคลุมถึง dependency สำหรับการพัฒนาในขณะนี้

ด้านการทำ build caching ได้รับการปรับปรุงให้ Cargo แยก build artifact อย่างสม่ำเสมอผ่าน configuration hash ในโครงสร้างไดเรกทอรี ช่วยแก้ปัญหาการชนกันระหว่างการ build ที่มีการตั้งค่าต่างกัน ซึ่งเดิมอาจส่งผลให้เกิดการ compile ใหม่โดยไม่จำเป็นหรือเกิดความสับสนในการใช้งาน artifact

สุดท้ายนี้ Rust 1.100 ได้ทำให้ std::mem::conjure_zst ซึ่งเป็นฟังก์ชัน unsafe สำหรับสร้างประเภทที่มีขนาดเป็นศูนย์ (zero-sized types) เข้าสู่สถานะเสถียร พร้อมกับ API ขนาดเล็กอื่นๆ เช่น bool::toggle, Vec::from_fn และเมธอดใหม่สำหรับการจัดการ string

ผู้ที่สนใจสามารถอ่านรายละเอียดเพิ่มเติมได้ที่ release notes อย่างเป็นทางการ ส่วนผู้ใช้งานเดิมที่จัดการผ่าน Rustup สามารถอัปเดตได้ทันทีด้วยคำสั่ง rustup update stable

Source: Linuxiac
ดูแลงานแปลและเรียบเรียงโดย NatapolK
Rust 1.100 ฉลองเวอร์ชันที่ 100 เปิดตัว Never Type อย่างเป็นทางการ

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร