3 คะแนน โดย GN⁺ 2024-07-31 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • แปล C เป็น Rust (TRACTOR)

    • Dr. Dan Wallach
    • หลังจากความพยายามยาวนานกว่า 20 ปีในการแก้ปัญหาด้าน memory safety ของ C และ C++ ชุมชนวิศวกรรมซอฟต์แวร์ก็ได้ข้อสรุปว่า
    • การพึ่งพาเพียงเครื่องมือค้นหาบั๊กนั้นไม่เพียงพอ
    • แนวทางที่ได้รับความนิยมมากกว่าคือการใช้ภาษาโปรแกรมที่ "ปลอดภัย" ซึ่งสามารถปฏิเสธโปรแกรมที่ไม่ปลอดภัยได้ตั้งแต่ขั้นตอนคอมไพล์
    • โครงการ TRACTOR มีเป้าหมายเพื่อแปลโค้ด C เดิมให้เป็น Rust โดยอัตโนมัติ
    • เป้าหมายคือให้ได้คุณภาพและสไตล์เทียบเท่ากับที่นักพัฒนา Rust ที่มีประสบการณ์เขียนเอง เพื่อกำจัดช่องโหว่ด้านความปลอดภัยจากปัญหา memory safety ที่เกิดขึ้นในโปรแกรม C
    • โครงการนี้อาจรวมการผสมผสานแบบใหม่ของ static analysis, dynamic analysis และเทคนิค machine learning เช่น large language models
    • สามารถดูข้อมูลเพิ่มเติมได้จากประกาศพิเศษ TRACTOR Special Notice บน SAM.Gov
  • ผลงานสำคัญของ DARPA

    • การปฏิวัติสเตลธ์

      • ในช่วงเริ่มต้นของการวิจัยเทคโนโลยีสเตลธ์ของ DARPA เครื่องต้นแบบ Have Blue ซึ่งเป็นต้นแบบของ F-117A ได้บินสำเร็จเป็นครั้งแรกในปี 1977
      • ความสำเร็จของโครงการ F-117A เป็นสัญญาณเริ่มต้นของการปฏิวัติสเตลธ์ ซึ่งนำมาซึ่งประโยชน์มหาศาลต่อความมั่นคงของชาติ
    • ระบบนำทางในฝ่ามือ

      • เครื่องรับ GPS รุ่นแรก ๆ มีขนาดใหญ่และหนัก
      • ในปี 1983 DARPA ได้พยายามย่อส่วนอุปกรณ์เหล่านี้ ส่งผลให้มีการนำความสามารถของ GPS ไปใช้อย่างแพร่หลายมากขึ้น
    • ปูทางสู่อินเทอร์เน็ตสมัยใหม่

      • งานวิจัยของ ARPA มีบทบาทสำคัญในการเริ่มต้นการปฏิวัติสารสนเทศ
      • ได้พัฒนารากฐานเชิงแนวคิดของ ARPANET และคิดค้น digital protocols ที่นำไปสู่การกำเนิดของอินเทอร์เน็ต
  • สรุปโดย GN⁺

    • โครงการ TRACTOR เป็นความพยายามสำคัญในการแก้ปัญหา memory safety ด้วยการแปลโค้ด C เดิมเป็น Rust โดยอัตโนมัติ
    • งานวิจัยของ DARPA มีส่วนสำคัญอย่างมากต่อความก้าวหน้าของเทคโนโลยีสมัยใหม่ เช่น เทคโนโลยีสเตลธ์ การย่อส่วน GPS และการกำเนิดของอินเทอร์เน็ต
    • บทความนี้อาจเป็นประโยชน์ต่อวิศวกรซอฟต์แวร์และผู้ที่สนใจประวัติศาสตร์เทคโนโลยี
    • โครงการที่มีแนวคิดคล้ายกัน ได้แก่ Microsoft Checked C และ Google's Carbon ภาษา

