什么是最好的Haskell库来使程序可运行?

|                                                                                                                   关闭。这个问题是题外话。它当前不接受答案。                                                      
已邀请:
这是一个很好的问题!这是第一道菜。   能够登录多个级别(例如:调试,警告等)。 hslogger很容易成为最受欢迎的日志记录框架。   能够收集和共享有关程序正在执行的工作类型以及该工作需要花费多长时间的度量标准/统计信息。理想情况下,收集的度量可以以与通用监视工具(例如Ganglia)兼容的格式使用,或者可以被忽略。 我不知道任何标准化的报告工具,但是,我过去所做的就是从“ 0”流中提取报告(或通过分析输出标志)。
$ ./A +RTS -s
64,952 bytes allocated in the heap
1 MB total memory in use
 %GC time       0.0%  (6.1% elapsed)
 Productivity 100.0% of total user, 0.0% of total elapsed
您也可以采用机器可读的格式:
$ ./A +RTS -t --machine-readable

 [(\"bytes allocated\", \"64952\")
 ,(\"num_GCs\", \"1\")
 ,(\"average_bytes_used\", \"43784\")
 ,(\"max_bytes_used\", \"43784\")
 ,(\"num_byte_usage_samples\", \"1\")
 ,(\"peak_megabytes_allocated\", \"1\")
 ,(\"init_cpu_seconds\", \"0.00\")
 ,(\"init_wall_seconds\", \"0.00\")
 ,(\"mutator_cpu_seconds\", \"0.00\")
 ,(\"mutator_wall_seconds\", \"0.00\")
 ,(\"GC_cpu_seconds\", \"0.00\")
 ,(\"GC_wall_seconds\", \"0.00\")
 ]
理想情况下,您可以通过套接字连接到正在运行的GHC运行时,并以交互方式查看这些GC统计信息,但是目前这并不是一件容易的事(需要将FFI绑定到\“ rts / Stats.h \”接口)。您可以使用
ThreadScope
附加到进程并监视GC和线程行为。 类似的标志可用于增量的,记录的时间和空间分析,可用于监视(例如,这些图可以增量构建)。
hpc
通过
Tix
类型收集了大量有关程序执行的统计信息,并且人们编写了可以按时间记录执行代码的工具。   是可配置的,理想情况下是通过这样的系统进行的:该系统允许更新正在运行的程序中配置的属性,而无需重新启动所述程序。 有几种工具可用于此,您可以执行xmonad样式的状态重新加载;或通过
plugins
*软件包或
hint
进行代码热交换。其中一些比其他更具实验性。   可复制的部署 Galois最近发布了“ѭ8”,这是一种用于进行可复制构建的工具(即,对范围进行了限定和控制)。     
关于配置,我发现ConfigFile对我的项目很有用。我将其用于生产中的所有守护程序。它不会自动更新。 我使用cabal-dev在各种环境(本地,开发,本地同事)中创建可复制的内部版本。真正的cabal-dev是必不可少的,尤其是因为它能够在项目目录中支持本地修补版本的库。 对于它的价值,我将使用xmonad样式的状态重载。 Haskell的纯度使其变得无关紧要。迁移是一个问题,但是仍然存在。我对hsplugins和IRCd进行了实验,在前一种情况下,出现了GHC运行时问题,在后一种情况下,出现了分段错误。我离开了Github上的分支以供以后验尸:https://github.com/chrisdone/hulk ConfigFile示例:
# Default options
[DEFAULT]
hostname: localhost
# Options for the first file
[file1]
location: /usr/local
user: Fred
    
我会回应Don所说的一切,并添加一些一般性建议。 例如,您可能要考虑另外两个工具和库: 快速检查基于属性的测试 hlint作为
-Wall
的扩展版本 这些都针对代码质量。 作为编码实践,请避免使用惰性IO。如果您需要流式IO,请使用iteratee库之一,例如枚举器。如果您查看“黑客”,则会看到类似http-enumerator的库,它们对HTTP请求使用枚举器样式。 至于选择黑客库,有时可以帮助查看有多少软件包依赖于某些东西。轻松查看您可以使用此网站的软件包的反向依赖性,该软件包反映了黑客行为: http://bifunctor.homelinux.net/~roel/hackage/packages/archive/revdeps-list.html 如果您的应用程序最终执行紧密循环(例如处理许多请求的Web服务器),则惰性可能是空间泄漏形式的问题。通常,这是在正确的位置添加严格性注释的问题。剖析,经验和阅读核心是我所知与这种事情作斗争的主要技术。我知道的最好的性能分析参考是《真实世界》 Haskell的第25章。     

要回复问题请先登录注册