rlang implementa o registro copiar e modificar de qualquer maneira inteligent

dado

-record(foo, {a, b, c}).

Eu faço algo parecido com isto:

Thing = #foo{a={1,2}, b={3,4}, c={5,6}},
Thing1 = Thing#foo{a={7,8}}.

De uma visão semântica, Thing e Thing1 são entidades únicas. No entanto, do ponto de vista da implementação da linguagem, fazer uma cópia completa do Thing para gerar o Thing1 seria intensamente inútil. Por exemplo, se o registro tivesse um megabyte de tamanho e eu fiz mil "cópias", cada uma modificando alguns bytes, acabei de gravar um gigabyte. Se a estrutura interna controlasse uma representação da estrutura pai e cada derivado o marcasse de maneira a indicar sua própria alteração, mas preservasse as versões de todos os outros, os derivados poderiam ser criados com um mínimo de sobrecarga de memória.

Minha pergunta é a seguinte: Erlang está fazendo algo inteligente - internamente - para manter a sobrecarga do rabisco erlang de sempr

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)

... ao mínimo?

Pergunto, porque haveria várias alterações na maneira como eu processava as comunicações, se esse fosse o cas

questionAnswers(4)

yourAnswerToTheQuestion