配置Haskell而不安装所有依赖项的分析库

时间:2012-08-31 01:13:14

标签: haskell profiling

我希望描述用Haskell编写的程序。

在编译时,我被告知我没有安装某些依赖项(例如,criterion)和cabal已中止的分析库。

我没有兴趣分析这些依赖项的部分内容;从main调用的代码甚至不使用它们。

如何在不安装我不需要的分析库的情况下分析我的应用程序,并且不删除所有这些依赖项?

3 个答案:

答案 0 :(得分:12)

避免使用分析编译所有的好方法是使用cabal沙箱。它允许您仅为一个应用程序设置沙箱,因此您不必重新安装整个~/.cabal前缀。您需要最新版本的Cabal,因此请先运行cabal update && cabal install cabal-install

初始化沙箱后,请创建一个文件cabal.config以包含必要的指令(在您的情况下为library-profiling: True; executable-profiling: True也可能很方便。)

这样做的副作用是您可以使用不需要全局安装的依赖项来测试代码,例如,实验版本或过期版本。

编辑:顺便说一句,我认为你不需要为criterion启用分析工作。在任何情况下,它都适用于我没有启用分析。只需编写一个Main模块,其中包含main = defaultMain benchmarks,其中benchmarks的类型为[Benchmark],即您编写的基准列表。

然后编译该文件(比如我们用benchmarks.hs称它为ghc --make -o bench benchmarks.hs,并使用适当的参数运行程序./bench(有关详细信息,请参阅标准文档。默认参数是,例如./bench -o benchmarks.html,它将生成一个类似于this one的漂亮报告。

答案 1 :(得分:8)

本周我遇到了同样的问题,虽然我已经手动重新编译了所有内容,但我在IRC频道中被指示执行以下操作:

  1. 转到您的cabal配置文件(in case you don't know where)
  2. 编辑启用库概要分析的行(当您使用它时,启用文档)
  3. 运行Cabal安装世界

答案 2 :(得分:6)

正如您在评论中提到的问题中所提到的,将来解决此问题的一个好方法是在cabal配置中启用分析。这样,所有库都安装了分析支持。这可能不是一个令人满意的解决方案,但我想很多人都选择了它。

如果您只想了解程序的内存使用情况,可以使用-hT生成程序的堆配置文件。更准确地说,您必须使用-rtsopts编译程序以启用RTS选项,然后使用+RTS -hT执行它。编译器生成扩展名为hp的文件。您可以使用hphp2ps文件转换为带有堆配置文件的postscript文件。这应该没有任何分析支持,但请注意我懒得验证它,因为我已经安装了所有具有分析支持的库; )