假设我有一个haskell程序或库,我想让非主持人(可能是C程序员)可以访问。我可以使用GHC将其编译为C,然后将其作为C源分配?

如果可能的话,有人可以提供最小的例子吗? (例如,makefile)

是否可以使用GHC自动确定哪些编译器标志和标头和所需的内容,然后将其捆绑到一个文件夹中?

基本上,我有兴趣能够在C和Haskell中编写一部分程序,然后将其作为TARBALL分配,但不需要目标安装GHC和Cabal。

有帮助吗?

解决方案

我有兴趣能够在C和Haskell中编写部分程序,然后将其作为TARBALL分配,但不需要目标安装GHC和Cabal。

您正在要求提供很多不可能找到的基础架构。记住这一点 即使将其编译到C,任何Haskell程序几乎都肯定取决于一个大型,复杂的运行时系统 用于正确的操作。最低限度,该运行时系统必须支持垃圾收集和懒惰评估。因此,您不仅有翻译问题。

我建议您将这个问题作为软件分配问题解决。而不是TARBALL,为您喜欢的分销平台(Debian,Red Hat,installshield等)提供包裹。就个人而言,为了重复使用其他人的努力,我的目标是检查Cabal的某些东西,如果需要,请安装Cabal,然后使用Cabal安装其余用户所需的内容。

其他提示

你可以做到这一点 JHC. 。这是一个完整的程序优化编译器,可编译为C。它并没有GHC支持的所有精美扩展。

即使可以,我也不会称其为“ C来源”。 GHC可以将C作为其编译系统的一部分,但是生成的C代码甚至不可读取。即使可以阅读和理解它,修改它也没有任何意义,因为除了将更改重新放置到Haskell之外,也没有办法将C Hackers进行的任何修改纳入程序的未来版本。

术语“源”是指人类编写并用于生成程序的代码。在这种情况下,这是Haskell。由编译器生成的c不是“源代码”,它是中间表示。

您无法使用GHC到达那里。即使通过C进行编译,GHC仍依靠操纵由此产生的组装来洗牌段,巨大的运行时系统和很多行李。

另一方面,如果您想要的东西受到约翰·梅切姆(John Meacham)的JHC编译器的更有限的功能集的支持,则可能会有更好的运气,但是,它会生成相当紧凑的C输出。

我知道这是一个古老的帖子,但我仍然想提及 AJHC. 。 AJHC分配了JHC的计划,计划添加新功能,然后将更新推回JHC。

假设我有一个haskell程序或库,我想让非主持人(可能是C程序员)可以访问。我可以使用GHC将其编译为C,然后将其分配为C源

您可以编译为C,但是生成的C不可读取。您最好编写标头文件,并在其旁边使用出色的C FFI。无论如何,分发生成的C似乎是傻瓜的差事。

基本上,我有兴趣能够在C和Haskell中编写一部分程序,然后将其作为TARBALL分配,但不需要目标安装GHC和Cabal。

我不知道有任何不涉及GHC的解决方案。您必须至少要分发Haskell RTS。

我可以使用GHC将其编译为C,然后将其作为C源分配?

不,这是不可能的,但是您可以使用Haskell的外函数接口(FFI)轻松地在Haskell和C之间创建接口。

你可以有更多示例 这里.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top