- คอมไพเลอร์ Haskell GHC สามารถ ทำงานได้ทั้งหมดฝั่งไคลเอนต์ภายในเบราว์เซอร์ แล้วในตอนนี้
- ผ่าน เดโม Haskell Playground ที่ให้มา ผู้ใช้สามารถรันโค้ดในเบราว์เซอร์ได้โดยไม่ต้องติดตั้งเพิ่มเติม
- ความสามารถนี้ถูกนำเสนอในฐานะตัวอย่างที่แสดงให้เห็นถึง ความก้าวหน้าของแบ็กเอนด์ WebAssembly (WasM) ของ GHC
- ใน เบราว์เซอร์ Brave จะโหลดได้หลังจากค้างชั่วครู่ และเมื่อการสร้างเว็บเวิร์กเกอร์ล้มเหลว โค้ดจะถูกรันบนเมนเธรดแทน
- ใน เบราว์เซอร์ Safari จะแสดงข้อความเตือนเดียวกัน แต่ ปุ่ม Run ยังคงถูกปิดใช้งาน
เดโม GHC ที่ทำงานในเบราว์เซอร์
- GHC ทำงานฝั่งไคลเอนต์ภายในเบราว์เซอร์ และสามารถคอมไพล์กับรันโค้ด Haskell ได้โดยไม่ต้องพึ่งพาเซิร์ฟเวอร์
- ผู้เขียนเผยแพร่สิ่งนี้ในรูปแบบ เดโม Haskell Playground
- รายละเอียดเพิ่มเติมจะมีการเผยแพร่แยกภายหลัง
- การสาธิตนี้ถูกกล่าวถึงว่าเป็นตัวอย่างที่แสดง ระดับความก้าวหน้าของแบ็กเอนด์ WebAssembly ของ GHC
รายงานการทำงานตามเบราว์เซอร์
- ใน เบราว์เซอร์ Brave ช่วงแรกจะไม่ตอบสนองอยู่ไม่กี่วินาทีก่อนโหลดเสร็จ
- มีข้อความแสดงว่า “ไม่สามารถสร้างเว็บเวิร์กเกอร์ได้” และเปลี่ยนไป รันโค้ดบนเมนเธรด แทน
- ส่งผลให้ UI อาจค้าง ได้
- ใน เบราว์เซอร์ Safari ก็แสดงข้อความเดียวกัน แต่ ปุ่ม Run ถูกปิดใช้งาน ทำให้ไม่สามารถรันโค้ดได้
- ในข้อความมีคำเตือนเกี่ยวกับ Monaco Editor รวมอยู่ด้วย และกล่าวถึงความจำเป็นในการกำหนด
MonacoEnvironment.getWorkerUrl หรือ getWorker
นัยสำคัญทางเทคนิค
- การที่ GHC ทำงานได้โดยตรงในเบราว์เซอร์บนพื้นฐานของ WebAssembly ถือเป็นการเปลี่ยนแปลงที่ช่วยเพิ่มการเข้าถึงสภาพแวดล้อมการพัฒนา Haskell
- ประเด็นความก้าวหน้าหลักคือการทำให้ คอมไพเลอร์ทำงานได้ในสภาพแวดล้อมฝั่งไคลเอนต์ล้วนโดยไม่มีเซิร์ฟเวอร์
- ต้นฉบับไม่ได้มีรายละเอียดเชิงเทคนิคเพิ่มเติมหรือการเปรียบเทียบประสิทธิภาพ
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
ชื่อจริงคือ “GHC now runs in your browser”
ต้องยกความดีให้ QEMU-WASM จนตอนนี้เริ่มสงสัยว่า ยังมีอะไรบ้างที่รันบนเบราว์เซอร์ไม่ได้
ไม่ได้จะวิจารณ์นะ ผมคิดว่าความพยายามแบบนี้ที่ช่วยให้ลองเรียนรู้ภาษาใหม่ได้ง่ายขึ้นเป็นเรื่องที่ดีมาก
น่าเสียดายที่ยังไม่มีวิธี บูตสแตรป Haskell (หรือภาษาที่อิงกับมัน) ได้อย่างสมบูรณ์
เลยรู้สึกว่าใน Linux distro ที่ต้องการความน่าเชื่อถือสูงจะใช้งาน Haskell ได้ยาก
การรันใน browser sandbox เป็นวิธีลดความเสี่ยงชั่วคราว แต่ถ้ายังบูตสแตรปจากซอร์สไม่ได้ ก็ยากจะเชื่อถือภาษานี้ได้
แต่ถึงไม่มี GHC ก็ยังทำอะไรกับ Haskell ได้เยอะ เช่น MicroHs ก็กำลังเก่งขึ้นเรื่อย ๆ และผมคิดว่ามี ศักยภาพในการบูตสแตรป สูง
เมื่อก่อนผมเคยรัน Haskell interpreter บน HP Jornada ผ่าน Jlime Linux
ตอนเรียนคณิตศาสตร์มันสะดวกมากสำหรับพิมพ์สมการ เลย ดีกว่าเครื่องคิดเลขวิศวกรรมเยอะมาก
มันรันจาก CF card ด้วย เลยคงไม่ได้ใหญ่เท่า GHC แต่จำชื่อไม่ได้แล้ว
น่าประทับใจมาก ผมเคยทำ เว็บไซต์เพื่อการศึกษาคณิตศาสตร์และศิลปะ (mathvas.com) ด้วย Haskell มาก่อน ถ้ามีเครื่องมือแบบนี้ในตอนนั้นคงง่ายขึ้นมาก
ใช่เลย โปรเจ็กต์ที่เกี่ยวข้องดูได้ที่ haskell-miso
สำหรับคนที่ไม่คุ้นกับ Haskell ขออธิบายว่า GHC คือ คอมไพเลอร์หลักและสภาพแวดล้อมโต้ตอบ ของ Haskell
แต่การเปลี่ยนฟีเจอร์เกิดขึ้นบ่อยเกินไป และ รูปแบบการเขียนที่เสถียร ก็ยังไม่ตกผลึก เลยสุดท้ายผมย้ายไปใช้ Standard ML
(ตอนนั้นเป็นช่วงที่การเปลี่ยนแปลงเกี่ยวกับ type families กำลังคึกคัก)
ผมสงสัยว่าโปรเจ็กต์นี้ ใช้ WasmGC หรือว่าใส่ garbage collector ของตัวเองมาด้วย
มันจะคำนวณเมื่อจำเป็นเท่านั้น และเพื่อป้องกันการเรียกซ้ำซ้อนก็จะถูกแทนด้วย black hole
แต่ WasmGC มีชนิดข้อมูลแบบตายตัว เลยรองรับโครงสร้างไดนามิกแบบนี้ได้ยาก
แม้จะแก้ด้วย indirect reference หรือ defunctionalization ได้ แต่ก็มี ต้นทุนด้านประสิทธิภาพ สูง
แถม Haskell ยังรองรับ finalizer ด้วย ดังนั้น WasmGC ก็ต้องจัดการส่วนนี้ให้ได้
ผมอยากรู้ว่าฟีเจอร์นี้ต่างจากเทคโนโลยีอย่าง Blazor Wasm ตรงไหน เพราะดูเหมือนทั้งคู่จะช่วยให้เขียนฟรอนต์เอนด์โดยไม่ต้องใช้ JS ได้
ผมกำลังมองหา Haskell tutorial เชิงปฏิบัติ สำหรับคนที่รู้ functional programming อยู่แล้ว
ผมเข้าใจแนวคิดเรื่อง monad, typeclass, HKT แต่พอจะทำแอป ToDo จริง ๆ กลับทำไม่ได้แม้แต่ตัวเดียว
หรือไม่ก็ อ่านโค้ดจริงไปเลย แล้วถ้าติดตรงไหนค่อยไปขอความช่วยเหลือจากคอมมูนิตี้
เช่น บทความนี้ ก็น่าอ่าน
หรือจะลองทำเว็บแอปเล็ก ๆ ตาม tutorial นี้ ก็ดี