Rust 1.98.1 เป็นรุ่นแก้ไขเฉพาะจุดที่ทีม Rust เผยแพร่เมื่อ 3 กันยายน 2026 หลังพบว่า compiler ใน Rust 1.98.0 อาจสร้างตารางเรียกเมธอดของ trait object ผิดในบางเงื่อนไข ปัญหานี้อยู่ในโค้ดที่คอมไพล์ออกมา ไม่ใช่เพียงข้อความเตือนขณะ build

เกิดอะไรขึ้น

เมื่อโปรแกรมเรียกเมธอดผ่าน trait object เช่นค่าประเภท dyn Trait จะใช้ vtable เพื่อหาตำแหน่งฟังก์ชันที่จะเรียก ประกาศของทีม Rust ระบุว่า Rust 1.98.0 อาจใส่ null pointer ลงในช่องที่ควรเป็น function pointer หากโปรแกรมไปเรียกช่องนั้น ผลลัพธ์คือ undefined behavior และบางกรณีอาจจบด้วย segmentation fault

รายงานปัญหาที่ทีม Rust เชื่อมจากประกาศแสดงตัวอย่างในโปรเจกต์ Rama บน aarch64 macOS: โค้ดชุดเดียวกันทำงานกับ Rust 1.97.1 แต่ล้มเมื่อ build ด้วย 1.98.0 ผู้รายงานพบช่องเมธอดใน vtable เป็นศูนย์ ข้อมูลนี้เป็นตัวอย่างที่ตรวจพบ ไม่ได้หมายความว่าทุกโปรแกรมที่ใช้ trait object จะได้รับผลกระทบ

ทีมพัฒนาควรทำอย่างไร

ตรวจเวอร์ชัน compiler ที่ใช้ build ด้วย rustc --version หาก pipeline ยังใช้ 1.98.0 ให้ย้ายไป 1.98.1 หรือ stable รุ่นใหม่ที่รวมการแก้ไขแล้ว ผู้ที่ติดตั้งผ่าน rustup อัปเดตได้ด้วย rustup update stable จากนั้น build ใหม่และรันชุดทดสอบของโปรเจกต์ โดยเฉพาะเส้นทางที่เรียกเมธอดผ่าน trait object และงาน async ที่เกี่ยวข้อง

การอัปเดต toolchain ไม่ได้เปลี่ยน binary ที่ build ไปแล้วโดยอัตโนมัติ หากมี release ที่ build ด้วย 1.98.0 ควรประเมินว่าต้องสร้างและส่ง binary ใหม่หรือไม่ตามความเสี่ยงของระบบ หลักฐานต้นทางไม่ได้ระบุสัดส่วนโปรเจกต์ที่ได้รับผลกระทบ จึงไม่ควรสรุปว่าทุกแอป Rust มีปัญหาเดียวกัน

แหล่งข้อมูล