2009-11-02 22 views
18

que no entiendo, cómo compiladores FP hacen que el código se trata de estructuras de datos inmutables, no estallar pila rápido, etc.programación funcional: inmutable eficiencia de la estructura de datos

Por ejemplo, inserte la operación en el árbol, que tiene para copiar todo el árbol antes de agregar el nuevo nodo y devolver el árbol copiado, frente a la parte de cumbre imperativa que solo necesita agregar un puntero al nuevo nodo. Si la operación de inserción se ejecuta millones de veces, tomaría una carga de memoria, y la copia será más lenta y lenta cuando el árbol sea más grande. ¿Cómo los compiladores de FP realmente optimizan esto?

Respuesta

15

No tiene que copiar todo el árbol para hacer un cambio; puedes compartir la mayor parte de la estructura. Ver p. los diagramas en this blog, o this talk por Rich Hickey en Clojure (ver la discusión de los intentos de hash a la mitad).

+0

http://en.wikipedia.org/wiki/Hash_array_mapped_trie –

+0

http://en.wikipedia.org/wiki/Persistent_data_structure –

+0

Diagrama de enlace del blog está muerto, si puede encontrar otro enlace por favor, actualice su respuesta, gracias! –

7

El compilador realmente no optimizará esto, es algo que tiene que programar específicamente al codificar. Las técnicas para hacer esto se explican en las excelentes Estructuras de Datos Puramente Funcionales (book, thesis).

-4

Si el recolector de basura hace su trabajo, las copias antiguas de la estructura de datos se recuperarán cuando ya no se utilicen.

+0

¿Puedo preguntar por qué votar esta respuesta? Supongamos que quiero mover el mismo conjunto a través de algunas modificaciones y mantener las cosas funcionales, ¿no sería útil saber que GC recogerá las partes que ya no están en uso? –

+1

No responde de ninguna manera a la pregunta. –

Cuestiones relacionadas