1 điểm bởi GN⁺ 2025-11-02 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trình biên dịch Haskell GHC giờ đây có thể chạy hoàn toàn phía client ngay trong trình duyệt
  • Thông qua bản demo Haskell Playground được cung cấp, người dùng có thể chạy mã trong trình duyệt mà không cần cài đặt riêng
  • Tính năng này được giới thiệu như một ví dụ cho thấy sự phát triển của backend WebAssembly (WasM) của GHC
  • Trên trình duyệt Brave, trang sẽ tải sau một khoảng dừng ngắn, và nếu việc tạo web worker thất bại thì mã sẽ được chạy trên luồng chính
  • Trên trình duyệt Safari, cùng một cảnh báo xuất hiện nhưng nút Run vẫn bị vô hiệu hóa

Demo GHC chạy trong trình duyệt

  • GHC chạy phía client trong trình duyệt, có thể biên dịch và thực thi mã Haskell mà không phụ thuộc vào máy chủ
    • Tác giả đã công bố điều này dưới dạng bản demo Haskell Playground
    • Phần giải thích chi tiết sẽ được cung cấp riêng sau
  • Bản trình diễn này được nhắc đến như một ví dụ cho thấy mức độ phát triển của backend WebAssembly của GHC

Báo cáo hoạt động theo từng trình duyệt

  • Trên trình duyệt Brave, ban đầu sẽ không phản hồi trong vài giây rồi mới tải xong
    • Hiển thị thông báo “không thể tạo web worker”, và thay vào đó thực thi mã trên luồng chính
    • Điều này có thể gây ra hiện tượng treo giao diện
  • Trên trình duyệt Safari cũng xuất hiện cùng thông báo đó, nhưng nút Run bị vô hiệu hóa nên không thể chạy mã
  • Thông báo bao gồm cảnh báo liên quan đến Monaco Editor, đồng thời đề cập đến việc cần định nghĩa MonacoEnvironment.getWorkerUrl hoặc getWorker

Ý nghĩa kỹ thuật

  • Việc GHC chạy trực tiếp trong trình duyệt dựa trên WebAssembly là một thay đổi giúp tăng khả năng tiếp cận của môi trường phát triển Haskell
  • Điểm tiến bộ cốt lõi là trình biên dịch giờ đây có thể hoạt động trong môi trường thuần client mà không cần máy chủ
  • Bài gốc không bao gồm thêm chi tiết kỹ thuật hoặc so sánh hiệu năng

