ภาษาโปรแกรมใหม่ที่ชื่อ Nature ได้เกิดขึ้นมา โดยนำเสนอตัวเองเป็นทางเลือกที่ได้แรงบันดาลใจจาก Go และมุ่งหวังที่จะแก้ไขข้อจำกัดบางประการของ Go ขณะเดียวกันก็รักษาจุดแข็งของมันไว้ ภาษานี้ได้พัฒนาไปถึงเวอร์ชันที่ใช้งานได้ในระยะเริ่มต้นพร้อมกับ APIs ที่มีไวยากรณ์ที่เสถียร แต่การอ้างสิทธิ์ทางการตลาดของมันได้จุดประกายการถกเถียงอย่างมากในชุมชนเกี่ยวกับสิ่งที่ถือเป็นภาษาโปรแกรมสำหรับ systems programming อย่างแท้จริง
Nature ถูกสร้างขึ้นโดยนักพัฒนาที่ใช้ Go ทุกวัน แต่รู้สึกหงุดหงิดกับไวยากรณ์ที่เรียบง่ายเกินไป ระบบ type ที่ไม่เพียงพอ และการจัดการข้อผิดพลาดที่ยุ่งยาก ภาษานี้ได้รวมเอาคุณสมบัติที่ประสบความสำเร็จหลายอย่างของ Go มาไว้ รวมถึง goroutines, garbage collection, channels และความสามารถในการ cross-compilation พร้อมกับเพิ่มการปรับปรุงต่างๆ เช่น union types, generics, pattern matching และการจัดการข้อผิดพลาดแบบ try/catch
ข้อปรับปรุงของภาษาเมื่อเทียบกับ Go:
- Union types และระบบ type ที่ครอบคลุม
- รองรับ Generics ตั้งแต่เริ่มต้น
- การจัดการข้อผิดพลาดแบบ Try/catch แทนการตรวจสอบข้อผิดพลาดแบบชัดเจน
- Pattern matching ด้วยคีย์เวิร์ด
match
- ความปลอดภัยจากค่า null ด้วย nullable types (
string?
) - การทำงานร่วมกับ C ที่ดีกว่า
ความขัดแย้งเรื่องภาษาโปรแกรมสำหรับ Systems Programming
การถกเถียงที่รุนแรงที่สุดมุ่งเน้นไปที่การจัดประเภท Nature เป็นภาษาโปรแกรมสำหรับ systems programming แม้ว่าจะใช้ garbage collection สมาชิกในชุมชนได้แสดงความกังวลว่าคำศัพท์นี้ถูกใช้อย่างหลวมๆ เกินไป ซึ่งอาจทำให้ความหมายของคำนี้เสื่อมลง นักวิจารณ์โต้แย้งว่าภาษาใดๆ ที่มี garbage collection ไม่สามารถถือว่าเหมาะสมสำหรับ systems programming อย่างแท้จริง โดยเฉพาะสำหรับ kernel ของระบบปฏิบัติการที่การหยุด stop-the-world อาจเป็นปัญหา
ใครจะใช้ระบบปฏิบัติการที่หยุดทั้งโลกอย่างกะทันหันเพราะ runtime ของภาษาสุ่มๆ ต้องการเก็บขยะหน่วยความจำ?
ผู้เขียน Nature ได้รับทราบความกังวลเหล่านี้และตกลงที่จะปรับเนื้อหาการตลาดของภาษา อย่างไรก็ตาม พวกเขาปกป้องการใช้งานภาษาที่มี garbage collection ในบริบทของระบบบางอย่างอย่างเป็นประโยชน์ โดยอ้างถึงประสบการณ์ของตนเองในการใช้ Go สำหรับอุปกรณ์ IoT เช่น routers และ TV boxes ที่ทำงานบนสถาปัตยกรรมต่างๆ รวมถึง RISC-V, MIPS และ ARM variants
สถาปัตยกรรมทางเทคนิคและการอ้างเรื่องประสิทธิภาพ
Nature แยกตัวเองออกมาด้วยการหลีกเลี่ยงการพึ่งพา LLVM แต่คอมไพล์ตรงไปยัง machine code ของแพลตฟอร์มเป้าหมาย ตัวเลือกการออกแบบนี้สัญญาว่าจะให้ความเร็วในการคอมไพล์ที่เร็วขึ้นและการจัดการข้อผิดพลาดที่ปรับแต่งได้มากขึ้น โดยเดินตามเส้นทางที่คล้ายกับ Zig ภาษานี้ปัจจุบันรองรับ Linux และ macOS บนสถาปัตยกรรม AMD64 และ ARM64 ทั้งคู่ พร้อมแผนการเพิ่มการรองรับ WebAssembly และ RISC-V
runtime ได้รวมคุณสมบัติที่เน้นประสิทธิภาพหลายอย่างที่ยืมมาจากสถาปัตยกรรมที่พิสูจน์แล้วของ Go รวมถึง garbage collector ประสิทธิภาพสูงที่มีเวลา stop-the-world สั้น, memory allocator ที่คล้ายกับ tcmalloc ของ Google และการรองรับการสลับ coroutine หลายล้านครั้งต่อวินาที ภาษานี้ยังรวม libuv ในตัวสำหรับจัดการ IO event loops และเป็นไปตามแบบแผน system ABI เพื่อการรวม C library โดยตรง
คุณสมบัติทางเทคนิคที่สำคัญ:
- ไม่ต้องพึ่งพา LLVM - คอมไพล์ตรงไปยังโค้ดเครื่องได้โดยตรง
- ตัวเก็บขยะประสิทธิภาพสูงที่มีเวลา STW สั้น
- ตัวจัดสรรหน่วยความจำที่คล้ายกับ tcmalloc ของ Google
- มี libuv ในตัวสำหรับลูปเหตุการณ์ IO
- รองรับการสลับ coroutine หลายล้านครั้งต่อวินาที
- รองรับการคอมไพล์ข้ามแพลตฟอร์มและการลิงก์แบบสแตติก
การออกแบบภาษาและการพัฒนาในอนาคต
ไวยากรณ์ของ Nature แตกต่างจาก Go ขณะที่รักษาแนวคิดที่คุ้นเคยไว้ ภาษานี้รองรับ nullable types ด้วยไวยากรณ์เครื่องหมายคำถาม, tuple types และมุ่งหวังที่จะให้การทำงานร่วมกับ C ที่ดีกว่า Go น่าสังเกตว่าภาษานี้ปัจจุบันใช้การเข้ารหัส ASCII สำหรับ strings แทนที่จะเป็น UTF-8 ซึ่งได้รับการวิจารณ์จากนักพัฒนาที่ถือว่าการรองรับ Unicode เป็นสิ่งจำเป็นสำหรับภาษาโปรแกรมสมัยใหม่
ผู้เขียนยอมรับว่าตนมีประสบการณ์ค่อนข้างน้อยในการออกแบบภาษาโปรแกรมและได้รับฟังความคิดเห็นจากชุมชนอย่างเปิดใจ แผนการรวมถึงการเพิ่มการรองรับ enum, การปรับปรุงการจัดการ Unicode และอาจเปลี่ยนชื่อภาษาเนื่องจากความกังวลเรื่อง search engine optimization โครงการนี้ยังเผชิญกับความท้าทายในทางปฏิบัติ เช่น การใช้งาน macOS cross-platform linker เพื่อให้สามารถรองรับการ cross-compilation อย่างเต็มรูปแบบ
แม้ว่า Nature จะแสดงให้เห็นความมีแนวโน้มในฐานะทางเลือกของ Go ที่มีคุณสมบัติที่ปรับปรุงแล้ว แต่ระยะเริ่มต้นและการถกเถียงที่กำลังดำเนินอยู่เกี่ยวกับการวางตำแหน่งแสดงให้เห็นว่ามันจะต้องใช้เวลาในการพัฒนาก่อนที่จะได้รับการยอมรับในวงกว้าง การถกเถียงในชุมชนเน้นย้ำถึงวิวัฒนาการที่กำลังดำเนินอยู่ของหมวดหมู่ภาษาโปรแกรมและความท้าทายที่ภาษาใหม่ๆ เผชิญในการพยายามสร้างช่องทางของตนเองในสนามที่มีการแข่งขันหนาแน่นมากขึ้น
อ้างอิง: Nature Programming Language