Haskell的编译器

fuz*_*fuz 24 compiler-construction haskell ghc

AFAIK GHC是当今最常见的编译器,但我也看到,其他一些ompilers也可用.GHC真的是所有目的的最佳选择,还是我可以使用别的东西?例如,我读到一些编译器(忘记名称)在优化方面做得更好,但没有实现所有扩展.

Joh*_*n L 36

GHC是迄今为止使用最广泛的Haskell编译器,它提供了最多的功能.但是,还有其他选择,它们有时比GHC有一些好处.这些是一些比较流行的替代方案:

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

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

UHC - 对于Haskell98,Utrecht Haskell编译器接近功能完整(我认为唯一缺少的是n + k模式).它实现了许多GHC最受欢迎的扩展和一些原始扩展.根据文档代码,未必进行良好优化.这也是一个很好的编译器.

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


gaw*_*awi 10

  1. Haskell被非正式地定义为GHC处理的语言.
  2. GHC是Haskell平台的编译器.
  3. 尝试使用GHC优化代码可能会比转换到另一个编译器更有成效,因为您将学习一些优化技能.
  4. GHC中有许多非常有用的扩展.我只是看不出没有他们的生活方式.

因此,对于任何严重的事情(例如非学术性,非实验性,非易失性或使用许多包装),务实的选择是与GHC一起使用.


sve*_*son 9

我认为这也值得一提nhc98.从主页上的模糊:

nhc98是一个小型,易于安装,符合标准的编译器,适用于惰性函数式编程语言Haskell 98.它非常便携,旨在生成在少量内存中运行的小型可执行文件.它生成中速代码,编译本身就很快.它还具有广泛的工具支持,可用于自动编译,外语接口,堆和时间分析,跟踪和调试.


Don*_*art 8

截至2011年,除日常编程之外,别无其他选择.惠普团队强烈鼓励所有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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

并且编译器生成相当好的代码,甚至15年后.

  • 我在哪里可以得到它?似乎所有与hbc相关的链接都已死亡. (3认同)
  • Haskell的早期版本. (2认同)

oad*_*ams 5

ghc是一个可靠的编译器.说这是一个非常强大的最佳选择.并且寻找这样的工具是徒劳的.

使用它,如果你真的需要其他东西,那么到那时你可能会知道它是什么.