1 bình luận

 
GN⁺ 2025-11-02
Ý kiến Hacker News
  • Tiêu đề thực tế là “GHC now runs in your browser”

  • Nhờ QEMU-WASM, giờ lại tự hỏi còn gì là không chạy được trong trình duyệt nữa Đây không phải lời chê, tôi thực sự nghĩ những thử nghiệm như thế này rất hay vì giúp mọi người dễ dàng học ngôn ngữ mới hơn

    • Giả thuyết của tôi là cách này có thể sẽ khá nhanh. Rất đáng để tự thử nghiệm
  • Điều đáng tiếc là vẫn chưa có cách bootstrap hoàn toàn Haskell (hoặc các ngôn ngữ dựa trên nó) Vì vậy tôi cảm thấy khó dùng Haskell trong các bản phân phối Linux đòi hỏi độ tin cậy cao Chạy trong sandbox của trình duyệt là một giải pháp tạm thời để giảm rủi ro, nhưng nếu không thể bootstrap từ mã nguồn thì khó mà tin tưởng ngôn ngữ này

    • Điều bạn đang nói tới là “GHC Haskell”. Đó là triển khai chủ đạo nên tôi nghĩ sớm muộn gì cũng sẽ được giải quyết Nhưng ngay cả khi không có GHC, bạn vẫn có thể làm được khá nhiều với Haskell. Ví dụ, MicroHs đang ngày càng mạnh hơn, và tôi nghĩ khả năng bootstrap của nó là rất cao
    • Trong chuỗi thảo luận này, mọi người cũng đang cố tái hiện lại quy trình build cũ để bootstrap GHC
    • Tôi nghĩ kết hợp Hugs cũ với MicroHs mới là đủ khả thi. Chỉ là không biết cộng đồng có quan tâm đến mức đó hay không
    • Tôi tò mò vì sao khả năng bootstrap của một ngôn ngữ lại quan trọng đến thế. Tôi cứ nghĩ chỉ cần xem độ ổn định, mức độ phổ biến và độ trưởng thành của toolchain là đủ
    • Tôi cũng thắc mắc GHC được biên dịch thế nào khi không có bootstrap. Có phải trong cây mã nguồn có chứa các binary không thể tái tạo không? Tôi đã build GHC nhiều lần và chưa gặp vấn đề gì
  • Tôi nhớ trước đây từng chạy một trình thông dịch Haskell trên HP Jornada với Jlime Linux Lúc học toán, việc nhập công thức rất tiện nên tốt hơn máy tính cầm tay rất nhiều Nó chạy từ thẻ CF nên chắc không lớn bằng GHC, nhưng tôi không nhớ tên

  • Thật sự rất ấn tượng. Trước đây tôi từng làm một website giáo dục toán và nghệ thuật (mathvas.com) bằng Haskell, và nếu có công cụ như thế này thì mọi thứ hẳn đã dễ hơn rất nhiều

    • Trên Safari(iPhone), không thể dán vào trình soạn thảo
  • Đúng vậy. Bạn cũng có thể xem các dự án liên quan tại haskell-miso

  • Để giải thích cho những ai chưa quen với Haskell, GHCtrình biên dịch chủ đạo kiêm môi trường tương tác của Haskell

    • GHC (Glasgow Haskell Compiler) trên thực tế là triển khai tiêu chuẩn và cũng là công cụ trung tâm cho nghiên cứu ngôn ngữ Nhưng vì các thay đổi tính năng diễn ra quá thường xuyên và phong cách ổn định không thực sự hình thành, cuối cùng tôi đã chuyển sang Standard ML (Khi đó đang là thời kỳ có rất nhiều thay đổi xoay quanh type families)
  • Tôi tò mò không biết dự án này có dùng WasmGC hay là tự tích hợp garbage collector riêng

    • WasmGC không hợp lắm với lazy evaluation. Các giá trị lười của Haskell luôn tồn tại dưới dạng closure trên heap Chúng chỉ được tính toán khi cần, và để tránh gọi lặp lại thì sẽ bị thay bằng black hole Nhưng WasmGC có kiểu tĩnh, nên khó hỗ trợ kiểu cấu trúc động như vậy Có thể giải quyết bằng tham chiếu gián tiếp hoặc defunctionalization, nhưng chi phí hiệu năng khá lớn Ngoài ra Haskell còn hỗ trợ finalizer, nên WasmGC cũng phải xử lý được điều đó
    • WasmGC hiện vẫn mới ở mức 1.0 nên chưa hỗ trợ đầy đủ ngữ nghĩa GC mà các ngôn ngữ như C# hoặc Go cần. Ví dụ, nó chưa xử lý được interior pointer
  • Tôi muốn biết sự khác biệt giữa tính năng này và các công nghệ như Blazor Wasm là gì. Có vẻ cả hai đều cho phép viết frontend mà không cần JS

  • Tôi đang tìm một hướng dẫn Haskell thực dụng dành cho người đã biết lập trình hàm Tôi hiểu các khái niệm monad, typeclass và HKT, nhưng vẫn không viết nổi ngay cả một ứng dụng ToDo

    • Hướng dẫn và cookbook này khá ổn. Ngoài ra joyful.com/Haskell+map cũng đáng tham khảo. Hoặc đơn giản là đọc trực tiếp mã nguồn, rồi khi bí thì nhờ cộng đồng giúp đỡ
    • Hầu như không có nhiều tài liệu dành cho đúng cấp độ này. Thay vào đó, loạt bài trên blog Monday Morning Haskell có khá nhiều ví dụ thực tế Chẳng hạn có thể tham khảo bài viết này
    • Bạn có thể thử làm game Snake theo từng bước hoặc xem ví dụ snake-fury Hoặc làm một webapp nhỏ như trong hướng dẫn này
    • Nhờ ChatGPT hoặc Claude giải thích theo đúng mức độ hiểu của bạn cũng là một cách hiệu quả
    • Có ai hỏi liệu bạn đã thử Real World Haskell chưa