Estructuras de datos persistentes en Scala


¿Todas las estructuras de datos inmutables en Scala son persistentes? Si no, ¿cuáles son y cuáles no? ¿Cuáles son las características de comportamiento de los que son persistentes? Además, ¿cómo se comparan con las estructuras de datos persistentes en Clojure?

Author: Abhinav Sarkar, 2010-06-24

4 answers

Las estructuras de datos inmutables de Scala son todas persistentes, en el sentido de que el valor antiguo se mantiene mediante una operación `update'. De hecho, no conozco una diferencia entre inmutable y persistente; para mí los dos términos son alias.

Dos de las estructuras de datos inmutables 2.8 de Scala son vectores y intentos de hash, representados como árboles de 32 arios. Estos fueron diseñados originalmente por Phil Bagwell, que estaba trabajando con mi equipo en EPFL, luego adoptados para Clojure, y ahora finalmente adoptados para Scala 2.8. La implementación de Scala comparte una raíz común con la implementación de Clojure, pero ciertamente no es una adaptación de la misma.

 52
Author: Martin Odersky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-24 08:43:18

Por favor, echa un vistazo a estos excelentes artículos de Daniel Spiewak:
http://www.codecommit.com/blog/scala/implementing-persistent-vectors-in-scala
http://www.codecommit.com/blog/scala/more-persistent-vectors-performance-analysis

También se refiere a la implementación de Clojure.

 9
Author: Michel Krämer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-24 05:17:25

Lista, Vector, HashMap y HashSet son todos persistentes en Scala 2.8. Hay otras estructuras de datos persistentes, pero estas cubren todos los usos principales, no estoy seguro de que tenga sentido enumerarlas todas.

 6
Author: Daniel C. Sobral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-24 15:15:52

Para la última parte de su pregunta, recuerdo que Rich Hickey mencionó en una presentación que las estructuras de datos Clojure han sido portadas a Scala. Además, Michael Fogus menciona planes para Scala 2.8 para adoptar algunas de las estructuras de datos de Clojure en esta entrevista .

Lo sentimos, esto es tan corto en detalles... No estoy seguro de cuál es el estado de los planes de Scala 2.8 mencionados anteriormente, pero recordé a Rich y Michael mencionando esto y pensé que podría ser una cosa interesante para usted a Google por si estás interesado.

 4
Author: Michał Marczyk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-24 04:38:20