Optimization 为什么ghc在其自身构建中通过了相互矛盾的优化标志?
我再次从源代码构建GHC(在ARM上,因为没有二进制版本),并注意到它在某个时候会这样做:Optimization 为什么ghc在其自身构建中通过了相互矛盾的优化标志?,optimization,compilation,ghc,Optimization,Compilation,Ghc,我再次从源代码构建GHC(在ARM上,因为没有二进制版本),并注意到它在某个时候会这样做: "inplace/bin/ghc-stage1" -static -optc-DTHREADED_RTS -optc-DDEBUG -H32m \ -O -Iincludes -Iincludes/dist -Iincludes/dist-derivedconstants/header \ -Iincludes/dist-ghcconstants/header -Irts -Irts/
"inplace/bin/ghc-stage1" -static -optc-DTHREADED_RTS -optc-DDEBUG -H32m \
-O -Iincludes -Iincludes/dist -Iincludes/dist-derivedconstants/header \
-Iincludes/dist-ghcconstants/header -Irts -Irts/dist/build -DCOMPILING_RTS \
-package-name rts -dcmm-lint -i -irts -irts/dist/build \
-irts/dist/build/autogen -Irts/dist/build -Irts/dist/build/autogen \
-O2 -O0 -c rts/StgMiscClosures.cmm -o rts/dist/build/StgMiscClosures.thr_debug_o
好的,这是一个命令中的-O
,-O2
和-O0
原因是什么?在这种情况下,哪个标志优先?
processArgs
从左到右处理命令行参数(请参阅)。此外,-O
标志的语义使得它们每个都打开/关闭单个优化的特定子集(请参阅)因此,在您的示例中,-O0
“赢”,因为它覆盖了-O
和-O2
processArgs
从左到右处理命令行参数(请参阅)。此外,-O
标志的语义是这样的:它们每个都打开/关闭单个优化的特定子集(请参阅).因此,在您的示例中,-O0
“wins”因为它覆盖了-O
和-O2
Ok的效果。GHC构建通过使用命令行作为一种调用堆栈来利用这一点,隐藏不需要的、不太具体的标志,而不费事删除前面的标志?似乎是这样,是的。好的。GHC构建通过使用命令行作为一种调用来利用这一点大头钉,不需要的阴影,不太具体的旗帜,而不费心删除前面的那些?似乎是这样,是的。