Erlang のバイナリ ツリーの実装で遊んでいます。アイデアを提供するコードの一部を次に示します。
-record(node, {key, value, left, right}).
% ...
insert(Tree, {Key, Value}) when Key == Tree#node.key ->
#node{key=Key,
value=Value,
left=Tree#node.left,
right=Tree#node.right};
insert(Tree, {Key, Value}) when Key > Tree#node.key ->
Tree#node{right=insert(
Tree#node.right, {Key, Value})};
% ...
ここで、新しいキーと値をツリーに挿入すると、ノードが挿入 (または変更) された新しいツリーが返されます。
質問: VM は実際にツリーと GC を古いものにコピーしますか (これは非効率的です)、または古いブランチへの参照をコピーして、新しいキーの影響を受けるノード/ブランチのみを変更しますか?
関連している: