11 คะแนน โดย regentag 2024-10-20 | 2 ความคิดเห็น | แชร์ทาง WhatsApp

นี่คือคอมเมนต์เปรียบเทียบระหว่าง 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 ความคิดเห็น

 
regentag 2024-10-20

พิมพ์บนมือถือเลยมีพิมพ์ผิดอยู่นะครับ เศร้า

memory sadety -> memory safety ครับ

 
jwh926 2024-10-22

burrow checker -> borrow checker
thread safery -> thread safety
:D