Простая рекурсивная сумма при компиляции из Haskell в WASM является квадратичной

1
9

Следующая функция 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 г.

1 Ответ

Ваш ответ

Загрузить файл.