关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。
我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。
7年前关闭。
Improve this question
如果我要将一个程序投入生产,我需要该程序做几件事,以便将其视为“可操作的”——即工程师和操作人员以可测量和可验证的方式运行和维护。就我的目的而言,一个可操作的程序必须:
在 Scala 世界中,有很好的库可以处理至少前三个需求。例子:
至于部署,Scala 世界采用的一种方法是将构成程序的字节码和库与 assembly-sbt 之类的东西捆绑在一起。 ,然后使用 Capistrano 之类的工具将生成的包(“胖 JAR”)推送到远程服务器通过 SSH 并行执行命令。这不是需要特定语言工具的问题,但我很好奇 Haskell 社区中是否存在这样的工具。
可能有提供我上面描述的特征的 Haskell 库。我想知道哪些可用的库被认为是“最好的”;也就是说,它们是最成熟、维护良好、在 Haskell 社区中常用的,并且是 Haskell 最佳实践的典范。
如果有任何其他库、工具或实践可以使 Haskell 代码“生产就绪”,我也很想知道这些。
最佳答案
这是一个很好的问题!这是第一个剪辑。
Be able to log at multiple levels (ex: debug, warning, etc.).
hslogger很容易成为最流行的日志框架。
Be able to collect and share metrics/statistics about the types of work the program is doing and how long that work is taking. Ideally, the collected metrics are available in a format that's compatible with commonly-used monitoring tools like Ganglia, or can be so munged.
但是,我不知道有任何标准化的报告工具,从
+RTS -s
中提取报告。流(或通过分析输出标志)是我过去做过的事情。$ ./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 绑定(bind)到“rts/Stats.h”接口(interface))。您可以使用
ThreadScope
附加到进程。并监控 GC 和线程行为。类似的标志可用于增量记录 time和 space profiling,可用于监控(例如,这些 graphs 可以增量构建)。
hpc
通过其 Tix
收集大量有关程序执行的统计信息类型,人们有written tools按时间片记录正在执行的代码。Be configurable, ideally via a system that allows configured properties in running programs to be updated without restarting said programs.
有几个工具可以做到这一点,你可以做 xmonad 风格的状态重载;或通过
plugins
升级到代码热交换* 包或 hint
.其中一些比其他的更具实验性。Reproducible deployments
伽罗瓦最近发布
cabal-dev
,这是一种用于进行可重现构建的工具(即依赖关系是范围和受控的)。
关于logging - 哪些是运行程序的最佳 Haskell 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808825/