Gauche > Archives > 2021/05/31

2021/05/31 09:50:21 UTCshiro
#
最近のsrfiになるデータ構造のトレンドは、原則immutableにしといてlinear updateバージョンも提供する、というものだけど、このモデルっていまいちのような気がしてきた。linear updateバージョンを使うには「渡すデータを二度と使わない
#
という保証が要るけど、そのためにはデータが共有されてないことをトラックできないとならない。そうなると、functionalなバージョンで、「データ構造に変更がない場合は引数そのまま返しておこう」というのができなくなる。引数そのまま返されると共有が生じるので。でも、せっかくimmutableな構造は共有できるのに「必ずコピーする」となってしまうのは悲しい。
#
むしろ、immutableかmutableかのフラグをつけておき、linear updateバージョンは引数がmutableなら再利用(してもよい)、immutableならコピーする、functionalバージョンは引数に変更が無ければそのまま返しても良い、とした方が良くないだろうか。
#
(次善の策として、linear updateに渡すのはmutableでなくてはならない、としておき、「引数がimmutableならコピー、mutableならそのまま返す」という手続きを別に持っておいても良いが、明示的にmutateするインタフェースが無いならlinear updateの中に包含してしまった方がすっきりするだろう)