Ответ 1
Использование GHCRTS=... runghc ...
в качестве chi говорит, что это единственный способ. Из-за того, как runghc
интерпретирует свою командную строку, +RTS
интерпретируется как параметры RTS для самого runghc
(если это в конце) или как имя программы (если оно в начале). Он никогда не достигает времени выполнения. Вы можете принудительно передать его в программу с помощью --RTS +RTS ...
, но затем он рассматривается как аргумент программы и до сих пор не отображается средой выполнения.
Чтобы исследовать это, я написал оболочку оболочки script для ghc
, которая отслеживает ее аргументы и передает это значение в runghc
с опцией -f
.
Создайте файл ghc-wrapper
, содержащий:
#!/bin/sh -x
exec ghc "[email protected]"
Опция -x
сообщает /bin/sh
проследить каждую строку. Используйте это с помощью runghc
:
$ runghc -f ./ghc-wrapper Hello.hs
+ exec ghc -ignore-dot-ghci -x hs -e :set prog "Hello.hs" -e :main [] Hello.hs
Hello, World!
$ runghc -f ./ghc-wrapper Hello.hs +RTS -s
+ exec ghc -ignore-dot-ghci -x hs -e :set prog "Hello.hs" -e :main [] Hello.hs
Hello, World!
114,016 bytes allocated in the heap # runghc heap, not Hello's
...
$ runghc -f ./ghc-wrapper Hello.hs --RTS +RTS -s
+ exec ghc -ignore-dot-ghci -x hs -e :set prog "Hello.hs" -e :main ["+RTS","-s"] Hello.hs
Hello, World!
$ runghc -f ./ghc-wrapper -- +RTS -s -RTS Hello.hs
+ exec ghc -ignore-dot-ghci -e :set prog "+RTS" -e :main ["-s","-RTS","Hello.hs"] +RTS
+RTS:1:55:
Not in scope: `main'
Perhaps you meant `min' (imported from Prelude)
Нам действительно нужно выполнить runghc
:
$ ghc -ignore-dot-ghci -x hs +RTS -s -RTS -e ':set prog "Hello.hs"' -e ':main []' Hello.hs
Hello, World!
80,654,256 bytes allocated in the heap
...
Но нет способа указать это, потому что runghc
не относится к +RTS
специально.