【问题标题】:Is there a Haskell/ML-like compiler to C?C 是否有类似 Haskell/ML 的编译器?
【发布时间】:2011-06-10 23:34:07
【问题描述】:

人们 have 在 Scheme 中为 iPhone 写了 games。因为(一些)Scheme 编译器编译为 C,所以很容易与 Objective-C 混合并与 XCode 集成。

我是 awarepatches,负责 Haskell 和 OCaml 编译器以启用 ARM/iOS 后端。但这些似乎是非官方的和实验性的/不稳定的。

比起Scheme 的动态类型,我更喜欢静态haskell/ML 类型的类型系统。是否有稳定的 ML/SML/Haskell 编译器生成 C 代码,以便可以与 Scheme/Gambit-C 类似的方式使用?

【问题讨论】:

  • GHC中有一个C后端(-fvia-c选项)
  • @SK-logic 是的,但是 ghc 的 C 后端不会交叉编译。它也确实(现在我们有本机代码和 llvm 后端)仅用于引导目的。
  • 对了,Gambit-C核心小哥在iOS上发布了一个REPL:itunes.apple.com/us/app/gambit-repl/id434534076?mt=8&ls=1

标签: iphone haskell scheme sml gambit


【解决方案1】:

我对 ML 无能为力,但你看过 JHC 吗? JHC是一个针对可移植C的全程序优化Haskell编译器,可以添加iPhone支持

[iphone]
cc=arm-apple-darwin-gcc
merge=le32

在 ~/.jhc/targets.ini 中

更多 Haskell 信息请参见 Haskell wiki 和 JHC 手册。

【讨论】:

  • 我已经考虑过了,谢谢。我的印象是 jhc 功能不完整。我不想用一种语言开始一个项目,并且在以后的某个时间点发现编译器不支持我正在做的事情。查看编译错误:mirror.seize.it/report.html
  • JHC 是 AFAIK 几乎完整的 Haskell98 实现(有一些差距,但 IIRC 非常小),但是它不支持 GHC 的所有扩展,例如 MPTC 的。您的编译错误链接似乎违反了 GHC 的测试套件;我不希望 JHC 能够编译大部分代码,因为其中大部分代码必然需要特定于 GHC 的扩展。
  • 我有相当多的使用JHC的经验,功能完整性不是问题(扩展除外),当前版本的jhc的问题是代码生成器的稳定性,有时会很复杂表达式会生成错误的 C 代码,我一直在尝试帮助识别这些问题,其中一些已经修复,但似乎仍然存在问题。您还需要确保启用 -fjgc 与不使用 GC 相比,它已经过更多测试(并且可以帮助生成有效的 C 代码),并且如果您使用 FFI 库启用 --optc='-fno-strict-aliasing' .
【解决方案2】:

(我不确定这个工具链是否已经在 iPhone 上专门尝试过。)

MLTon 是一个全程序优化的标准机器学习编译器。您可以通过在编译时将 -keep g 传递给 MLTon 来保留您的 C 代码,例如:

c:/Program Files (x86)/MLton/bin/mlton.bat" -verbose 1 -keep g test.sml

还可以生成ARM代码natively

【讨论】:

    【解决方案3】:

    nhc98:http://www.haskell.org/nhc98/

    完整的 Haskell '98。当然,现在许多库都依赖于更高级的 ghc-only 功能。但是 Haskell '98 足以进行通用编程。

    【讨论】:

    • 是否有理由更喜欢 nhc 而不是 jhc?我没有广泛使用任何一种。
    • @Michael Snoyman 我不知道事实,但我认为它比 jhc 更稳定,但您仍然需要从源代码构建 nhc 以使其交叉编译,因为 jhc 是真正的交叉编译器,您可以为其定义目标 inf 样式文件来描述平台,以及使用哪个 C 编译器,使其轻松定位新平台。
    • 据我所知,nhc 可作为交叉编译器使用——请参阅此处的文档:haskell.org/nhc98/install.html。虽然是的,但这需要将 nhc 编译为交叉编译器——但这应该不难。
    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多