1 คะแนน โดย GN⁺ 2025-11-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • คอมไพเลอร์ 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 ความคิดเห็น

 
GN⁺ 2025-11-02
ความคิดเห็นใน Hacker News
  • ชื่อจริงคือ “GHC now runs in your browser”

  • ต้องยกความดีให้ QEMU-WASM จนตอนนี้เริ่มสงสัยว่า ยังมีอะไรบ้างที่รันบนเบราว์เซอร์ไม่ได้
    ไม่ได้จะวิจารณ์นะ ผมคิดว่าความพยายามแบบนี้ที่ช่วยให้ลองเรียนรู้ภาษาใหม่ได้ง่ายขึ้นเป็นเรื่องที่ดีมาก

    • ผมเดาเอาว่าวิธีนี้น่าจะ ค่อนข้างเร็ว เลย น่าลองทดสอบดูเอง
  • น่าเสียดายที่ยังไม่มีวิธี บูตสแตรป Haskell (หรือภาษาที่อิงกับมัน) ได้อย่างสมบูรณ์
    เลยรู้สึกว่าใน Linux distro ที่ต้องการความน่าเชื่อถือสูงจะใช้งาน Haskell ได้ยาก
    การรันใน browser sandbox เป็นวิธีลดความเสี่ยงชั่วคราว แต่ถ้ายังบูตสแตรปจากซอร์สไม่ได้ ก็ยากจะเชื่อถือภาษานี้ได้

    • สิ่งที่คุณพูดถึงคือ “GHC Haskell” ต่างหาก มันเป็น implementation กระแสหลัก เลยคิดว่าสุดท้ายคงแก้ได้
      แต่ถึงไม่มี GHC ก็ยังทำอะไรกับ Haskell ได้เยอะ เช่น MicroHs ก็กำลังเก่งขึ้นเรื่อย ๆ และผมคิดว่ามี ศักยภาพในการบูตสแตรป สูง
    • ในเธรดนี้ก็มีคนพยายามทำขั้นตอน build แบบในอดีตขึ้นมาใหม่เพื่อบูตสแตรป GHC
    • ถ้าเอา Hugs รุ่นเก่ามาผสมกับ MicroHs รุ่นใหม่ ผมว่าเป็นไปได้มากพอสมควร แค่ไม่แน่ใจว่าคอมมูนิตี้จะ สนใจมากพอไหม
    • ผมสงสัยว่าทำไมความสามารถในการบูตสแตรปของภาษาถึงสำคัญขนาดนั้น เดิมผมคิดว่าดูแค่ความเสถียร ความนิยม และความสุกงอมของ toolchain ก็พอ
    • ผมสงสัยว่า GHC คอมไพล์ได้อย่างไรถ้าไม่มีการบูตสแตรป หรือว่าใน tree มี ไบนารีที่ทำซ้ำเพื่อพิสูจน์ไม่ได้ รวมอยู่ด้วย? ผม build GHC มาหลายครั้งแล้วและไม่เคยมีปัญหา
  • เมื่อก่อนผมเคยรัน Haskell interpreter บน HP Jornada ผ่าน Jlime Linux
    ตอนเรียนคณิตศาสตร์มันสะดวกมากสำหรับพิมพ์สมการ เลย ดีกว่าเครื่องคิดเลขวิศวกรรมเยอะมาก
    มันรันจาก CF card ด้วย เลยคงไม่ได้ใหญ่เท่า GHC แต่จำชื่อไม่ได้แล้ว

    • น่าจะเป็น Hugs
  • น่าประทับใจมาก ผมเคยทำ เว็บไซต์เพื่อการศึกษาคณิตศาสตร์และศิลปะ (mathvas.com) ด้วย Haskell มาก่อน ถ้ามีเครื่องมือแบบนี้ในตอนนั้นคงง่ายขึ้นมาก

    • บน Safari(iPhone) วางข้อความ ลงใน editor ไม่ได้
  • ใช่เลย โปรเจ็กต์ที่เกี่ยวข้องดูได้ที่ haskell-miso

  • สำหรับคนที่ไม่คุ้นกับ Haskell ขออธิบายว่า GHC คือ คอมไพเลอร์หลักและสภาพแวดล้อมโต้ตอบ ของ Haskell

    • GHC (Glasgow Haskell Compiler) เป็น implementation มาตรฐานโดยพฤตินัย และเป็นเครื่องมือศูนย์กลางของงานวิจัยด้านภาษา
      แต่การเปลี่ยนฟีเจอร์เกิดขึ้นบ่อยเกินไป และ รูปแบบการเขียนที่เสถียร ก็ยังไม่ตกผลึก เลยสุดท้ายผมย้ายไปใช้ Standard ML
      (ตอนนั้นเป็นช่วงที่การเปลี่ยนแปลงเกี่ยวกับ type families กำลังคึกคัก)
  • ผมสงสัยว่าโปรเจ็กต์นี้ ใช้ WasmGC หรือว่าใส่ garbage collector ของตัวเองมาด้วย

    • WasmGC เข้ากับ lazy evaluation ได้ไม่ดี ค่าของ Haskell แบบ lazy จะอยู่ในรูป closure บน heap เสมอ
      มันจะคำนวณเมื่อจำเป็นเท่านั้น และเพื่อป้องกันการเรียกซ้ำซ้อนก็จะถูกแทนด้วย black hole
      แต่ WasmGC มีชนิดข้อมูลแบบตายตัว เลยรองรับโครงสร้างไดนามิกแบบนี้ได้ยาก
      แม้จะแก้ด้วย indirect reference หรือ defunctionalization ได้ แต่ก็มี ต้นทุนด้านประสิทธิภาพ สูง
      แถม Haskell ยังรองรับ finalizer ด้วย ดังนั้น WasmGC ก็ต้องจัดการส่วนนี้ให้ได้
    • WasmGC ยังอยู่ในระดับ 1.0 เลยยังไม่รองรับ semantics ของ GC ที่ภาษาพวก C# หรือ Go ต้องการทั้งหมด เช่นยังจัดการ interior pointer ไม่ได้
  • ผมอยากรู้ว่าฟีเจอร์นี้ต่างจากเทคโนโลยีอย่าง Blazor Wasm ตรงไหน เพราะดูเหมือนทั้งคู่จะช่วยให้เขียนฟรอนต์เอนด์โดยไม่ต้องใช้ JS ได้

  • ผมกำลังมองหา Haskell tutorial เชิงปฏิบัติ สำหรับคนที่รู้ functional programming อยู่แล้ว
    ผมเข้าใจแนวคิดเรื่อง monad, typeclass, HKT แต่พอจะทำแอป ToDo จริง ๆ กลับทำไม่ได้แม้แต่ตัวเดียว

    • tutorial และ cookbook นี้ใช้ได้ดีเลย แล้ว joyful.com/Haskell+map ก็พออ้างอิงได้เหมือนกัน
      หรือไม่ก็ อ่านโค้ดจริงไปเลย แล้วถ้าติดตรงไหนค่อยไปขอความช่วยเหลือจากคอมมูนิตี้
    • แทบไม่มีสื่อสำหรับคนระดับนี้โดยตรง แต่ซีรีส์บล็อก Monday Morning Haskell มีตัวอย่างเชิงปฏิบัติ
      เช่น บทความนี้ ก็น่าอ่าน
    • ลองทำเกม Snake แบบทีละขั้น หรือดูตัวอย่าง snake-fury ก็ได้
      หรือจะลองทำเว็บแอปเล็ก ๆ ตาม tutorial นี้ ก็ดี
    • การขอให้ ChatGPT หรือ Claude อธิบายตามระดับความเข้าใจของคุณ ก็ได้ผลเหมือนกัน
    • มีคนถามว่าคุณเคยลอง Real World Haskell หรือยัง