ภาษาโปรแกรม Odin จุดประกายการถกเถียงอย่างดุเดือดเรื่องการอ้างสิทธิ์เกี่ยวกับ Undefined Behavior

ทีมชุมชน BigGo
ภาษาโปรแกรม Odin จุดประกายการถกเถียงอย่างดุเดือดเรื่องการอ้างสิทธิ์เกี่ยวกับ Undefined Behavior

โปรเจ็กต์ตัวแปลภาษา LISP อย่างง่ายได้จุดประกายการถกเถียงทางเทคนิคอย่างดุเดือดเกี่ยวกับ undefined behavior ในภาษาโปรแกรม Odin โดยไม่คาดคิด โปรเจ็กต์ที่เรียกว่า komplott แสดงให้เห็นการใช้งาน LISP แบบเรียบง่ายทั้งในภาษา C และ Odin แต่การอภิปรายกลับเปลี่ยนจากความงดงามและความเรียบง่ายของ LISP ไปสู่คำถามพื้นฐานเกี่ยวกับความปลอดภัยของหน่วยความจำและปรัชญาการออกแบบภาษา

การเปรียบเทียบการใช้งาน LISP

คุณสมบัติ เวอร์ชัน C (komplott.c) เวอร์ชัน Odin (komplodin.odin)
จำนวนบรรทัดของโค้ด ~500 บรรทัด ~600 บรรทัด
จำนวนไฟล์ ไฟล์เดียว ไฟล์เดียว
Garbage Collector Copying semi-space ( Cheney's Algorithm ) Copying semi-space ( Cheney's Algorithm )
Tail Call Optimization Limited TCO Limited TCO
การจัดการข้อผิดพลาด เกือบเป็นศูนย์ เกือบเป็นศูนย์
Thread Safety ไม่มี ไม่มี

ข้อถกเถียงเรื่อง Undefined Behavior

ข้อพิพาทหลักหมุนรอบการอ้างสิทธิ์ของ Ginger Bill ผู้สร้างภาษา Odin ที่ว่าภาษานี้ไม่มี undefined behavior นักวิจารณ์โต้แย้งว่าสิ่งนี้ทำให้เข้าใจผิด โดยชี้ไปที่ตัวอย่างที่เป็นรูปธรรมที่ Odin แสดงปัญหาความปลอดภัยของหน่วยความจำเช่นเดียวกับ C โดยเฉพาะสถานการณ์ use-after-free สมาชิกชุมชนคนหนึ่งได้แสดงให้เห็นว่าการทำลาย hash map แล้วเข้าถึงมันในภายหลังสามารถเปิดเผยเนื้อหาจาก hash map ที่แตกต่างกันโดยสิ้นเชิง ทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้และอาจเป็นอันตราย

การถกเถียงนี้เน้นให้เห็นความไม่เห็นด้วยพื้นฐานเกี่ยวกับคำศัพท์ แม้ว่า Odin อาจไม่ใช้ประโยชน์จาก undefined behavior สำหรับการปรับปรุงคอมไพเลอร์เช่นที่ C ทำ แต่มันยังคงอนุญาตให้โปรแกรมเข้าสู่สถานะที่พฤติกรรมไม่ได้ถูกกำหนดโดยข้อกำหนดของภาษา การโต้แย้งเชิงความหมายนี้มีผลกระทบในทางปฏิบัติสำหรับนักพัฒนาที่อาจคาดหวังการรับประกันความปลอดภัยที่แข็งแกร่งกว่าที่ภาษาให้จริง ๆ

คุณสมบัติของภาษา Odin เทียบกับ C

  • ไม่มีพฤติกรรมที่ไม่ได้กำหนดไว้ (เป็นที่ถกเถียง)
  • มีประเภทข้อมูล string, dynamic array และ slice ในตัว
  • มีประเภทข้อมูล map ในตัว
  • การตรวจสอบขอบเขตพร้อมการตรวจจับ memory leak แบบเสริม
  • Tagged unions พร้อม switch statements แบบครบถ้วน
  • มี unit test framework ในตัว
  • รองรับคณิตศาสตร์ 3 มิติพร้อม swizzling และการดำเนินการ matrix
  • รูปแบบการกำหนดค่าหลายตัวแปร (เหมือน Python )
  • แยกความแตกต่างระหว่างการกำหนดค่า (=) และการประกาศตัวแปร (:=)

ความตึงเครียดในชุมชนเผยออกมา

การอภิปรายทางเทคนิคได้เปิดเผยความกังวลที่ลึกซึ้งยิ่งขึ้นของชุมชนเกี่ยวกับรูปแบบการนำของโปรเจ็กต์ Odin ผู้เข้าร่วมหลายคนรายงานประสบการณ์เชิงลบกับแนวทางการสื่อสารของผู้สร้างภาษา โดยอธิบายการตอบสนองที่ดูถูกต่อการมีส่วนร่วมและ pull request บัญชีเหล่านี้วาดภาพของผู้ดูแลที่มีความสามารถแต่หยาบกระด่างที่อาจขัดขวางการเติบโตของชุมชนผ่านการให้ข้อเสนอแนะที่รุนแรงโดยไม่จำเป็น

ฉันจะปิด PR นี้เพราะมันจะเร็วกว่าสำหรับฉันที่จะเขียน binding ของฉันเองมากกว่าการอธิบายทุกสิ่งที่ผิดพลาดแล้วหวังว่าพวกเขาจะได้รับการแก้ไขอย่างถูกต้อง

ข้อถกเถียงขยายไปเกินกว่าปฏิสัมพันธ์ส่วนบุคคลไปสู่คำถามเกี่ยวกับการกำกับดูแลโปรเจ็กต์และประสบการณ์ของผู้มีส่วนร่วม สมาชิกชุมชนหลายคนสังเกตว่าแม้ว่างานทางเทคนิคจะน่าประทับใจ แต่พลวัตทางสังคมรอบ ๆ โปรเจ็กต์สร้างอุปสรรคสำหรับผู้มาใหม่และผู้มีส่วนร่วมที่มีศักยภาพ

เสน่ห์ที่ยั่งยืนของ LISP

แม้จะมีการถกเถียงอย่างดุเดือด แต่โปรเจ็กต์ตัวแปลภาษา LISP เดิมแสดงให้เห็นว่าทำไมภาษานี้ยังคงน่าสนใจสำหรับโปรแกรมเมอร์ การใช้งานต้องการโค้ดน้อยกว่า 500 บรรทัดใน C แสดงให้เห็นความงดงามทางคณิตศาสตร์และความต้องการหลักที่เรียบง่ายของ LISP ความเรียบง่ายเกิดจาก syntax ที่สม่ำเสมอของ LISP ที่ใช้ s-expressions และความจำเป็นของมันสำหรับ special form ที่จำเป็นเพียงสามอย่าง: quote, cond และ lambda

โปรเจ็กต์รวมถึงทั้งตัวแปลภาษา Scheme สมัยใหม่และการใช้งานที่ซื่อสัตย์ของ LISP 1.5 จากปี 1962 ที่มาพร้อมกับ copying garbage collector ที่อิงตาม Cheney's Algorithm การเชื่อมโยงทางประวัติศาสตร์นี้แสดงให้เห็นว่าแนวคิดพื้นฐานของวิทยาการคอมพิวเตอร์ยังคงมีความเกี่ยวข้องตลอดหลายทศวรรษของวิวัฒนาการทางเทคโนโลยี

ข้อถกเถียงรอบการอ้างสิทธิ์เรื่อง undefined behavior ของ Odin ทำหน้าที่เป็นการเตือนใจว่าความแม่นยำทางเทคนิคและการสื่อสารที่ชัดเจนมีความสำคัญในการพัฒนาภาษาโปรแกรม แม้ว่าการถกเถียงเชิงความหมายเกี่ยวกับคำศัพท์อาจดูเป็นเรื่องวิชาการ แต่พวกเขามีผลที่เป็นจริงต่อความคาดหวังของนักพัฒนาและความปลอดภัยของโค้ด ชุมชนโปรแกรมมิ่งยังคงต่อสู้กับการสร้างสมดุลระหว่างนวัตกรรม ความปลอดภัย และการเข้าถึงได้ในการออกแบบภาษา

อ้างอิง: komplott / komplodin