Haskell 编译器

问题描述 投票:0回答:5

AFAIK GHC 是当今最常见的编译器,但我也看到其他一些编译器也可用。 GHC 真的是适合所有用途的最佳选择吗?或者我可以使用其他东西来代替吗?例如,我读到某些编译器(忘记名字)在优化方面做得更好,但没有实现所有扩展。

haskell ghc
5个回答
37
投票

GHC 是迄今为止使用最广泛的 Haskell 编译器,并且提供了最多的功能。 不过,还有其他选择,有时比 GHC 有一些好处。 这些是一些更流行的替代方案:

Hugs - Hugs 是一个快速高效的解释器(我认为它不包含编译器)。 它还以产生比 GHC 更容易理解的错误消息而闻名。

JHC - 整个程序编译器。 JHC 可以生成非常高效的代码,但它的功能还不完整(这可能就是您所想到的)。 请注意,它并不总是比 GHC 快,只是有时如此。 我没有太多使用 JHC,因为它没有实现我大量使用的多参数类型类。 我听说源代码非常清晰易读,使其成为一个很好的编译器。 JHC 也更方便交叉编译,通常会生成更小的二进制文件。

UHC - Utrecht Haskell 编译器对于 Haskell98 来说功能接近完整(我认为唯一缺少的是 n+k 模式)。 它实现了许多 GHC 最流行的扩展以及一些原始扩展。 根据文档,代码还不一定得到很好的优化。 这也是一个很好的编译器。

简而言之,如果您想要高效的代码和尖端的功能,GHC 是您的最佳选择。 如果您不需要 MPTC 或其他一些功能,JHC 值得尝试。 UHC 的扩展在某些情况下可能很引人注目,但我还不会指望它来实现快速代码。


10
投票
  1. Haskell 被非正式地定义为 GHC 处理的语言。
  2. GHC 是Haskell 平台的编译器。
  3. 尝试使用 GHC 优化代码可能比切换到其他编译器更有效,因为您将学到一些优化技巧。
  4. GHC 中有许多非常有用的扩展。 我就是不知道没有他们如何生活。

因此,对于任何严肃的事情(例如非学术、非实验、非易失性或使用许多软件包),务实的选择是使用 GHC。


9
投票

我觉得也值得一提nhc98。从主页上的简介:

nhc98 体积小,易于安装, 符合标准的编译器 Haskell 98,惰性函数 编程语言。这是非常 便携式,旨在生产小型 少量运行的可执行文件 的记忆。它产生中快 代码,编译本身就很简单 快速地。它还配备了广泛的 自动工具支持 汇编、外语 接口、堆和时间分析, 跟踪和调试。


8
投票

截至 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 年后,编译器也能生成非常好的代码。


6
投票

ghc 是一个可靠的编译器。说它是所有目的的最佳选择是非常有力的。寻找这样的工具是徒劳的。

使用它,如果您确实需要其他东西,那么到那时您可能会知道它是什么。

© www.soinside.com 2019 - 2024. All rights reserved.