1 ความคิดเห็น

 
GN⁺ 2024-07-31
ความคิดเห็นจาก Hacker News
  • Rust ที่เขียนโดยโปรแกรมเมอร์ผู้ชำนาญนั้นแตกต่างจาก C มาก และโค้ดที่น่าสนใจส่วนใหญ่เขียนด้วย C++

    • การกำหนดอายุการใช้งานของการจัดสรรทั้งหมดในโปรแกรม C แบบสแตติกเป็นปัญหาที่ยากมาก
    • โปรแกรม C/C++ สามารถผูกอายุการใช้งานของการจัดสรรเข้ากับเหตุการณ์อย่างการคลิกของผู้ใช้ได้
    • หากโปรแกรมที่ต้องการวิเคราะห์มีบั๊กอยู่ อายุการใช้งานอาจไม่มีความหมาย
    • งานวิจัยที่มีอยู่เดิมตั้งสมมติฐานว่าโค้ดที่นำมาวิเคราะห์นั้นถูกต้อง
  • น่าสนใจที่ข้อเสนอนี้ถูกเผยแพร่ออกสู่สาธารณะ

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

    • หากจะพอร์ตโปรเจกต์ไปยังภาษาหรือแพลตฟอร์มใหม่ การแปลแบบเชิงกลไกไม่ใช่ทางเลือกที่ดี
    • ควรใช้เวลาไปกับการวางแผนสถาปัตยกรรมที่ดีกว่าและออกแบบระบบซอฟต์แวร์
    • ถ้าตัดสินใจจะใช้ Rust ก็ควรเขียนด้วย Rust
    • การอัปเดต C ให้เป็น C สมัยใหม่และใช้ model checker เพื่อตรวจสอบความปลอดภัยของหน่วยความจำ รีซอร์ส และคณิตศาสตร์จำนวนเต็ม น่าจะดีกว่า
  • หลายคนกำลังอ่านโครงการนี้ว่าเป็นการเรียกร้องให้แปลโค้ด C และ C++ เป็น Rust

    • C และ C++ นั้นไม่ปลอดภัยโดยพื้นฐาน
    • ควรแปลหรือเขียนโค้ดให้เป็นภาษาที่ปลอดภัยให้มากที่สุดเท่าที่ทำได้
    • สนับสนุนซอฟต์แวร์ที่ใช้แปลโค้ด C เดิมให้เป็น Rust
    • เป้าหมายไม่ใช่ฉันทามติว่าให้เขียนโลกใหม่ด้วย Rust แต่คือการมุ่งย้ายไปสู่ภาษาที่ปลอดภัย
  • มีปัญหาเรื่องการดูแลรักษา codebase ที่แปลแล้ว

    • ต้องมีทั้ง codebase ที่เขียนด้วย C และทีมวิศวกร C ที่ดูแลมันได้
    • codebase Rust ที่แปลอัตโนมัติอาจอ่านยากและเข้าใจยากกว่าต้นฉบับ
    • ต้องมีทีมวิศวกร Rust ด้วย
    • ถ้ามีวิศวกร Rust อยู่แล้ว การเขียนโค้ดใหม่ด้วยมือจะดีกว่า
  • โปรแกรมที่พอร์ตอัตโนมัติต้องมีความสามารถทุกอย่างที่จำเป็นเพื่อทำให้โค้ด C ปลอดภัยได้

    • หาก Rust ไม่มีบั๊กด้านหน่วยความจำและสามารถแปล C ได้อัตโนมัติ ก็เท่ากับว่าสามารถแก้บั๊กด้านหน่วยความจำทั้งหมดได้โดยอัตโนมัติ
    • โดยทั่วไปแล้วสิ่งนี้เป็นไปไม่ได้
  • ควรจ้างวิศวกรฝีมือดีที่ถูกเลย์ออฟจาก Mozilla ก่อน เพื่อให้ทำงานต่อกับตัวภาษาเอง

    • เรื่อง async ยังไม่เสร็จสมบูรณ์ทั้งหมด
    • ยังมีปัญหาอีกหลายอย่าง
  • เป็นเรื่องดีที่ DARPA ผลักดันปัญหานี้

    • การแปลให้เป็น Rust ที่ปลอดภัยนั้นยากมาก
    • ตอนนี้มีเครื่องมือแปลจาก C เป็น Rust อยู่แล้ว แต่ผลลัพธ์ดูแลรักษาได้ยาก
    • หากจะทำให้ถูกต้อง ต้องแก้ปัญหาเรื่องขนาดอาร์เรย์และการใช้พอยน์เตอร์แบบไม่เชิงเส้น