我注意到GHC(一种广泛使用的Haskell编译器)有一个用Python编写的测试套件,而不是Haskell(我天真地期待)。这是什么历史?用不同的语言编写测试套件有什么特别的好处吗?
编辑:根据评论中的建议,我在/r/haskell中提到了这一点。它现在已经产生了三个答案,我在下面引用了这些答案:
tathougies 说:
测试套件驱动程序似乎是用Python编写的。 Python是一种很好的高级脚本语言。
这就像问为什么GHC使用Make而不是haskell'?可能因为make更好地运行内置外部依赖性解析的shell程序。
测试本身似乎是用Haskell编写的,验证编译器的某些属性并捕获回归。如果它们失败,看起来就会通知python驱动程序,然后将错误报告给用户。
phadej 补充道:
FWIW GHC的构建系统正在被重写以使用shake:Haskell库。
eacameron 说:
我不知道。但GHC并不像你和我一样拥有使用Haskell的奢侈品。它必须使用以前版本的自身进行引导,并且它希望避免依赖性。 Python是一个相当轻量级的要求,因为大多数系统(Windows除外)都内置它。
答案 0 :(得分:5)
介绍Python的commit消息解释了很多内容:
修改testsuite框架。以前的框架是一个 有点失控的实验 - 一种全新的语言 用Haskell写的翻译是相当重量级的并且离开了 我们有维护问题。
所以新的测试驱动程序是用Python编写的。缺点是你 需要Python来运行测试套件,但我们认为这不是太大了 问题,因为它只会影响开发人员和Python安装 这些天很容易就可以了。
亮点:
790行Python,而5300行Haskell + 720行<奇怪化妆语言>。
框架支持以各种“方式”运行测试,这应该是 抓住更多的虫子。默认情况下,每个测试都以三种方式运行: normal,-O和-O -fasm。另外,如果分析库 已经建立,另一种方式(-O -prof -auto-all)被添加。我计划 还要添加“GHCi”方式。
多种方式运行测试已经出现了一些新的错误!
文档在README文件中,并有所改进。
该框架的GHC特性较少,而且可能没什么用 难以哄骗使用其他编译器。大部分的 GHC特异性位于单独的配置文件(config / ghc)中。
可能需要一段时间才能安定下来。期待一些意外 故障。