16 คะแนน โดย xguru 2024-06-24 | 10 ความคิดเห็น | แชร์ทาง WhatsApp
  • บริษัทแห่งหนึ่ง (ไม่เปิดเผยชื่อ) ที่ให้บริการแก่ผู้ใช้หลายร้อยล้านคน กำลังใช้ C และ C++ ในระบบหลัก
  • ตลอดปี 2023 มีการถกเถียงกันว่าจะเลือกใช้ภาษา Rust หรือ Zig
  • ประเด็นหลักที่ใช้พิจารณา:
    1. การทำงานร่วมกับภาษา C
    2. ความสามารถในการขยายทีมวิศวกร (การจ้างงาน การบำรุงรักษา ฯลฯ)
  • ข้อสรุปสุดท้าย: Zig
  • ผู้เขียนแชร์กระบวนการตัดสินใจนี้ เพราะคิดว่าสะท้อนให้เห็นได้ดีว่า “ปัจจัยที่องค์กรขนาดใหญ่พิจารณา เมื่อโค้ดต้องรันบนเป้าหมายที่หลากหลายและส่งผลกระทบต่อผู้ใช้หลายร้อยล้านคน” คืออะไร

ความสำคัญของการทำงานร่วมกับ C

  • ไลบรารีที่ต้องการเขียนใหม่มีแนวโน้มจะถูกใช้งานบนทุกแพลตฟอร์ม (เว็บ มือถือ ชุดหูฟัง VR เกมคอนโซล เดสก์ท็อป ฯลฯ)
  • ดังนั้น การมี C API และการใช้งานผ่าน FFI จึงเป็นวิธีเดียวที่รับประกันการทำงานได้บนทุกแพลตฟอร์ม

ประเด็นถกเถียงหลัก

Rust

  1. ในตอนนั้นได้รับความนิยมมากกว่า Zig มากกว่า 25 เท่า (อ้างอิงจากแบบสำรวจและซับเรดดิต)
  2. อยู่ในสถานะเสถียรมานานกว่า
  3. การสนับสนุนจากภาคอุตสาหกรรมผ่าน Rust Foundation ดูมั่นคง
  4. มี LSP และประสบการณ์นักพัฒนาที่ยอดเยี่ยม
  5. Cargo: ตัวจัดการแพ็กเกจระดับแนวหน้าของอุตสาหกรรม
  6. ความปลอดภัยของหน่วยความจำและ “ไม่มีพฤติกรรมที่ไม่กำหนดไว้” (แม้จะไม่จริงทั้งหมด แต่ถูกยกขึ้นมาในวงสนทนา)
  7. หากต้องการออกจาก C++ Rust เหมาะกว่าเพราะลดโอกาสเกิดข้อผิดพลาดด้านหน่วยความจำและพฤติกรรมที่ไม่กำหนดไว้
  8. รองรับ SIMD บนเวอร์ชัน nightly
  9. รองรับ WASM ได้ลื่นไหลพอ ๆ กับ Zig
  10. ด้านประสิทธิภาพเทียบชั้น Zig หรือในบางกรณี “เร็วกว่าอย่างเห็นได้ชัด”
การทำงานร่วมกับ C ของ Rust:
  • Rust มี ecosystem ของตัวเองที่อุดมสมบูรณ์ จึงทำให้ความสำคัญของการทำงานร่วมกับ C ลดลงเมื่อเทียบกัน
  • มีศักยภาพที่ดีในการเชื่อมต่อกับภาษาแบบ high-level เช่น Python bindings
  • มีความเห็นว่าข้อดีของการใช้ Rust ชดเชยข้อเสียของการต้องเปิดให้ใช้ C bindings ได้

Zig

  1. นักพัฒนาที่มีพื้นฐาน C/C++ หรือ TypeScript เรียนรู้ได้ง่าย
  2. มอบประสบการณ์การเขียนโค้ดที่สนุกสำหรับนักพัฒนาสาย C
  3. คอมไพเลอร์ของ Zig สามารถคอมไพล์ C และ C++ ได้ด้วย จึงเป็นประโยชน์ต่อการจัดการ dependencies และการสร้างไลบรารีแบบ C ABI
  4. รองรับแพลตฟอร์มเป้าหมายที่หลากหลายได้ง่ายมาก (zig targets ได้รับคำชมมาก)
  5. เขียนซอฟต์แวร์ที่เร็วได้ง่าย (รองรับ Vector แบบเนทีฟ การใช้ SIMD ฯลฯ)
  6. ใช้งานร่วมกับดีบักเกอร์ที่มีอยู่เดิมได้
  7. มีระบบ build ที่ยอดเยี่ยม (ดีกว่า Makefile เดิม 100 เท่า)
  8. Zig Software Foundation มีความโปร่งใสทางการเงินสูง
  9. สามารถค่อย ๆ พอร์ตโค้ด C++ เดิมและ “ทำให้เป็น Zig” ได้
  10. ช่วยแก้ปัญหาเรื่องการลิงก์/คอมไพล์สำหรับทุกแพลตฟอร์มเป้าหมายได้อย่างมั่นใจ

