為什麼 GHC 不預設將所有的 Dict Passing 都 Specialize 掉?

時間 2021-05-31 05:08:19

1樓:CJex

除了高階型別外,還要考慮分離編譯。GHC 開啟 -O 就會自動對 Local 函式進行 Specialize 。需要注意的是,如果不寫 module export list,就會預設 export 所有函式。

如果乙個被 export 函式在本地 module 中有可以 Specialize 的呼叫,GHC開啟優化也會為本地呼叫 Specialize 乙份。( ghc -O -ddump-simpl 有真相

2樓:「已登出」

cat main.c

int main()

gcc -S main.c

cat main.s

.section __TEXT,__text,regular,pure_instructions

.macosx_version_min 10, 13.globl _mainBegin function main.p2align 4, 0x90

_mainmain

.cfi_startproc

## BB#0:

pushq %rbp

Lcfi0:

.cfi_def_cfa_offset 16Lcfi1:

.cfi_offset %rbp, -16movq %rsp, %rbp

Lcfi2:

.cfi_def_cfa_register %rbpxorl %eax, %eax

movl $0, -4(%rbp)

movl $42, -8(%rbp)

movl $42, -12(%rbp)

movl -8(%rbp), %ecx

addl -12(%rbp), %ecx

movl %ecx, -16(%rbp)

popq %rbp

retq

.cfi_endprocEnd function.subsections_via_symbols(非技術性回答)

(也許大佬們能舉出各種各樣的例子來證明某優化策略在某情況下不穩定,但是 spesh 開不開這種事很有可能是一開始沒有,後來加上了,又不是痛點,就不設成預設了(社群都很忙的,沒空評估設定成預設的風險和收益,像 Haskell 這種高階社群(笑)會告訴你那裡有個 enable 的 flag))

為什麼一些RTS預設將玩家設為藍色,將敵人設為紅色

Clones 紅藍對立,很有可能和冷戰背景有關,雖然這麼說我沒什麼特別的依據。對於美中國人來說,紅色對應的前蘇聯在上個世紀有五十餘年的時間是最主要 敵人 而同時藍色則是星條旗的主色調 雖然也有紅色 這種敵我的顏色對應很有可能在美中國人的潛意識裡存在。這一對應在紅警裡自然是最明顯的。紅警是RTS鼻祖西...

你將所有的希望和期待放在了什麼地方?

徐紫宸 成為機械改造人,然後長久的活下去。只要有可能,在度過足夠長的時間後,就會成真。我只是想著,人類從一出生於世上,便承受著自己的命運,在人生的幾近五分之一的時光裡,他們只是,依附在他人的命運上的孩子。他們必須順從著別人的意志和他人的願望活下去。只是,就像在出生時就被上了幾乎一生都難以跨過的罪枷。...

為什麼有的人明明不缺乏努力所需的時間,精力,金錢和智商,那他為什麼還要通過投機取巧的方式上位呢?

還是會寂寞 努力是一種能力。不是每個人你說你會努力你就能努力的,你不一定能專心,你不一定能堅持,你不一定能努力的做一件事。既然有了不用很努力就能做到的方法也就是投機取巧,那麼他肯定會選擇。 Gravity 雖然不缺,但還是要省著用,尤其是自己不喜歡的。對於喜歡的東西,大家都熱衷享受過程 而那些迫於現...