Распределение программы Haskell как C источник

Скажите, что у меня есть программа Haskell или библиотека, которую я хотел бы сделать доступным для non-Haskellers, потенциально C программисты. Я могу скомпилировать его в C, использующий GHC, и затем распределить это как источник C?

Если это возможно, кто-то может обеспечить минимальный пример? (например, Make-файл)

Действительно ли возможно использовать GHC для автоматического определения, какие флаги компилятора и заголовки и необходимый, и затем возможно, связывают это в единственную папку?

В основном я интересуюсь способностью записать части программ в C и Haskell и затем распределении его как tarball, но не требуя, чтобы цель имела GHC и установленную Интригу.

32
задан Steve 3 January 2010 в 06:37
поделиться

5 ответов

Меня интересует возможность писать части программ на C и Haskell, а затем распространять их как тарбол, но без необходимости установки GHC и Cabal.

Вы просите слишком много инфраструктуры, которую вряд ли найдете. Помните, что любая программа Haskell, даже если она будет скомпилирована на C, почти наверняка будет зависеть от большой и сложной системы исполнения для ее корректной работы. Как минимум, эта run-time-система должна поддерживать сбор мусора и ленивые оценки. Таким образом, у вас есть не только проблема с переводом.

Я предлагаю вам решить эту проблему как проблему распространения программного обеспечения. Вместо тарбола, предоставьте пакет для вашей любимой платформы дистрибутива (Debian, Red Hat, InstallShield, что угодно). Лично для того, чтобы повторно использовать чужие усилия, я бы стремился к чему-то, что проверяет Cabal, устанавливает Cabal, если нужно, а затем использует Cabal, чтобы установить остальное, что нужно вашим пользователям.

22
ответ дан 27 November 2019 в 20:42
поделиться

Могу ли я скомпилировать его на C, используя GHC, а затем распространять его как исходный текст на C?

Нет, это невозможно, но вы можете легко создать интерфейс между haskell и c, используя интерфейс внешних функций (FFI). Хаскелла.

Вы можете привести еще один пример здесь .

.
-1
ответ дан 27 November 2019 в 20:42
поделиться

Туда нельзя добраться с GHC. Даже при компиляции через C, GHC полагается на манипулирование полученной сборкой, чтобы перетасовать сегменты вокруг, огромную систему времени работы и кучу багажа.

С другой стороны, вам может повезти больше, если то, что вы хотите, поддерживается несколько более ограниченным набором возможностей JHC компилятора John Meacham, который генерирует довольно компактный вывод на C.

6
ответ дан 27 November 2019 в 20:42
поделиться

Даже если бы вы могли, я бы не назвал это «источником Си». GHC может использовать C как часть своей системы компиляции, но сгенерированный код C даже не читается. Даже если бы его можно было прочитать и понять, не имело бы смысла изменять его, потому что нет никакого способа (кроме обратного переноса изменений в Haskell) включить любые модификации, сделанные хакерами C, в будущие версии вашей программы.

Термин «исходный код» означает код, написанный человеком и используемый для создания программы. В данном случае это Haskell. C, созданный компилятором, не является «исходным кодом», это промежуточное представление.

10
ответ дан 27 November 2019 в 20:42
поделиться

Вы можете сделать это с помощью jhc. Это полноценный оптимизирующий программу компилятор, который компилируется вплоть до C. Однако он не имеет всех причудливых расширений, которые поддерживает GHC.

17
ответ дан 27 November 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: