WAH: อินเทอร์พรีเตอร์ WebAssembly ที่สร้างด้วยไฟล์เฮดเดอร์เพียงไฟล์เดียว
(github.com/lifthrasiir)ไม่ได้ทำไลบรารี C มาพักใหญ่แล้วครับ/ค่ะ คราวนี้เลยลองทำขึ้นมาอีกตัว ซึ่งตามตัวอักษรเลยคือเป็นอินเทอร์พรีเตอร์ WebAssembly ที่ทุกอย่างรวมอยู่ในไฟล์เฮดเดอร์ C เพียงไฟล์เดียว แน่นอนว่าไม่ได้มีแค่อินเทอร์พรีเตอร์เปล่า ๆ เท่านั้น แต่ยังมีอีกหลายอย่างดังนี้
- รองรับสเปก WebAssembly 3.0 ครบ 100% รวมถึงพวก GC และฟีเจอร์อื่น ๆ ด้วย
- ใน WebAssembly มีตัวเลือกที่เรียกว่า deterministic profile ซึ่งทำให้ได้ผลลัพธ์เหมือนกันในทุกสภาพแวดล้อม และตัวเลือกนี้ก็ถูกนำมาใช้งานด้วย ดังนั้นจึงมีประโยชน์สำหรับการให้ผลลัพธ์ที่ทำซ้ำได้
- มีการปรับแต่งประสิทธิภาพเฉพาะสถาปัตยกรรมสำหรับ x86-64 และ AArch64 NEON
- มีฟังก์ชันที่จำเป็นสำหรับการทำ sandbox ให้กับโค้ดที่ไม่น่าเชื่อถือ รองรับทั้ง fuel metering ที่เผา fuel ไปตามการรันคำสั่งและหยุดเมื่อ fuel หมด การขัดจังหวะการรันหลังเวลาที่กำหนด และการควบคุมการใช้หน่วยความจำ
- API ถูกออกแบบให้สามารถกลับมารันต่อได้แม้จะหยุดระหว่างการทำงานด้วยเหตุผลเหล่านี้
- สามารถสร้างโมดูล WebAssembly ด้วยโค้ดล้วน ๆ หรือเชื่อมหลายโมดูลเข้ากับโมดูลเดียวได้
- สามารถจำกัดฟีเจอร์ได้ทั้งตอนคอมไพล์ (ทำให้โค้ดที่ถูกคอมไพล์มีขนาดเล็กลง) และตอนรันไทม์
- ถูกออกแบบโดยมีเป้าหมายให้ ABI คงที่ตั้งแต่แรก โครงสร้างข้อมูลสามารถจัดสรรบน C stack ได้ แต่มีการตรึงเลย์เอาต์ไว้ล่วงหน้าเพื่อไม่ให้ ABI พังแม้เวอร์ชันจะเพิ่มขึ้น
- นอกจากนี้ยังมีการทดสอบจำนวนมากเกินพอ และทำ fuzz testing อย่างจริงจังด้วย (จริง ๆ แล้วตอนนี้ fuzzer ก็ยังรันอยู่...)
เดิมทีตั้งใจให้มันเป็นส่วนหนึ่งของอีกโปรเจกต์หนึ่ง เลยไม่ได้คิดว่าจะทำจริงจังขนาดนี้ แต่พอจะรันทดสอบของ reference implementation ของ WebAssembly (ที่เรียกว่า spectest) ก็จำเป็นต้องทำให้ครบทั้งหมดอยู่ดี... สุดท้ายเลยกลายเป็นรองรับครบ 100% ไปโดยปริยาย ได้ยังไงกันนะถึงกลายมาเป็นแบบนี้
ตามกระแสช่วงนี้ โค้ดในช่วงแรกเขียนด้วย Gemini CLI ส่วนช่วงกลางหลังจากนั้นใช้ Claude Code และบางครั้งก็ใช้ Codex และในด้านการวางแผนนั้นใช้ Codex เป็นหลัก สำหรับผม/ดิฉันแล้ว นี่ก็เป็นโปรเจกต์ที่พิสูจน์ได้เหมือนกันว่า coding agent ถ้าคุมทิศทางดี ๆ ก็สามารถทำงาน system programming แบบฮาร์ดคอร์ได้ค่อนข้างดี ผม/ดิฉันยังอยากให้มันเป็นตัวอย่างโต้แย้งต่อความเห็นที่ว่าการ vibe coding อาจได้ของที่ดูเหมือนใช้ได้ แต่รายละเอียดภายในกลับเละเทะด้วย
2 ความคิดเห็น
ดูเหมือนว่าถ้าสเปกที่ใช้ทดสอบชัดเจน แนวทางที่วางเวิร์กโฟลว์ด้วยโค้ดดิ้งเอเจนต์แล้วค่อย ๆ ปรับให้ลู่เข้าหากันจะได้ผลดีนะครับ/ค่ะ ทำให้นึกถึงกรณีอย่าง vinext กับ pretext เหมือนกัน
อีกเรื่องหนึ่ง ไม่ทราบว่าช่วยตรวจสอบการเสิร์ฟ CSS ของ journal ให้หน่อยได้ไหมครับ/คะ...? แม้เวลาจะผ่านมาพอสมควรแล้ว แต่ก็ยังมีบทความดี ๆ หลายชิ้นที่อยากแนะนำให้คนรอบตัวอ่าน พอเข้าใช้งานผ่านเดสก์ท็อปแล้ว CSS กลับไม่โหลดครับ/ค่ะ ฮือๆ
เซิร์ฟเวอร์ที่ใช้เสิร์ฟ css เสียแล้ว T_T ต้องขออภัยด้วย แต่ในช่วงนี้รบกวนใช้ Wayback Machine ไปก่อน...