การเปิดตัว Zig 0.15 ได้นำเสนออินเทอร์เฟซ IO ที่ออกแบบใหม่ทั้งหมด โดยแทนที่ std.io.Reader และ std.io.Writer เดิมด้วยประเภทใหม่ std.lo.Reader และ std.lo.Writer แม้ว่าการเปลี่ยนแปลงนี้จะสัญญาว่าจะให้ประสิทธิภาพที่ดีขึ้นและแก้ไขปัญหาอินเทอร์เฟซเดิม แต่ก็ได้จุดประกายการอภิปรายอย่างเข้มข้นในชุมชนเกี่ยวกับคุณภาพเอกสารและประสบการณ์นักพัฒนาในระบบนิเวศ Zig
การเปลี่ยนแปลง IO Interface ใน Zig 0.15
ด้าน | Interface เดิม | Interface ใหม่ |
---|---|---|
ประเภท Reader | std.io.Reader | std.lo.Reader |
ประเภท Writer | std.io.Writer | std.lo.Writer |
การจัดการ Buffer | วิธีการแบบผสม | การจัดการ buffering แบบ first-class |
TLS Client Buffers | ต้องใช้ 2 buffers | ต้องใช้ 4 buffers |
การเข้าถึง Interface | ไม่สม่ำเสมอ | reader.interface() เทียบกับ &writer.interface |
ขนาด Buffer ที่จำเป็น
- ขนาด buffer ขั้นต่ำ:
std.crypto.tls.max_ciphertext_record_len
- ต้องใช้หลาย buffers: stream buffers + TLS client buffers
อินเทอร์เฟซที่ซับซ้อนสร้างอุปสรรคในการเรียนรู้
อินเทอร์เฟซ IO ใหม่ต้องการให้นักพัฒนาจัดการบัฟเฟอร์หลายตัวและเข้าใจความสัมพันธ์ที่ซับซ้อนระหว่างคอมโพเนนต์ต่างๆ นักพัฒนาที่พยายามสร้างการเชื่อมต่อ TLS client แบบง่ายๆ พบว่าตัวเองต้องจัดการกับบัฟเฟอร์แยกกันถึงสี่ตัว - สองตัวสำหรับ network stream และอีกสองตัวสำหรับ TLS client อินเทอร์เฟซยังมีความไม่สอดคล้องกัน เช่น การเรียก reader.interface()
เทียบกับ &writer.interface
ซึ่งเพิ่มความสับสนให้กับผู้เริ่มต้น
ความซับซ้อนขยายไปถึงการดำเนินการพื้นฐานอย่างการอ่านข้อมูล แตกต่างจากอินเทอร์เฟซแบบดั้งเดิมที่ให้เมธอด read()
ที่ตรงไปตรงมา std.lo.Reader ใหม่เสนอเมธอดอย่าง peak
, takeByteSigned
และ readSliceShort
แต่ขาดฟังก์ชันการอ่านที่เข้าใจง่ายตามที่นักพัฒนาคาดหวัง สิ่งนี้บังคับให้ผู้ใช้ต้องสตรีมข้อมูลไปยัง writers หรือใช้วิธีแก้ปัญหาอื่นๆ เพื่อทำงานง่ายๆ ให้สำเร็จ
ช่องว่างในเอกสารเป็นเชื้อเพลิงความตึงเครียดในชุมชน
การขาดเอกสารที่ครอบคลุมได้กลายเป็นจุดขัดแย้งหลักในชุมชน Zig ผู้ใช้หลายคนแสดงความหงุดหงิดกับวัฒนธรรม just read the stdlib code ที่เกิดขึ้นรอบภาษานี้ วิธีการนี้สร้างอุปสรรคสำหรับนักพัฒนาที่ต้องการใช้ Zig แต่ขาดเวลาหรือความเชี่ยวชาญในการ reverse-engineer APIs จากซอร์สโค้ด
บ่นเรื่องการขาดเอกสารและเตรียมพร้อมสำหรับคอมเมนต์ ช่วยเหลือ แบบ 'just read the stdlib code' ที่จะท่วมท้นจากเกือบทุกคนที่เขียน Zig ในตอนนี้
ปัญหาเอกสารมีผลกระทบที่กว้างขึ้นต่อการยอมรับ Zig สมาชิกชุมชนหลายคนโต้แย้งว่าเอกสารที่แย่ไม่เพียงแต่ทำร้ายนักพัฒนามนุษย์เท่านั้น แต่ยังจำกัดความสามารถของเครื่องมือ AI ในการเข้าใจและช่วยเหลือกับโค้ด Zig ซึ่งอาจขัดขวางการยอมรับในอนาคตเมื่อการพัฒนาที่ช่วยเหลือด้วย AI กลายเป็นเรื่องปกติมากขึ้น
สถานะก่อน 1.0 แบ่งความเห็นเรื่องลำดับความสำคัญ
การที่ทีม Zig มุ่งเน้นการพัฒนาอย่างรวดเร็วมากกว่าเอกสารได้สร้างความแตกแยกทางปรัชญาในชุมชน ผู้สนับสนุนโต้แย้งว่าเอกสารที่ครอบคลุมจะเป็นการสิ้นเปลืองเมื่อพิจารณาจากการเปลี่ยนแปลงที่ทำลายความเข้ากันได้บ่อยครั้งในซอฟต์แวร์ก่อน 1.0 พวกเขาแย้งว่าทรัพยากรควรใช้กับการพัฒนาภาษาหลักมากกว่าการจัดทำเอกสาร APIs ที่อาจเปลี่ยนแปลงอย่างมีนัยสำคัญ
นักวิจารณ์โต้แย้งว่าการเขียนเอกสารทำหน้าที่เป็น rubber-ducking ที่มีค่าซึ่งช่วยระบุข้อบกพร่องในการออกแบบและปัญหาการใช้งาน พวกเขาโต้แย้งว่าหากอินเทอร์เฟซยากต่อการจัดทำเอกสารอย่างชัดเจน มันก็น่าจะยากต่อการใช้งานอย่างถูกต้อง มุมมองนี้แนะนำว่าเอกสารไม่เพียงแต่เป็นประโยชน์สำหรับผู้ใช้เท่านั้น - แต่เป็นส่วนสำคัญของกระบวนการออกแบบด้วย
มุมมองของชุมชนเกี่ยวกับการจัดทำเอกสาร
ข้อโต้แย้งที่สนับสนุนแนวทางปัจจุบัน:
- สถานะก่อน 1.0 เป็นเหตุผลที่ดีสำหรับการมีเอกสารน้อย
- ทรัพยากรควรใช้กับการพัฒนาหลักจะดีกว่า
- การเปลี่ยนแปลงที่ทำลายความเข้ากันได้บ่อยครั้งทำให้การจัดทำเอกสารเป็นการเสียเวลา
- อุปสรรคสูงช่วยให้มั่นใจได้ว่าจะมีผู้ร่วมพัฒนาที่มีคุณภาพ
ข้อโต้แย้งที่สนับสนุนเอกสารที่ดีกว่า:
- เอกสารทำหน้าที่เป็นการตรวจสอบการออกแบบ ("rubber-ducking")
- ปรับปรุงความสามารถในการใช้งานและการยอมรับของ API
- ช่วยให้เครื่องมือ AI สามารถช่วยเหลือนักพัฒนาได้ดีขึ้น
- จำเป็นสำหรับการเติบโตของชุมชนในวงกว้าง
ไทม์ไลน์ของภาษา:
- Zig ปรากฏครั้งแรก: 8 กุมภาพันธ์ 2016 (9 ปีที่แล้ว)
- สถานะปัจจุบัน: ก่อน 1.0 พร้อมการเปลี่ยนแปลงที่ทำลายความเข้ากันได้บ่อยครั้ง
- ทีมพัฒนา: มีขนาดเล็กเมื่อเทียบกับทรัพยากรของ Rust หรือ Go
ผลกระทบที่กว้างขึ้นสำหรับภาษาโปรแกรมมิ่งระบบ
การถกเถียงเรื่องเอกสาร Zig สะท้อนความตึงเครียดที่ใหญ่กว่าในการพัฒนาภาษาโปรแกรมมิ่งระบบ ในขณะที่ Zig วางตำแหน่งตัวเองเป็นทางเลือกสมัยใหม่แทน C ด้วยคุณสมบัติความปลอดภัยที่ดีกว่าและความสามารถในการคอมไพล์ข้าม แต่วิธีการปัจจุบันอาจจำกัดความน่าสนใจสำหรับนักพัฒนาที่แสวงหาทางเลือกที่เข้าถึงได้มากกว่าภาษาที่ซับซ้อนอย่าง C++
ชุมชนยังคงแบ่งแยกเรื่องว่าวิธีการปัจจุบันของ Zig จะเป็นประโยชน์ต่อความสำเร็จระยะยาวของภาษาหรือไม่ บางคนเชื่อว่าการรักษาอุปสรรคสูงในการเข้าสู่ระหว่างการพัฒนาจะรับประกันว่ามีเพียงผู้มีส่วนร่วมที่มุ่งมั่นเท่านั้นที่จะเข้าร่วม ซึ่งอาจนำไปสู่การมีส่วนร่วมที่มีคุณภาพสูงกว่า คนอื่นๆ กังวลว่าวิธีการนี้จะจำกัด Zig ให้อยู่ในกลุ่มผู้ชมเฉพาะและป้องกันไม่ให้บรรลุการยอมรับที่กว้างขึ้นในพื้นที่โปรแกรมมิ่งระบบ
ขณะที่ Zig ดำเนินต่อไปสู่การเปิดตัว 1.0 สมดุลระหว่างความเร็วในการพัฒนาและประสบการณ์ผู้ใช้ยังคงเป็นความท้าทายสำคัญที่น่าจะกำหนดทิศทางอนาคตของภาษาในภูมิทัศน์การโปรแกรมมิ่งระบบที่มีการแข่งขันสูง