- 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件のコメント
Hacker Newsの意見
実際のタイトルは "GHC now runs in your browser"
QEMU-WASMのおかげで、今やブラウザで 動かないものなんてあるのか と気になってくる
批判ではなく、新しい言語を気軽に学べるこういう試みは本当に良いと思う
まだHaskell(またはその派生言語)を 完全にブートストラップ する方法がないのが惜しい
そのため、信頼性を重視するLinuxディストリビューションではHaskellを使いにくいと感じる
ブラウザサンドボックスで動かすのはリスクを減らすための暫定策だが、ソースからブートストラップできないなら言語を信頼しにくい
しかしGHCなしでもHaskellはかなり扱える。たとえば MicroHs はどんどん強力になっていて、 ブートストラップ可能性 も高いと思う
昔、HP JornadaでJlime Linux上のHaskellインタプリタを動かしていた記憶がある
数学の授業で数式入力がしやすく、 関数電卓よりずっと良かった
CFカードから動いていたので、GHCほど大きくはなかったはずだが、名前は思い出せない
本当に印象的だ。以前Haskellで 数学・アート教育用Webサイト(mathvas.com) を作ったことがあるが、こういうツールがあればずっと楽だったと思う
その通り。関連プロジェクトは haskell-miso でも見られる
Haskellに慣れていない人向けに説明すると、GHC はHaskellの 代表的なコンパイラ兼対話環境 だ
しかし機能変更があまりに頻繁で、 安定したスタイル が定着しなかったため、最終的にはStandard MLに移った
(その当時は型ファミリー関連の変更が盛んだった時期だった)
このプロジェクトが WasmGCを使っているのか、それとも独自の ガベージコレクタを含んでいるのか 気になる
必要になったときだけ計算し、重複呼び出しを防ぐために black hole に置き換える構造だ
しかしWasmGCは型が静的なので、こうした動的構造をサポートしにくい
間接参照やdefunctionalizationで解決はできるが、 性能コスト が大きい
さらにHaskellは finalizer もサポートするので、WasmGCがそれを処理できなければならない
こうした機能と Blazor Wasm のような技術との違いが知りたい。どちらもJSなしでフロントエンドを書けるようにしてくれるように見える
すでに関数型プログラミングを知っている人向けの 実用的なHaskellチュートリアル を探している
モナド、型クラス、HKTの概念は理解しているが、実際にはToDoアプリひとつも作れない
あるいは、 コードを直接読んで、詰まったらコミュニティで助けを求めるのがよい
たとえば この記事 が参考になる
あるいは このチュートリアル のように小さなWebアプリを作ってみるのもよい