mastodon.cardina1.red は、数々の独立したMastodonサーバーのうちのひとつです。サーバーに登録してFediverseのコミュニティに加わってみませんか。

サーバーの情報

3
人のアクティブユーザー

v[i + 1] += v[i];

AddAssign::add_assign(IndexMut::index_mut(&mut v, i + 1), *Index::index(&v, i));
にしたら immutable な borrow と mutable な borrow を同時にするなと言われたので、演算子の場合のみ評価順序をあれこれする系の規則でもあるのかな

どうも演算子向けには特別に two-phase borrow (最初に引数の immutable borrow の式を処理してから親の式を処理する) が有効化されてるっぽい?

組込みだと右辺の引数側を評価したあとで左辺への mutation を行うので特例でなんとかできるんだけど、ユーザ定義の AddAssign だと第一引数である左辺の &mut 参照 (つまり AddAssign の self?) が先に評価されてその後で右辺の評価が起きるので two-phase borrow がうまいこといかない、みたいな感じか

借用検査は組込の複合代入演算子に対して特殊な動作を行う - 何とは言わない天然水飲みたさ
blog.cardina1.red/2019/07/29/b

書いた