1 ポイント 投稿者 GN⁺ 2025-11-02 | 1件のコメント | WhatsAppで共有
  • Haskellコンパイラ GHC が、ブラウザ内で 完全にクライアントサイド実行 できるようになった
  • 提供された Haskell Playgroundデモ により、ユーザーは別途インストールなしでブラウザ上でコードを実行できる
  • この機能は、GHCのWebAssembly(WasM)バックエンドの進展 を示す事例として紹介されている
  • Braveブラウザ では、しばらく停止した後に読み込まれ、Web Workerの生成に失敗した場合はメインスレッドでコードが実行される
  • Safariブラウザ では同じ警告メッセージが表示されるが、Runボタンは無効 のままになる

ブラウザで動作するGHCデモ

  • GHCが ブラウザ内でクライアントサイド実行 され、サーバーに依存せずHaskellコードをコンパイルして実行できる
    • 作者はこれを Haskell Playgroundデモ の形で公開した
    • 詳細な説明は後日別途提供される予定
  • このデモは、GHC WebAssemblyバックエンドの進展度合い を示す例として言及されている

ブラウザごとの動作報告

  • Braveブラウザ では、最初の数秒間は無応答状態になった後で読み込みが完了する
    • 「Web Workerを作成できない」というメッセージが表示され、メインスレッドでのコード実行 に切り替えられる
    • そのため 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ディストリビューションではHaskellを使いにくいと感じる
    ブラウザサンドボックスで動かすのはリスクを減らすための暫定策だが、ソースからブートストラップできないなら言語を信頼しにくい

    • あなたが言っているのは GHC Haskell のことだ。それは主流の実装なので、いずれ解決されると思う
      しかしGHCなしでもHaskellはかなり扱える。たとえば MicroHs はどんどん強力になっていて、 ブートストラップ可能性 も高いと思う
    • このスレッドでも、人々がGHCブートストラップのために過去のビルド手順を再現しようと努力している
    • 昔のHugsと新しいMicroHsを組み合わせれば十分可能だと思う。ただし、コミュニティがそこまで 関心を持つか は分からない
    • なぜ言語のブートストラップ可能性がそこまで重要なのか気になる。私は安定性、人気、ツールチェーンの成熟度くらいを見るものだと思っていた
    • GHCはブートストラップなしでどうやってコンパイルされるのか気になる。ツリーに 再現不可能なバイナリ が含まれているのだろうか? 私はGHCを何度もビルドしたことがあるが、問題はなかった
  • 昔、HP JornadaでJlime Linux上のHaskellインタプリタを動かしていた記憶がある
    数学の授業で数式入力がしやすく、 関数電卓よりずっと良かった
    CFカードから動いていたので、GHCほど大きくはなかったはずだが、名前は思い出せない

    • たぶん Hugs だったのでは
  • 本当に印象的だ。以前Haskellで 数学・アート教育用Webサイト(mathvas.com) を作ったことがあるが、こういうツールがあればずっと楽だったと思う

    • Safari(iPhone)ではエディタに 貼り付けできない
  • その通り。関連プロジェクトは haskell-miso でも見られる

  • Haskellに慣れていない人向けに説明すると、GHC はHaskellの 代表的なコンパイラ兼対話環境

    • GHC(Glasgow Haskell Compiler) は事実上の 標準実装 であり、言語研究の中心的ツールでもある
      しかし機能変更があまりに頻繁で、 安定したスタイル が定着しなかったため、最終的にはStandard MLに移った
      (その当時は型ファミリー関連の変更が盛んだった時期だった)
  • このプロジェクトが WasmGCを使っているのか、それとも独自の ガベージコレクタを含んでいるのか 気になる

    • WasmGCは lazy evaluation と相性が悪い。Haskellの遅延値は常にヒープ上のクロージャとして存在する
      必要になったときだけ計算し、重複呼び出しを防ぐために black hole に置き換える構造だ
      しかしWasmGCは型が静的なので、こうした動的構造をサポートしにくい
      間接参照やdefunctionalizationで解決はできるが、 性能コスト が大きい
      さらにHaskellは finalizer もサポートするので、WasmGCがそれを処理できなければならない
    • WasmGCはまだ1.0段階なので、 C#やGo のような言語に必要なGCセマンティクスをすべてサポートしていない。たとえば interior pointer を扱えない
  • こうした機能と Blazor Wasm のような技術との違いが知りたい。どちらもJSなしでフロントエンドを書けるようにしてくれるように見える

  • すでに関数型プログラミングを知っている人向けの 実用的なHaskellチュートリアル を探している
    モナド、型クラス、HKTの概念は理解しているが、実際にはToDoアプリひとつも作れない