AFAIK GHC是当今最常见的编译器,但我也看到,其他一些ompiler也可用。 GHC真的是所有目的的最佳选择,还是我可以使用别的东西?例如,我读到一些编译器(忘记名称)在优化方面做得更好,但没有实现所有扩展。
答案 0 :(得分:36)
GHC是迄今为止使用最广泛的Haskell编译器,它提供了最多的功能。但是,还有其他选择,它们有时比GHC有一些好处。这些是一些比较流行的选择:
Hugs - Hugs是一个快速有效的解释器(我认为它不包括编译器)。它也因产生比GHC更容易理解的错误消息而闻名。
JHC - 一个完整的程序编译器。 JHC可以生成非常高效的代码,但它还不是特征完整的(这可能就是你想到的)。请注意,它有时并不总是比GHC快。我没有使用JHC,因为它没有实现多参数类型类,我大量使用它。我听说源代码非常清晰易读,这使得它成为一个很好的编译器。 JHC对于交叉编译也更方便,通常会产生更小的二进制文件。
UHC - 对于Haskell98,Utrecht Haskell编译器接近功能完整(我认为唯一缺少的是n + k模式)。它实现了许多GHC最受欢迎的扩展和一些原始扩展。根据文档代码,未必进行良好优化。这也是一个很好的编译器。
简而言之,如果您想要高效的代码和尖端功能,GHC是您最好的选择。如果您不需要MPTC或其他功能,JHC值得尝试。在某些情况下,UHC的扩展可能会引人注目,但我不会指望快速代码。
答案 1 :(得分:10)
因此,对于任何严重的事情(例如非学术性,非实验性,非易失性或使用许多包裹),务实的选择是与GHC一起使用。
答案 2 :(得分:9)
我认为值得一提nhc98。从主页上的模糊:
nhc98体积小,易于安装, 符合标准的编译器 Haskell 98,懒惰的功能 编程语言。这个很 便携式,旨在生产小型 少量运行的可执行文件 记忆它产生中速 代码,编译本身就很好 快速。它还配有广泛的 工具支持自动 汇编,外语 接口,堆和时间分析, 跟踪和调试。
答案 3 :(得分:8)
截至2011年,除日常节目之外,GHC别无选择。惠普团队强烈鼓励所有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年后。
答案 4 :(得分:5)
ghc是一个可靠的编译器。说这是一个非常强大的最佳选择。并且寻找这样的工具是徒劳的。
使用它,如果你真的需要其他东西那么那么你可能会知道它是什么。