AFAIK GHC 是当今最常见的编译器,但我也看到,其他一些编译器也可用。GHC 真的是所有用途的最佳选择,还是我可以使用其他东西?例如,我读到一些编译器(忘记了名字)在优化方面做得更好,但没有实现所有扩展。
5 回答
GHC 是迄今为止使用最广泛的 Haskell 编译器,它提供了最多的功能。不过,还有其他选择,它们有时比 GHC 有一些好处。这些是一些更受欢迎的替代品:
Hugs - Hugs 是一个快速高效的解释器(我认为它不包含编译器)。它还以产生比 GHC 更容易理解的错误消息而闻名。
JHC - 一个完整的程序编译器。JHC 可以生成非常高效的代码,但它的功能还不完整(这可能是您正在考虑的)。请注意,它并不总是比 GHC 快,只是有时。我没有过多地使用 JHC,因为它没有实现我大量使用的多参数类型类。我听说源代码非常清晰易读,这使它成为一个很好的编译器。JHC 也更便于交叉编译,通常生成较小的二进制文件。
UHC - 对于 Haskell98,Utrecht Haskell 编译器的功能接近完整(我认为唯一缺少的是 n+k 模式)。它实现了许多 GHC 最流行的扩展以及一些原始扩展。根据文档,代码还不一定优化得很好。这也是一个很好的编译器。
简而言之,如果您想要高效的代码和尖端的功能,GHC 是您的最佳选择。如果您不需要 MPTC 或其他一些功能,JHC 值得一试。UHC 的扩展在某些情况下可能很有吸引力,但我还不能指望它的快速代码。
- Haskell 被非正式地定义为由 GHC 处理的语言。
- GHC 是Haskell 平台的编译器。
- 尝试使用 GHC 优化您的代码可能比切换到另一个编译器获得更多回报,因为您将学习一些优化技能。
- GHC中有许多非常有用的扩展。我只是看不出没有他们如何生活。
因此,对于任何严肃的事情(例如非学术性、非实验性、非易失性或使用许多软件包),务实的选择是使用 GHC。
我认为也值得一提nhc98。从主页上的简介:
nhc98 是一个小型、易于安装、符合标准的编译器,适用于惰性函数式编程语言 Haskell 98。它非常便携,旨在生成在少量内存中运行的小型可执行文件。它产生中等速度的代码,编译本身也很快。它还为自动编译、外语接口、堆和时间分析、跟踪和调试提供了广泛的工具支持。
截至 2011 年,除了 GHC 之外,对于日常编程真的没有其他选择。HP 团队强烈鼓励所有 Haskell 程序员使用 GHC。
如果您是研究人员,您可能会使用 UHC,如果您在一个非常奇怪的系统上,您可能只有 Hugs 或 nhc98 可用。如果你像我一样是复古迷,你仍然安装了 gofer、hbc 和 hbi:
$ hbi
Welcome to interactive Haskell98 version 0.9999.5c Pentium 2004 Jun 29!
Loading prelude... 1 values, 4 libraries, 200 types found.
Type "help;" to get help.
> help;
HBI -- Interactive Haskell B 1.3
hbi 很酷,因为 a) 它实现了 Haskell B,并且 b) 它在命令行支持完整的语言:
> data L a = I | X a (L a) deriving Show;
data L b = I | X b (L b) deriving (Show)
> X 4 (X 3 I);
X 4 (X 3 I)
即使在 15 年后,编译器也会生成非常好的代码。
ghc 是一个可靠的编译器。说它是所有目的的最佳选择是一个非常强大的选择。而寻找这样的工具是徒劳的。
使用它,如果您真的需要其他东西,那么到那时您可能会知道它是什么。