gpt4 book ai didi

haskell - 如何使用 Shake 编译 Haskell 程序

转载 作者:行者123 更新时间:2023-12-02 14:32:46 24 4
gpt4 key购买 nike

我有一个 Haskell 程序,我想用 GHC 进行编译,由 Shake 构建系统编排。我应该执行哪些命令,在什么情况下应该重新运行它们?

最佳答案

有两种方法可以进行编译,也有两种方法可以获取依赖项。您需要从每组中选择一个(所有 4 种组合都有意义),以得出组合方法。

编译

您可以:

  • 根据 .hs 文件及其传递导入的任何 .hi 文件依次对每个文件调用 ghc -c,生成都是 .hi.o 文件。最后,根据所有 .o 文件调用 ghc -o。实际代码see this example .
  • 根据所有.hs文件调用一次ghc --make。实际代码see this example .

ghc --make 的优点是它比多次调用 ghc -c 更快,因为 GHC 可以加载每个 .hi仅文件一次,而不是每个命令一次。通常加速比为 3 倍。缺点是并行性比较困难(您可以使用 -jghc --make,但 Shake 仍然假设每个操作消耗一个 CPU),并且两个 ghc --make 如果编译在任何依赖项上重叠,则它们不能同时运行。

依赖关系

您可以:

  • 解析 Haskell 文件以递归方式查找依赖项。要解析文件,您可以按照编码约定查找 import 语句(也许还有 #include 语句),或者使用诸如 haskell-src-exts 之类的库。 。对于具有非常近似的 import 解析器的实际代码 see this example .
  • 使用 ghc -M 的输出来检测依赖关系,可以使用 Shake 辅助函数 parseMakefile 来解析依赖关系。实际代码see this example .

解析 Haskell 文件的优点是可以生成 Haskell 文件并且速度更快。使用ghc -M的优点是更容易支持所有GHC功能。

关于haskell - 如何使用 Shake 编译 Haskell 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50724824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com