บทสรุป

  • Zig ช่วยลดเวลาและความพยายามที่จำเป็นในการพอร์ตโค้ดเบสเดิม และรับประกันความเข้ากันได้กับทุกแพลตฟอร์มอย่างมาก
  • ปัจจัยตัดสินใจที่เหนือความคาดหมาย:
    1. การเรียนรู้ได้ง่ายและการจ้างงานมีผลมากกว่าที่คาดไว้ (เป็นข้อได้เปรียบของ Zig)
    2. ประสบการณ์นักพัฒนาที่เกี่ยวข้องกับ toolchain มีบทบาทสำคัญ
    3. คอมไพเลอร์และระบบ build ของ Zig ช่วยได้มาก เพราะเข้ากันได้ดีกับโค้ดเบสเดิม
    4. ecosystem ชุมชน และการรับประกันด้าน memory safety ของ Rust มีอิทธิพลน้อยกว่าที่คาด

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

 
qpfjf56 2025-04-30

อ่านบทความสนุกมากครับ! ตอนกำลังหาข้อมูลเกี่ยวกับ node, bun และ deno ก็เห็นว่า bun เขียนด้วยภาษาแปลกใหม่ที่ชื่อว่า zig เลยสงสัยว่ามันเป็นภาษาแบบไหน ขอบคุณที่ทำให้ได้ลองทำความรู้จักแบบพอหอมปากหอมคอครับ!

 
ahwjdekf 2025-01-17

ปัญหาใหญ่อย่างหนึ่งของ zig คือ เวลาคอมไพล์แล้วโค้ดที่ผู้ใช้เขียนมีข้อผิดพลาด มันจะไม่บอกตำแหน่งหรือข้อมูลที่แม่นยำ ดูเหมือนว่าจะบอกได้แค่ถึง standard library เท่านั้น

 
cosine20 2024-07-01

พออ่านประเด็นที่ต้องพิจารณา หัวข้อถกเถียง และข้อสรุปแล้ว ก็รู้สึกว่าแต่แรกมันไม่ใช่สภาพแวดล้อมที่จำเป็นต้องใช้ Rust อยู่แล้วนะครับ เคยเห็นพนักงานส่งอาหารขับรถออฟโรดไปส่งอาหารไหม?
ถึงจะต้องพัฒนาเป็นภาษาเนทีฟก็จริง แต่ถ้าไม่ใช่งานที่วิกฤตเรื่องหน่วยความจำ ก็ควรเลือกฝั่งที่พัฒนาได้สะดวกกว่านั่นแหละ จะเอาเรื่องนี้มาถกกันเป็นปีเลยก็เกินไปหน่อย...

 
[ความคิดเห็นนี้ถูกซ่อน]
 
botplaysdice 2024-06-24

มีผู้ใช้ระดับหลายร้อยล้านคน....

สงสัยจังว่าเป็นบริษัทไหน ดูเหมือนจะเป็นบริษัทที่ไม่ยึดติดกับขั้นตอนที่เป็นพิธีการอย่างการรับรอง... น่าอิจฉา...

 
bus710 2024-06-24

ผมมักจะกลับไปดู Zig ปีละครั้ง แต่ดูเหมือนว่าแทบทุกปีก็จะมี breaking change อยู่เสมอ;;
แถมตัวภาษาเองก็ยังไม่มีไลบรารีสำหรับคิวหรือการส่งข้อความระหว่างเธรดเตรียมไว้ให้ ดังนั้นเมื่อเทียบกับความสุกงอมของ Rust แล้ว ก็ยังดูเหมือนว่าต้องไปอีกไกล
แน่นอนว่าถ้าผู้ใช้เชี่ยวชาญ OS API ต่าง ๆ มากพอ ก็อาจจะไม่ใช่ปัญหาใหญ่อะไร…

 
tested 2024-06-24

แม้ว่า Rust จะได้รับความนิยมมากกว่า Zig ถึงกว่า 25 เท่า แต่ดูเหมือนว่าเรื่องการจ้างงานจะเข้าทาง Zig มากกว่านะ

 
rlcks97 2024-07-01

น่าจะเป็นเพราะข้อ 1 คือผู้พัฒนาที่มีพื้นฐาน C/C++ หรือ TypeScript สามารถเรียนรู้ได้ง่าย

 
daejin 2024-06-24

มอบประสบการณ์การเขียนโค้ดที่สนุกให้กับนักพัฒนาที่มีพื้นฐาน C
เขียนซอฟต์แวร์ได้อย่างรวดเร็วและง่ายดาย (รองรับ Vector แบบเนทีฟ, การใช้ SIMD เป็นต้น)

ให้ความรู้สึกเหมือนตอนที่ได้เรียน Python ครั้งแรก

 
tsboard 2024-06-24

พอเห็นว่า Bun พัฒนาด้วยภาษา Zig ก็เคยสงสัยเหมือนกันว่าทำไมถึงเลือก Zig แต่พอได้อ่านบทความที่เปรียบเทียบกับ Rust ไว้อย่างดีก็เข้าใจเลยครับ ว่าแต่ดูเหมือนว่าภาษา C จะเป็นอมตะจริง ๆ