Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Я знаю, что это старый пост, но я все еще хотел упомянуть ajhc. Ajhc forked jhc с планами добавления новых функций и последующим нажатием обновлений обратно на jhc.

Ответ 6

Могу ли я скомпилировать его на C с помощью GHC, а затем распространять его как источник C?

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

У вас может быть больше здесь.