ในโลกแห่งภาษาการเขียนโปรแกรมระบบที่พัฒนาอย่างไม่หยุดยั้ง มีผู้ท้าชิงใหม่ปรากฏตัวขึ้นและกำลังก่อให้เกิดการถกเถียงอย่างร้อนแรงในหมู่นักพัฒนา Odin ที่สร้างโดย Ginger Bill นำเสนอตัวเองเป็นทางเลือกสมัยใหม่แทนภาษา C ด้วยไวยากรณ์ที่ได้รับแรงบันดาลใจจาก Pascal และการจัดการหน่วยความจำแบบ Manual ระหว่างที่นักพัฒนากำลังสำรวจภาษาใหม่นี้ การอภิปรายก็ปะทุขึ้นรอบๆ ตัวเลือกการออกแบบ การประยุกต์ใช้ในทางปฏิบัติ และว่ามันเสนอสิ่งที่มีคุณค่าจริงๆ นอกเหนือจากภาษาที่มีอยู่แล้วอย่าง C, Zig และ Rust หรือไม่
การถกเถียงเรื่องความเรียบง่าย: น่าเบื่อหรือสุดเจ๋ง?
หนึ่งในการอภิปรายที่โดดเด่นที่สุดมุ่งเน้นไปที่ความเรียบง่ายโดยเจตนาของ Odin สมาชิกในชุมชนหลายคนมองว่านี่เป็นจุดแข็งที่ยิ่งใหญ่ที่สุดของภาษา แทนที่จะเป็นจุดอ่อน แนวทางที่ตรงไปตรงมาของภาษาต่อการจัดการหน่วยความจำและไวยากรณ์ที่สะอาดตาได้รับคำชมจากนักพัฒนาที่เหนื่อยล้ากับการต่อสู้กับคุณสมบัติภาษาที่ซับซ้อน
ข้อเสียเปรียบที่ใหญ่ที่สุดของ C คือความประหลาดใจมากมายของมัน ความน่าเบื่อบ้างคงจะดีต่อมัน
ความรู้สึกนี้สะท้อนไปทั่วชุมชน ซึ่งนักพัฒนาชื่นชมที่ Odin กำจัดข้อผิดพลาดทางประวัติศาสตร์หลายอย่างของ C ออกไป ในขณะที่ยังคงรักษาการควบคุมระดับต่ำที่โปรแกรมเมอร์ระบบต้องการ ปรัชญาการออกแบบของภาษากำหนดให้ความคาดเดาได้และความอ่านง่ายเป็นสิ่งสำคัญ ทำให้เข้าถึงได้สำหรับผู้มาใหม่ ในขณะที่ยังทรงพลังพอสำหรับนักพัฒนาที่มีประสบการณ์ซึ่งทำงานบนแอปพลิเคชันที่สำคัญต่อประสิทธิภาพ
ปัญหาเลย์เอาต์คีย์บอร์ดและตัวเลือกไวยากรณ์
การถกเถียงที่เต็มไปด้วยอารมณ์อย่างน่าประหลาดใจได้เกิดขึ้นรอบๆ การใช้สัญลักษณ์ caret (^) ของ Odin สำหรับไวยากรณ์พอยน์เตอร์ ซึ่งสืบทอดมาจาก Pascal ในขณะที่นักพัฒนาบางคนที่มีพื้นหลัง Pascal หรือ Delphi พบว่าสิ่งนี้คุ้นเคยและสะดวกสบาย คนอื่นๆ ชี้ให้เห็นปัญหาด้านการเข้าถึงคีย์บอร์ดในทางปฏิบัติ
ปัญหานี้เกี่ยวข้องกับ dead keys - อักขระที่ต้องกดปุ่มหลายครั้งบนเลย์เอาต์คีย์บอร์ดสากลหลายแบบ นักพัฒนาที่ใช้เลย์เอาต์เช่น UK International หรือการกำหนดค่าต่างๆ ของยุโรปรายงานว่าการพิมพ์ ^, ~ และ ` ต้องใช้ความพยายามเพิ่มเติม บางครั้งต้องกดสองหรือสามครั้งต่ออักขระ สิ่งนี้นำไปสู่คำแนะนำที่ว่าภาษาการเขียนโปรแกรมใหม่ๆ ควรหลีกเลี่ยงอักขระเหล่านี้สำหรับการดำเนินการทั่วไป
วงเล็บ แม้ว่าจะต้องใช้ปุ่มหลายปู่ในเลย์เอาต์ส่วนใหญ่ แต่โดยทั่วไปแล้วพิมพ์ได้ง่ายกว่าเพราะมักเกี่ยวข้องกับการกดปุ่มพร้อมกันแทนที่จะกดตามลำดับ การอภิปรายยังแตกแขนงออกไปเป็นคำแนะนำสำหรับเลย์เอาต์คีย์บอร์ดทางเลือก เช่น Programmer Dvorak และการกำหนดค่า modifier แบบกำหนดเองเพื่อบรรเทาความท้าทายในการพิมพ์เหล่านี้
ผลกระทบของรูปแบบแป้นพิมพ์ต่อการเขียนโปรแกรม
- อักขระ Dead Key: ^, ~, ` ต้องกดแป้นพิมพ์หลายครั้งบนแป้นพิมพ์แบบนานาชาติ
- วิธีแก้ปัญหาทั่วไป: รูปแบบแป้นพิมพ์ US International, Programmer Dvorak, การกำหนดแป้นพิมพ์แบบกำหนดเอง
- ได้รับผลกระทบน้อยที่สุด: วงเล็บ (กดแป้นพิมพ์พร้อมกันเทียบกับกดตามลำดับสำหรับ dead keys)
- ข้อพิจารณาในการออกแบบภาษา: ภาษาใหม่มักหลีกเลี่ยงอักขระ dead key สำหรับตัวดำเนินการที่ใช้บ่อย
ความเสถียรของภาษา เทียบกับ การพัฒนาที่ต่อเนื่อง
จุดเปรียบเทียบสำคัญอีกประการระหว่าง Odin กับภาษาระบบสมัยใหม่อื่นๆ คือปรัชญาการพัฒนา สมาชิกในชุมชนระบุว่าผู้สร้าง Odin ได้ประกาศว่าข้อกำหนดภาษานั้นเสร็จสมบูรณ์แล้ว โดยมุ่งความพยายามในปัจจุบันไปที่การปรับปรุงไลบรารีมาตรฐานและเครื่องมือ แทนที่จะเปลี่ยนแปลงคุณสมบัติหลักของภาษา
สิ่งนี้แตกต่างจากภาษาอย่าง Zig ซึ่งยังคงอยู่ในช่วงก่อนเวอร์ชัน 1.0 พร้อมคำเตือนที่ชัดเจนเกี่ยวกับการเปลี่ยนแปลงที่ทำลายความเข้ากันได้อย่างต่อเนื่อง สำหรับนักพัฒนาที่แสวงหาความเสถียรในชุดเครื่องมือของพวกเขา ข้อกำหนดที่ถูกแช่แข็งของ Odin เป็นข้อได้เปรียบที่สำคัญ ทีมสามารถนำภาษาไปใช้ได้โดยไม่ต้องกังวลว่าการเปลี่ยนแปลงไวยากรณ์หรือความหมายบ่อยๆ จะรบกวนฐานโค้ดของพวกเขา
โฟกัสด้านความเสถียรดึงดูดเป็นพิเศษสำหรับนักพัฒนาเกมและโปรแกรมเมอร์ระบบสมัครแรงซึ่งมักบำรุงรักษาโปรเจกต์เป็นเวลาหลายปีและต้องการสภาพแวดล้อมการพัฒนาที่คาดเดาได้ การพิจารณาในทางปฏิบัตินี้มักมีน้ำหนักมากกว่าข้อได้เปรียบทางทฤษฎีของภาษาเมื่อเลือกเครื่องมือสำหรับโครงการระยะยาว
ความขัดแย้งเรื่องตัวจัดการแพ็กเกจ
บางทีแง่มุมที่สร้างความแตกแยกมากที่สุดของระบบนิเวศ Odin คือการขาดตัวจัดการแพ็กเกจอย่างเป็นทางการโดยเจตนา ความรังเกียจที่รู้จักกันดีของ Ginger Bill ต่อตัวจัดการแพ็กเกจได้หล่อหลอมปรัชญาการพัฒนาของ Odin ส่งผลให้เกิดปฏิกิริยาที่หลากหลายจากชุมชน
ผู้สนับสนุนโต้แย้งว่าตัวจัดการแพ็กเกจส่งเสริมการพึ่งพาที่มากเกินไปและสร้างต้นไม้การพึ่งพาที่เปราะบางซึ่งพังบ่อย พวกเขาชี้ไปที่ระบบนิเวศอย่าง PyPI ของ Python ซึ่งการรักษาความเข้ากันได้ทั่วแพ็กเกจหลายพันรายการกลายเป็นความท้าทายที่เพิ่มขึ้นเรื่อยๆ โดยไม่มีตัวจัดการการพึ่งพาที่ง่าย นักพัฒนา Odin ถูกส่งเสริมให้เขียนโค้ดที่ยืนหยัดได้ด้วยตัวเองมากขึ้นและพิจารณาการพึ่งพาภายนอกอย่างรอบคอบ
นักวิจารณ์โต้กลับว่าการพัฒนาซอฟต์แวร์สมัยใหม่พึ่งพาการใช้โค้ดซ้ำและแพ็กเกจชุมชนอย่างมาก พวกเขาระบุว่าแม้ไม่มีการสนับสนุนอย่างเป็นทางการ ในที่สุดนักพัฒนาก็จะสร้างตัวจัดการแพ็กเกจของบุคคลที่สาม โดยอ้างการวิวัฒนาการของระบบนิเวศ JavaScript เป็นตัวอย่าง การขาดการจัดการการพึ่งพาที่ได้มาตรฐานอาจขัดขวางการนำไปใช้โดยทีมที่คุ้นเคยกับเวิร์กโฟลว์การพัฒนาสมัยใหม่
การจัดการข้อผิดพลาดและการจัดการหน่วยความจำ
การอภิปรายทางเทคนิคยังมุ่งเน้นไปที่แนวทางของ Odin ต่อการจัดการข้อผิดพลาดและการจัดการหน่วยความจำ ภาษาใช้ค่าการส่งคืนหลายค่าสำหรับการจัดการข้อผิดพลาด ทำให้ฟังก์ชันอย่าง make
สามารถส่งคืนค่าข้อผิดพลาดทางเลือกที่นักพัฒนาสามารถเลือกที่จะตรวจสอบหรือเพิกเฉยได้
แนวทางนี้ให้ความยืดหยุ่นแต่ก็ทำให้เกิดคำถามเกี่ยวกับความปลอดภัย ไม่เหมือนกับการบังคับใช้การจัดการข้อผิดพลาดขณะคอมไพล์ของ Rust, Odin ปล่อยให้การตรวจสอบข้อผิดพลาดเป็นแนวปฏิบัติทางเลือก ในทำนองเดียวกัน ในขณะที่ Odin รองรับการจัดการหน่วยความจำแบบ Manual คล้ายกับ C และ Zig มันเสนอตัวจัดสรรมาตรฐานที่ทำให้รูปแบบทั่วไปง่ายขึ้นโดยไม่มีความซับซ้อนของระบบความเป็นเจ้าของของ Rust
ชุมชนรับรู้ว่าสิ่งเหล่านี้เป็นการแลกเปลี่ยนการออกแบบโดยเจตนา แทนที่จะเป็นการละเว้น Odin ให้ความสำคัญกับอิสระและความเรียบง่ายของนักพัฒนาเหนือความปลอดภัยที่ถูกบังคับ ทำให้ตัวเองอยู่ในตำแหน่งที่เป็นทางเลือกที่เน้นปฏิบัติการสำหรับโปรแกรมเมอร์ระบบที่มีประสบการณ์ซึ่งต้องการความปลอดภัยมากกว่า C แต่มีความซับซ้อนน้อยกว่า Rust
ภาพรวมการเปรียบเทียบภาษา
คุณสมบัติ | Odin | C | Zig | Rust |
---|---|---|---|---|
การจัดการหน่วยความจำ | แบบแมนนวลพร้อมตัวช่วย | แบบแมนนวลทั้งหมด | แบบแมนนวลพร้อมฟีเจอร์ความปลอดภัย | ระบบ Ownership |
การจัดการข้อผิดพลาด | ส่งคืนค่าหลายค่า | รหัสส่งคืน | Error unions | Result type |
อิทธิพลของไวยากรณ์ | ได้รับแรงบันดาลใจจาก Pascal | ดั้งเดิม | ได้รับแรงบันดาลใจจาก C | ได้รับแรงบันดาลใจจาก ML |
Package Manager | ไม่มี (โดยการออกแบบ) | หลากหลาย | อยู่ระหว่างพัฒนา | Cargo |
ความเสถียรของภาษา | สเปกที่ตายตัว | เสถียร | ก่อน 1.0 มีการเปลี่ยนแปลงที่ทำลายความเข้ากันได้ | เสถียร |
กรณีการใช้งานหลัก | เกม ระบบ | ระบบ ฝังตัว | ระบบ คอมไพเลอร์ | ระบบ เว็บ |
ความยากในการเรียนรู้ | ปานกลาง | สูง | ปานกลาง | สูง |
สรุป: กลุ่มเฉพาะที่คุ้มค่าต่อการสำรวจ
การอภิปรายที่กำลังดำเนินอยู่เผยให้เห็น Odin ในฐานะภาษาที่ตัดสินใจเลือกอย่างเจตนาและมีแนวคิด ซึ่งจะไม่ดึงดูดทุกคนแต่เกิดเสียงสะท้อนอย่างแรงกับความต้องการเฉพาะของนักพัฒนา ความเสถียร ความเรียบง่าย และโฟกัสที่การพัฒนาเกมของมันวางตำแหน่งให้เป็นทางเลือกที่น่าสนใจสำหรับโปรแกรมเมอร์ที่หงุดหงิดกับความแปลกประหลาดของ C แต่ไม่ต้องการรับเอาเส้นทางการเรียนรู้ของ Rust หรือการเปลี่ยนแปลงที่ต่อเนื่องของ Zig
ดังที่สมาชิกชุมชนหนึ่งสรุปไว้ Odin เป็นตัวแทนของ C ที่ทันสมัยกว่า บางhow น่าเบื่อกว่าเดิมอีก แต่ในทางที่ดีที่สุด สำหรับนักพัฒนาที่ทำงานในโครงการระยะยาวซึ่งความเสถียรและความอ่านง่ายสำคัญกว่าคุณสมบัติที่ล้ำสมัย Odin เสนอเส้นทางที่ตรงไปตรงมาอย่างสดชื่นสู่การเขียนโปรแกรมระบบ
อ้างอิง: Is Odin Just A More Boring C?