Компилировать программы на Haskell в C

Я должен следовать программе на Haskell, которую я пытаюсь скомпилировать в C. Я посмотрел этот SO пост, но не смог получить ответ там.

quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
  where
    lesser  = filter (<  p) xs
    greater = filter (>= p) xs

main = print(quicksort([5,2,1,0,8,3]))

Вот что я попробовал:

$ ghc -C main.hs

И что я получаю это:

ghc: the option -C is only available with an unregisterised GHC
Usage: For basic information, try the `--help' option.

Это немного странно, потому что когда я смотрю на помощь, я вижу это:

-C остановка после генерации C (вывод.hc)

2 ответа

Решение

Компиляция в C - теперь специализированный прием, используемый в основном для начальной загрузки на новых архитектурах. Следовательно, по умолчанию это не поддерживается. В вики GHC есть некоторые инструкции по сборке GHC самостоятельно с включенной поддержкой; Основное различие между стандартной сборкой и сборкой, которая позволяет компилировать в C, заключается в настройке с --enable-unregisterised флаг. Смотрите также полный список страниц по созданию GHC - это довольно сложно, поэтому вы захотите сохранить это под рукой, если решите это сделать.

Этот вариант древний.

Несколько лет назад GHC раньше компилировал через C, но больше не делает этого в обычных сценариях. Вместо того, чтобы генерировать код C и компилировать это с gccВ настоящее время GHC использует собственный генератор собственного кода (или LLVM).

Технически можно скомпилировать сам GHC как "незарегистрированный", чтобы снова включить эту опцию. Это требует специальной сборки GHC из его исходного кода. Это, однако, приведет к довольно неэффективному C-коду. Прагматично, это делается только при кросс-компиляции или при портировании GHC на новую архитектуру.

Другие вопросы по тегам