ข่าวประชาสัมพันธ์ได้ถูกเผยแพร่แล้ว สนิม 1.96.0 — เวอร์ชันเสถียรล่าสุดของภาษาโปรแกรม Rust การอัปเดตได้ถูกปล่อยออกมาแล้ว 28 พฤษภาคม 2026 ปีสามารถติดตั้งได้โดยใช้คำสั่ง rustup update stable มาตรฐาน การเปลี่ยนแปลงหลักๆ ได้แก่ ประเภทช่วงใหม่ใน core::range การทำให้มาโครการจับคู่รูปแบบมีเสถียรภาพมากขึ้น การปรับปรุงพฤติกรรมการสร้าง WebAssembly ให้รัดกุมยิ่งขึ้น และการแก้ไขช่องโหว่สองรายการใน Cargo

การเปลี่ยนแปลงที่สำคัญ

  • ประเภทช่วงใหม่ core::range::Range*.
    ประเภทช่วงใหม่ได้รับการกำหนดให้เสถียรในไลบรารีมาตรฐานแล้ว ได้แก่ core::range::Range, RangeFrom, RangeInclusive และตัววนซ้ำที่เกี่ยวข้อง แตกต่างจากประเภทเก่าจาก core::ops ประเภทช่วงใหม่เหล่านี้ไม่ได้ใช้งานอินเทอร์เฟซ Iterator โดยตรง แต่จะถูกแปลงเป็นตัววนซ้ำผ่าน IntoIterator ซึ่งทำให้ช่วงเหล่านี้สามารถคัดลอกได้ สะดวก เช่น เมื่อต้องการจัดเก็บช่วงเป็นฟิลด์ในโครงสร้าง ไวยากรณ์เช่น 0..1 ในปัจจุบันสร้างประเภทช่วงแบบเก่า แต่มีแผนที่จะย้ายไปใช้ประเภทใหม่ในเวอร์ชันถัดไปของภาษา

  • เพิ่ม assert_matches! และ debug_assert_matches! แล้ว
    มาโครใหม่ช่วยให้คุณตรวจสอบว่าค่าตรงกับรูปแบบที่กำหนดหรือไม่ แนวคิดนี้คล้ายกับ assert!(matches!(…)) แต่ในกรณีที่เกิดข้อผิดพลาด จะมีการพิมพ์ค่าในรูปแบบดีบักออกมา ทำให้การวินิจฉัยง่ายขึ้น มาโครเหล่านี้ไม่ได้ถูกเพิ่มเข้าไปใน Prelude เพื่อหลีกเลี่ยงความขัดแย้งกับไลบรารีภายนอกที่เป็นที่นิยม ดังนั้นจึงต้องนำเข้าอย่างชัดเจนจาก core หรือ std

  • เปลี่ยนแปลงพฤติกรรมของเป้าหมาย WebAssembly แล้ว
    Rust จะไม่ส่งค่า --allow-undefined ไปยัง linker สำหรับการสร้าง WebAssembly อีกต่อไปแล้ว สัญลักษณ์ที่ไม่ถูกกำหนดจะถูกมองว่าเป็นข้อผิดพลาดระหว่างการเชื่อมโยง แทนที่จะถูกแปลงเป็นการนำเข้าจากโมดูล "env" โดยอัตโนมัติ ซึ่งจะช่วยตรวจจับข้อผิดพลาดในการสร้างและชื่อสัญลักษณ์ที่ไม่ถูกต้องได้เร็วขึ้น พฤติกรรมเดิมสามารถย้อนกลับได้หากจำเป็น โดยใช้ RUSTFLAGS=-Clink-arg=--allow-undefined หรือโดยการระบุโมดูล wasm ที่นำเข้าอย่างชัดเจนโดยใช้ #[link(wasm_import_module = "env")]

  • สินค้าได้รับการอัปเดตแก้ไขช่องโหว่ด้านความปลอดภัยแล้ว
    Rust 1.96.0 แก้ไขช่องโหว่สองรายการที่ส่งผลกระทบต่อผู้ใช้รีจิสทรีของบุคคลที่สาม CVE-2026-5223 เกี่ยวข้องกับการจัดการลิงก์สัญลักษณ์ภายในไฟล์บีบอัด crate: แพ็กเกจที่เป็นอันตรายจากรีจิสทรีของบุคคลที่สามอาจเขียนทับแคชของแพ็กเกจอื่นจากรีจิสทรีเดียวกัน เริ่มตั้งแต่ Rust เวอร์ชัน 1.96.0 เป็นต้นไป Cargo จะปฏิเสธไฟล์เก็บถาวร crate ที่มีลิงก์สัญลักษณ์ CVE-2026-5222 ปัญหานี้เกี่ยวข้องกับการปรับมาตรฐาน URL ในระบบจัดเก็บข้อมูลแบบกระจัดกระจาย และในบางกรณีที่เกิดขึ้นได้ยาก อาจส่งผลให้โทเค็น Cargo ถูกส่งไปยังระบบจัดเก็บข้อมูลที่เป็นอันตราย ทีมงาน Rust ระบุว่า ผู้ใช้ crates.io ไม่ได้รับผลกระทบจากปัญหาเหล่านี้

  • การเปลี่ยนแปลงทางภาษา
    การเผยแพร่ครั้งนี้ประกอบด้วย: มีการแก้ไขและปรับปรุงเล็กน้อยหลายประการ: อนุญาตให้ส่งผ่านเมตาแวริเบิล expr ของมาโครไปยัง cfg แก้ไขปัญหาการแปลงประเภทที่ไม่เคยเกิดขึ้นในนิพจน์ทูเพิล แก้ไขกรณีหายากของคำแนะนำการอนุมานประเภทที่ไม่ถูกต้องสำหรับอาร์กิวเมนต์ฟังก์ชัน เพิ่มการสนับสนุนสำหรับรีจิสเตอร์เวกเตอร์ s390x ในแอสเซมบลีแบบอินไลน์ และอนุญาตให้ใช้ค่าคงที่ ManuallyDrop เป็นเทมเพลตอีกครั้ง ซึ่งเป็นการแก้ไขข้อผิดพลาดที่เกิดขึ้นใน Rust 1.94.0

  • การเปลี่ยนแปลงในคอมไพเลอร์และแพลตฟอร์ม
    สำหรับ Linuxได้เปิดใช้งานการรองรับการผ่อนคลายลิงก์สำหรับเป้าหมาย LoongArch แล้ว ซึ่งเป็นการเพิ่มประสิทธิภาพการเชื่อมโยงที่ช่วยลดความซับซ้อนของการเปลี่ยนผ่านและการเรียกใช้บางอย่างหลังจากการปรับใช้โค้ด สำหรับ riscv64gc-unknown-fuchsia การกำหนดค่าพื้นฐานได้รับการอัปเดตเป็นโปรไฟล์ RVA22 พร้อมการสนับสนุนส่วนขยายเวกเตอร์

  • การอัปเดตไลบรารีมาตรฐาน
    ได้เพิ่มการรองรับการวนซ้ำในช่วงจำนวนเต็มที่ไม่เป็นศูนย์แล้ว นอกจากนี้ยังได้แก้ไขการจัดการที่อยู่โฮสต์แบบเลซี่ใน SGX ผ่าน ToSocketAddr และได้ชี้แจงความหมายของหน่วยความจำที่ "อ่านได้/เขียนได้" ในเอกสารและข้อตกลงภายในให้ชัดเจนยิ่งขึ้น โดยได้ลบตัวชี้ว่างออกจากคำจำกัดความทั่วไป และขณะนี้ได้ระบุข้อยกเว้นแยกต่างหากสำหรับวิธีการเฉพาะแล้ว

  • API ที่มีเสถียรภาพ
    อินเทอร์เฟซที่เสถียรแล้ว ได้แก่ assert_matches!, debug_assert_matches! และการใช้งานของ From สำหรับ AssertUnwindSafe เลซี่เซลล์ และ LazyLock รวมถึงประเภทช่วงและตัววนซ้ำใหม่จาก core::range ซึ่งรวมถึง Range, RangeFrom, RangeToInclusive และตัววนซ้ำของพวกมันด้วย

  • Cargo: มีการเปลี่ยนแปลงเกี่ยวกับส่วนประกอบที่จำเป็นและเอกสารประกอบ
    ขณะนี้การพึ่งพา (dependency) สามารถระบุได้ทั้งที่เก็บ Git และรีจิสทรีทางเลือก: เวอร์ชัน Git จะถูกใช้ในเครื่อง และเวอร์ชันรีจิสทรีจะถูกใช้ในระหว่างการเผยแพร่ คล้ายกับพฤติกรรมของ crates.io นอกจากนี้ยังเพิ่มการสนับสนุนสำหรับ target.'cfg(..)'.rustdocflags ในการกำหนดค่า Cargo ด้วย

  • Rustdoc เวอร์ชันใหม่นี้จัดการเอกสารได้แม่นยำยิ่งขึ้น
    หมายเหตุ API ที่เลิกใช้แล้วจะถูกแสดงผลเป็นเอกสารปกติ โดยไม่ต้องมีการประมวลผลพิเศษผ่าน white-space: pre-wrap เหมือนแต่ก่อน นอกจากนี้ rustdoc จะไม่ตรวจสอบ lint สำหรับ missing_doc_code_examples ขององค์ประกอบภายใน impl อีกต่อไป และเมธอดและฟังก์ชันที่เกี่ยวข้องจะถูกแยกออกจากกันในแถบด้านข้างของเอกสาร

  • อาจเกิดความไม่เข้ากัน
    การอัปเดตครั้งนี้มีการเปลี่ยนแปลงหลายอย่างที่อาจปรากฏในโค้ดที่ไม่เป็นไปตามมาตรฐาน: รูปแบบของ enum #[repr(Int)] บางตัวได้รับการแก้ไขในกรณีสุดขั้ว และการแปลงประเภทที่ไม่จำเป็นบางอย่างใน Pin ได้ถูกปิดใช้งานแล้ว การสร้าง WebAssembly ตอนนี้จะเกิดข้อผิดพลาดเมื่อพบสัญลักษณ์ที่ไม่ถูกกำหนดไว้ คุณสมบัติ #![reexport_test_harness_main] ที่ถูกทำให้เสถียรโดยไม่ได้ตั้งใจได้ถูกจำกัดการใช้งานอีกครั้ง ตัวเลือก -Csoft-float ถูกลบออก และเวอร์ชัน LLVM ภายนอกขั้นต่ำได้ถูกเพิ่มขึ้นเป็น 21 สำหรับ AVR ประเภท c_double ได้ถูกเปลี่ยนเป็น f32 เนื่องจาก C double เป็น 32 บิตโดยค่าเริ่มต้นบนเป้าหมายเหล่านี้

ที่มา: linux.org.ru

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster