配置Haskell而不安装所有依赖项的安装配置文件库

nh2*_*nh2 16 profiling haskell

我希望介绍用Haskell编写的程序.

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

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

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

Ale*_*rov 13

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

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

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

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

然后编译该文件(比如说,我们用它benchmarks.hs来调用它ghc --make -o bench benchmarks.hs,并./bench使用适当的参数运行程序)(请参阅条件文档以获取详细信息.一个好的默认参数,比如./bench -o benchmarks.html哪个会产生类似于这个的漂亮报告)


Mdx*_*hmt 8

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

  1. 转到您的cabal配置文件(如果您不知道在哪里)
  2. 编辑行以启用库概要分析(当您使用它时,启用文档)
  3. 运行Cabal安装世界


Jan*_*sen 6

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

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

  • 请注意,这只是`-hT`的情况,即基于类型的堆分析.还有其他分析类型,如保留器分析,仍然需要`-prof`. (3认同)