given:
-record(foo, {a, b, c}).
我做了这样的事情:
Thing = #foo{a={1,2}, b={3,4}, c={5,6}},
Thing1 = Thing#foo{a={7,8}}.
从语义角度来看,Thing 和 Thing1 是唯一的实体。然而,从语言实现的角度来看,制作 Thing 的完整副本来生成 Thing1 会非常浪费。例如,如果记录大小为一兆字节,并且我制作了一千个“副本”,每个副本修改了几个字节,那么我就烧毁了一个千兆字节。如果内部结构跟踪父结构的表示,并且每个派生结构以指示其自己的更改但保留其他人的版本的方式标记该父结构,则可以以最小的内存开销创建派生结构。
我的问题是这样的:erlang 是否在内部做了一些聪明的事情来保持通常的 erlang 乱写的开销?
Thing = #ridiculously_large_record,
Thing1 = make_modified_copy(Thing),
Thing2 = make_modified_copy(Thing1),
Thing3 = make_modified_copy(Thing2),
Thing4 = make_modified_copy(Thing3),
Thing5 = make_modified_copy(Thing4)
……最小化?
我之所以这么问,是因为如果是这种情况,我进行跨进程通信的方式将会发生很多变化。