En mi experiencia, las estructuras de datos para el módulo de la biblioteca no se degradan en el rendimiento o la presión de la memoria cuando se hacen más grandes.
Para un dict, utiliza una tabla hash dinámica como estructura interna de datos y el trabajo se realiza esencialmente solo en el depósito donde se realiza la modificación.
miré también en el módulo gb_trees
donde me encontré con el siguiente comentario:
El comportamiento es logarítmica (como debe ser).
Y gb_trees
son generalmente bastante rápidos, así que estoy bastante seguro de que no se están realizando muchas copias.
Generalmente, si implementa estructuras de datos como estas en un lenguaje como Erlang, se ocupa de los problemas de copia, por lo que no hay necesidad de preocuparse por las funciones generales de la biblioteca.
vuelvo a leer el artículo sobre estructuras de datos persistentes: en el sentido de este artículo, las estructuras de datos de Erlang son totalmente persistente y también confluently persistente.
bien, no vamos a discutir aquí los punteros y los valores, la diferencia es clara para mí, el punto es cómo operar con grandes almacenes de clave-valor en memoria que tiene persistencia (por lo que no hay nada). Mencioné que en clojure durante la modificación de algún valor, solo se copia el camino de la raíz a ese valor (3-4 nodos) y tenemos dos árboles: el nuevo y el anterior. ¿Cómo podemos hacer esto en erlang? ¿Alguna estructura de la caja implementa dicho comportamiento? – adolgarev
'A = SomeTree, B = cambio (A).'Ahora tiene el Árbol B y el Árbol A, donde 'B' es el nuevo y 'A' es el anterior. Usar' {A, B} 'coloca a ambos árboles en la misma tupla. ¿Es esto lo que querías saber? –
nop, necesito A = SomeTree, B = cambio (A), y A y B comparten alguna pieza común, vea http://en.wikipedia.org/wiki/Purely_functional#Trees – adolgarev