Может быть, однажды у нас будет это.

-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 было бы чрезвычайно расточительным. Например, если запись была размером в мегабайт, и я сделал тысячу «копий», каждый из которых изменял пару байтов, я просто сжег гигабайт. Если внутренняя структура отслеживала представление родительской структуры, и каждая производная размечала этого родителя таким образом, который указывал на его собственное изменение, но сохранял версии каждого другого пользователя, производные могли быть созданы с минимальными накладными расходами памяти.

Мой вопрос заключается в следующем: Эрланг делает что-то умное - внутренне - чтобы сохранить накладные расходы обычной писанины Эрланга;

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)

... до минимума?

Я спрашиваю, потому что было бы много изменений в способе, которым я сделал межпроцессное взаимодействие, если бы это было так.

Ответы на вопрос(4)

Ваш ответ на вопрос