AB-normalization [UQJG]

根據Imperative monadic form我們已經可以定義AB-reduction

(set! x (if0 v t1 t2))→AB(if0 v (set! x t1) (set! x t2))AB1(set! x (begin s⃗ t))→AB(begin s⃗ (set! x t))AB2\begin{aligned} (\text{set!}\ x\ (\text{if0}\ v\ t_1\ t_2)) \quad&\rightarrow_{AB}\quad (\text{if0}\ v\ (\text{set!}\ x\ t_1)\ (\text{set!}\ x\ t_2)) \quad &AB_1 \\ (\text{set!}\ x\ (\text{begin}\ \vec{s}\ t)) \quad&\rightarrow_{AB}\quad (\text{begin}\ \vec{s}\ (\text{set!}\ x\ t)) \quad &AB_2 \end{aligned}

這種方案避開了join points、編譯器不需要引入整套CPS風格、也不會造成程式碼膨脹(就像B-normalization),對stack使用最佳化(就像A-normalization)。這個做法的關鍵想法在于lexical expressions一定要在A-normalize之前先轉換成循序述句表達

AB-normalization還可以根據新的effect調整,像Bowman就展示了letregion的案例