言語仕様の拡張案2
技術的に実装できそうな見通しは立っています。
postは関数呼び出し前にコールスタックを1つ分用意し、old-valueを退避させています。それと同じ要領で、代入文を実行する前に似たものを用意し、old-valueを退避させます。そして代入後にinvを評価します。多重代入文も同様です。
ただ、多重代入文はネストする可能性があります。
以下のように代入する値に操作が使われ、その操作の中に多重代入文を使っている場合が。
こういう場合、本当に問題ないのかどうか、読みきれていません。
マルチスレッドや排他も絡んでくるからなぁ〜。
public hoge: () ==> () hoge() == atomic ( x := foo(); y := obj.goo(); ); foo: () ==> int foo() == ( atomic( x := 1; ) return 1; );