そういえば、haskell(ghc)は、llvmを吐けるからそれ経由でwasmに...

そういえば、haskell(ghc)は、llvmを吐けるからそれ経由でwasmにできないかなとか思ったけどどうなのかな

Replies

そういえば、haskell(ghc)は、llvmを吐けるからそれ経由でwasmにできないかなとか思ったけどどうなのかな

asteriusは、GHCから(LLVMを経ずに直接)Binaryen経由でwasmを吐かせているようです。
https://github.com/tweag/asterius

ただ、原理的にはLLVMに持ち込めれば、Binaryen経由でwasmは吐けるのかなと思います。
(LLVM自体がwasm用のバックエンドにBinaryenを使ってるようでした。)

ただ、ランタイムの部分をどうするかが、結構みなさんの工夫と腕力の見せ所のようです。
asteriusは、GHCのランタイムの軽量版をwasm(とJavaScript)で自力で書いたようです。
なかなか凄い腕力です!🌟

さすがはtweag 変態さんってことですね^^

記憶が曖昧なんですが、wasmって使用できる命令はじめいろいろ制限が厳しいので、単純にGHCが吐いたLLVMを変換できるかは怪しかったかと思います。 😞

確かに。 例えば、単純なgotoが使えないので、asteriusは tail callをwasmで工夫して実装してるようでした💪