Erlang постоянные структуры данных - PullRequest
6 голосов
/ 05 ноября 2010

Как я понял, когда вы создаете новый список с выражением, подобным следующему, Erlang не копирует L1, он просто копирует H.

L2 = [H|L1]

Имеет ли Erlang постоянную структуру данных (см. Постоянная структура данных ) для dict, то есть, когда вы добавляете / удаляете / изменяете узлы в дереве, копируется только несколько элементов (как Clojure )

Ответы [ 2 ]

12 голосов
/ 05 ноября 2010

Вы неправильно поняли ситуацию, когда строили список, используя [H|T].Как вы говорите, T не копируется, но и H.Все, что происходит, это то, что новая ячейка списка добавляется к T со ссылкой на H в качестве ее головы (ее хвост - T).При работе со списками создаются только те биты, которые являются действительными ячейками списка, а не данные в каждой ячейке.

То же самое происходит при работе с dict.При изменении (добавлении / удалении элементов) в dict изменяется только фактическая структура dict, а не фактические данные в dict.Кроме того, он умен, так как копирует только небольшую часть структуры dict, необходимую для внесения изменений.

Так что, да, Erlang имеет постоянные структуры данных.В этом отношении clojure похож на Erlang (мы были задолго до него).

2 голосов
/ 05 ноября 2010

По моему опыту, структуры данных для библиотечного модуля не уменьшаются в производительности или нагрузке на память, когда они становятся больше.

Для dict он использует динамическую хеш-таблицу в качестве внутренней структуры данных, и работа выполняется, по существу, только в той корзине, где выполняется модификация.

Я также посмотрел в модуле gb_trees, где нашел комментарий:

Поведение логарифмическое (как и должно быть).

И gb_trees, как правило, довольно быстрые, поэтому я совершенно уверен, что копирование происходит не очень.

Как правило, если вы реализуете структуры данных, подобные этим, на языке, подобном Erlang, вы заботитесь о проблемах с копированием, поэтому нет необходимости беспокоиться об этом для общих функций библиотеки.


Я перечитал статью о постоянных структурах данных: в смысле этой статьи структуры данных Эрланга являются полностью постоянными и также устойчиво устойчивыми.

...