Следующая функция Haskell:
При компиляции в WASM квадратична по n
, а не линейна, как ожидалось. Из-за этого она в миллионы раз медленнее собственной версии, что не ожидается для WASM. Это ошибка компилятора или я что-то делаю не так?
Я использую GHC 9.11.20240817 со следующей командой:
Затем следует шаг после связывания:
Затем я импортирую sum
из JS и вызываю ее при разных n.
{-# LANGUAGE ForeignFunctionInterface #-}
module Main where
import Data.Word (Word32)
sum' :: Word32 -> Word32
sum' 0 = 0
sum' n = n + sum' (n-1)
foreign export javascript "sum" sum' :: Word32 -> Word32
main :: IO ()
main = print (sum' 10000000)
wasm32-wasi-ghc main.hs -O2 -no-hs-main -optl-mexec-model=reactor
$(wasm32-wasi-ghc --print-libdir)/post-link.mjs -i main.wasm -o main.js
Остап
Вопрос задан2 июля 2024 г.