Компилировать программы на Haskell в C - PullRequest
0 голосов
/ 27 августа 2018

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

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 output)

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

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

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

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

0 голосов
/ 27 августа 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...