Rust เทียบกับ Ada
(reddit.com)นี่คือคอมเมนต์เปรียบเทียบระหว่าง Rust และ Ada ที่พบใน r/ada บน Reddit
-
ทั้งสองภาษามีข้อดีจากการที่ ไม่ใช่ C เช่น syntax foot guns ของ C (ฟีเจอร์ที่ทำให้นักพัฒนายิงเท้าตัวเองได้), undefined behavior เป็นต้น
-
ทั้งสองภาษารองรับ memory safety มีการตรวจขอบเขตของอาร์เรย์ตอนรันไทม์ รวมถึงกฎสำหรับตรวจสอบพอยน์เตอร์ที่ถูกต้อง เป็นต้น Ada มีการตรวจสอบที่ค่อนข้างเรียบง่ายกว่า และมี
Unchecked_Accessสำหรับข้ามทุกอย่างได้ ส่วน borrow checker ของ Rust มีความซับซ้อนกว่า แต่ก็ทำให้การหลบเลี่ยงข้อจำกัดทำได้ยากกว่าแม้ในกรณีที่จำเป็นต้องข้าม -
Rust ยอมรับการจัดสรรหน่วยความจำแบบไดนามิก ใน Ada ก็ทำได้เช่นกัน แต่ค่อนข้างขัดธรรมชาติและใช้งานไม่สะดวก เห็นได้ชัดว่าตัวภาษา Ada ไม่ได้ต้องการแนวทางนี้ Ada มีต้นกำเนิดมาจากยุคที่การจัดสรรบนฮีปถูกมองว่าเป็นปัญหาด้านความปลอดภัย มีความกังวลเรื่อง memory fragmentation และต้องพิสูจน์ให้ได้ว่าจะไม่มีหน่วยความจำหมด Rust สนับสนุนการใช้ฮีปอย่างอิสระ และหากต้องใช้การจัดสรรแบบไดนามิก Rust ก็ปลอดภัยกว่าชัดเจน ใน Ada การคืนหน่วยความจำอาจทิ้ง dangling pointer ไว้ได้ จึงเป็นการกระทำที่ไม่ปลอดภัย
-
Rust เหนือกว่าในด้าน thread safety โดย borrow checker ป้องกัน race condition ตั้งแต่ต้น
-
Ada เหนือกว่าในด้าน value safety โดย
Constrained subtypeเป็นเครื่องมือที่ดีสำหรับการเขียนโค้ดให้ถูกต้อง และยังเป็นรากฐานของฟีเจอร์อื่นใน Ada เช่นการตรวจสอบอาร์เรย์ -
Ada เหนือกว่าในด้าน formal proof ผ่านการใช้ SPARK ใน Rust ยังไม่พบสิ่งที่เทียบได้ หากต้องการความปลอดภัยระดับสูงเป็นสิ่งจำเป็น SPARK คือเครื่องมือที่เหมาะสมที่สุด
2 ความคิดเห็น
พิมพ์บนมือถือเลยมีพิมพ์ผิดอยู่นะครับ เศร้า
memory sadety -> memory safety ครับ
burrow checker -> borrow checker
thread safery -> thread safety
:D