【发布时间】:2016-11-09 22:23:43
【问题描述】:
是否可以在程序中设置RTS 选项?
具体来说,我想实现的一样
./my-prog +RTS -M4G
我知道使用 haskell 堆栈,您可以在编译时决定一些 RTS 选项。但我不想在编译时修复这些选项,因为我希望我的程序从配置文件中读取这些选项并让它知道这些选项。
GHC 可以做到这一点吗?
【问题讨论】:
是否可以在程序中设置RTS 选项?
具体来说,我想实现的一样
./my-prog +RTS -M4G
我知道使用 haskell 堆栈,您可以在编译时决定一些 RTS 选项。但我不想在编译时修复这些选项,因为我希望我的程序从配置文件中读取这些选项并让它知道这些选项。
GHC 可以做到这一点吗?
【问题讨论】:
您可以编写一些 C 代码并覆盖一些 GC 挂钩,但最简单的方法可能是让脚本设置环境变量。 GHC 用户指南列出了可以设置 RTS 选项的 4 种方式: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html#setting-rts-options
有四种设置RTS选项的方法:
在+RTS ... -RTS之间的命令行上,运行程序时 (在命令行设置 RTS 选项)
在编译时,使用 -with-rtsopts(在编译时设置 RTS 选项 时间)
使用环境变量 GHCRTS(使用 GHCRTS 环境变量)
通过覆盖运行时系统中的“钩子”(“钩子”来更改 RTS 行为)
【讨论】:
我不相信这样的选项可以在程序本身内设置,但肯定可以在运行时设置,配置解析只需要在您希望为其设置 RTS 选项的程序之外。您可以编写一个程序/脚本来读取配置并运行您的目标程序并传递所需的选项。
【讨论】: