從是否與 environment 無關這點來看,lexical scope 與 dynamic scope 之間是有一個對偶關係的:
- 對 dynamic 的 abstraction 而言,在哪裡建立都一樣;然而 application 的時候結果就會跟著 environment 變化而變化
- 反過來,對 lexical 的 abstraction 而言 environment 是會影響 closure 到底 capture 到什麼的,所以不是 environment 無關;但對 application 來說,已經建立的 closure 在哪裡執行都一樣
也就是說 Landin 他們發現的是,人們預期 function application 是 environment 無關的。因此這也就成了大部分程式語言的選擇。
但這不意味著沒有其他的選擇,有一個叫做 Kernel 的程式語言就是利用 dynamic scope 的語意設計出不需要 phase distinction 的 macro system。而諸多類似 algebraic effect 的跳轉系統,也可以說是應用了 dynamic scope