Zig ขยาย Pointer Stability Locks จาก HashMap มาสู่ std.ArrayList
Pointer Stability for ArrayLists
บันทึกนักพัฒนา (devlog) ของ Zig ลงวันที่ 27 สิงหาคม 2026 ประกาศขยายกลไก Pointer Stability Locks ซึ่งเดิมมีให้ใช้เฉพาะกับคอนเทนเนอร์ประเภท HashMap ให้ครอบคลุมถึง std.ArrayList ด้วย
ปัญหาที่กลไกนี้แก้คือ ArrayList สามารถจัดสรรหน่วยความจำเบื้องหลังใหม่ได้เมื่อความจุไม่พอ ซึ่งทำให้พอยน์เตอร์ที่ชี้ไปยังสมาชิกในลิสต์ใช้การไม่ได้ทันที และผลลัพธ์คือการเสียหายของหน่วยความจำแบบเงียบ ๆ ที่ตามหาต้นตอยากมาก กลไกใหม่จะตรวจจับกรณีที่โค้ดพยายามแก้ไข ArrayList ขณะยังถือพอยน์เตอร์ไปยังเนื้อหาอยู่ แล้วยิง assertion ออกมาแทนที่จะปล่อยให้หน่วยความจำเสียหายไปเงียบ ๆ
การใช้งานต้องเรียกเมธอดใหม่สองตัวคือ lockPointers() เมื่อเริ่มเก็บพอยน์เตอร์ไปยังสมาชิกของ ArrayList และ unlockPointers() เมื่อเลิกใช้พอยน์เตอร์เหล่านั้นแล้ว
จุดที่ devlog เน้นย้ำคือ การล็อกไม่ได้ครอบคลุมแค่กรณีย้ายหน่วยความจำเบื้องหลังเท่านั้น เพราะ "การดำเนินการกับลิสต์อาจย้ายตำแหน่งสมาชิกไปมาได้แม้จะไม่ย้ายหน่วยความจำเบื้องหลัง" เช่นเมธอด orderedRemove() และ pop() ซึ่งก็จะยิง assertion หลังจากล็อกแล้วเช่นกัน
นี��เป็นตัวอย่างของแนวทางที่ Zig ยึดถือ คือแทนที่จะออกแบบระบบชนิดข้อมูลที่ซับซ้อนแบบ borrow checker ของ Rust ก็เลือกใช้การตรวจสอบขณะรันในโหมด safe เพื่อเปลี่ยนบั๊กหน่วยความจำที่หาไม่เจอให้กลายเป็นข้อผิดพลาดที่ดังและชี้จุดได้ทันที