D に (finally があるにもかかわらず) scope guard が採用されている理由も,上記の発想から考えれば「『プログラムの状態の変化の論理的な対』というのをプログラムの構成における1つの重要な要素と認めて,それが対であることを構文上明確にする」っていう方向性の進化として捉えられるんじゃにゃいかにゃー,っていう.
逆に言うと, finally の欠点って要するにこの「論理的な対」がコード上で分断されることだと思うんだよにぇ.っていうか,このスレッドにおける Andrei Alexandrescu の以下の発言に集約されてるけれど.
The problem with the code above is that the two logically paired actions are spread across the code. It's the exact kind of example that ScopeGuard puts to shame, because with ScopeGuard (and ON_BLOCK_EXIT) you can put a current and future action together, as a single unit.
あと,全然関係ないけれどこのブログで初めてD言語に言及した気がするよっ!お母様、私…… (D言語さんの許に) お嫁に行きますっ!