当前位置:  开发笔记 > 运维 > 正文

将Haskell程序分发为C源代码

如何解决《将Haskell程序分发为C源代码》经验,为你挑选了4个好方法。

假设我有一个Haskell程序或库,我想让非Haskeller,可能是C程序员可以访问.我可以使用GHC将其编译为C,然后将其作为C源分发吗?

如果可以,有人可以提供一个最小的例子吗?(例如,Makefile)

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

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



1> Norman Ramse..:

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

你要求的是一些你不太可能找到的大量基础设施.请记住,任何Haskell程序,即使它将被编译为C,几乎肯定会依赖于大型,复杂的运行时系统来正确操作.至少,该运行时系统必须支持垃圾收集和惰性评估.所以你不仅仅是一个翻译问题.

我建议你解决这个问题作为一个软件分发问题.而不是tarball,为您喜欢的分发平台(Debian,Red Hat,InstallShield等)提供一个包.就个人而言,为了重用其他人的努力,我的目标是检查Cabal,如果需要安装Cabal,然后使用Cabal安装用户需要的其余部分.


@Steve:2005年,GHC运行时系统的规模是Version 6 Unix的四倍.从那以后它只会变得更大.
如果你很好奇的话,GHC运行时会做什么[这里](http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts)有一整页.

2> wnoise..:

你可以用jhc做到这一点.它是一个完整的程序优化编译器,可以编译为C.它没有GHC支持的所有花哨的扩展.



3> Paul Johnson..:

即使你可以,我也不会称之为"C源".GHC可以使用C作为其编译系统的一部分,但生成的C代码甚至不具有可读性.即使它可以被阅读和理解,修改它也没有任何意义,因为除了将更改反向移植到Haskell之外,没有办法将C黑客所做的任何修改合并到程序的未来版本中.

术语"源"表示由人编写并用于生成程序的代码.在这种情况下,这是Haskell.编译器生成的C不是"源代码",而是中间表示.


"源"这个词的语义与我的问题没有关系.我在问是否有可能分发C*文件*,这是编译Haskell的结果,我不在乎它们被称为什么.
-1:我完全不同意"源"必须是"源代码"的说法.
@trithithis:虽然人们可能会认为真正的来源是开发人员的大脑(甚至是大爆炸,圣灵或一些漂浮的意大利面),但使用"来源"一词作为起源可能是有用的.计算机中包含的信息.这将是用户输入和记录的数据.从这个意义上讲,保罗约翰逊是100%正确的.

4> Edward KMETT..:

你不能用GHC到达那里.即使它通过C进行编译,GHC也依赖于操纵最终的装配来改变周围的部分,一个巨大的运行时系统和很多行李.

另一方面,如果你想要的东西得到John Meacham的JHC编译器的一些更有限的功能集的支持,你可能会更好运,但这会产生相当紧凑的C输出.


GHC仅在注册版本中使用这些技巧; 见http://hackage.haskell.org/trac/ghc/wiki/Building/Unregisterised.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有