Veo una gran cantidad de temas relacionados con la programación funcional mencionar actualizaciones destructivas. Entiendo que es algo similar a la mutación, así que entiendo la parte de actualización. Pero, ¿cuál es la parte destructiva? ¿O estoy simplemente pensando demasiado?¿Qué es una actualización destructiva?
Respuesta
Probablemente esté pensando demasiado. La mudabilidad es todo lo que hay para eso; lo único que se "destruye" es el valor anterior de lo que haya mutado.
Supongamos que está utilizando algún tipo de árbol de búsqueda para almacenar valores y desea insertar uno nuevo. Después de encontrar el lugar en el que los nuevos valores se va, usted tiene dos opciones:
con un árbol inmutable, que la construcción de nuevos nodos a lo largo de la ruta desde el nuevo valor hasta la raíz. Los subárboles que no se encuentran a lo largo de la ruta se reutilizan en el nuevo árbol, y si todavía tiene una referencia a la raíz del árbol original, puede usar ambos, con los subárboles comunes compartidos entre ellos. Esto ahorra espacio sin esfuerzo adicional si tiene muchas copias ligeramente diferentes flotando, y por supuesto tiene todos los beneficios habituales de las estructuras de datos inmutables.
Con un árbol mutable, se adjunta el nuevo valor donde pertenece y eso es todo; nada más tiene que ser cambiado. Esto es casi siempre más rápido, y economiza la asignación de memoria si solo tiene una copia, pero cualquier cosa que tuviera una referencia al árbol "viejo" ahora tiene una referencia a la nueva. El original ha sido destruido; se ha ido para siempre Si necesita conservar el original, debe evitar la creación de una copia completamente nueva de todo antes de cambiarlo.
Si "destrucción" parece una manera innecesariamente duras para describir un simple actualización en el lugar, entonces usted probablemente no pasaba tanto tiempo como he depuración de código con el fin de averiguar dónde en la Tierra algún valor está siendo cambiado a tus espaldas.
¡Bien dicho! Aunque no creo que sea tan destructivo como duro. Simplemente me pareció redundante. Siempre pensé en la actualización como una mutación de todos modos. Pero supongo que destructivo agrega el muy necesario énfasis y precaución al término. :-) – Plumenator
@Plumenator: Sí. La "actualización" es muy futurista y optimista, pero las desventajas de la mutabilidad casi siempre involucran cuestiones de lo que las cosas * fueron *, no lo que son ahora. Así que el término "actualización destructiva" es bueno para equilibrar las cosas y dejar en claro que ambos están cruzando puentes y quemándolos detrás de ustedes. –
- 1. ¿Qué es una actualización http?
- 2. ¿Qué es una actualización de ventana TCP?
- 3. ¿Es posible programar una actualización de svn?
- 4. ¿Cómo puedo obtener una vista previa de una consulta SQL destructiva?
- 5. Eliminación de entidades de forma no destructiva en Symfony2
- 6. Software de cancelación de sonido (interferencia destructiva) ¿herramientas en Linux?
- 7. ¿Cómo es una actualización de mesa manejado por un RDBMS?
- 8. actualización WPF PathGeometry es _SLOW_
- 9. T-SQL: ¿qué COLUMNAS han cambiado después de una actualización?
- 10. ¿Por qué estoy causando una actualización de índice agrupado?
- 11. ¿Por qué NSUserDefaults devuelve una cadena desasignada? (Actualización # 2)
- 12. ¿Con qué frecuencia se activan las activaciones de actualización en una actualización de múltiples registros?
- 13. Actualización de una matriz
- 14. ¿Por qué no hay una "actualización del paquete heroku"?
- 15. ¿Qué es una ObjectMother?
- 16. ¿Qué es una corrutina?
- 17. ¿Qué es una corriente?
- 18. ¿Qué es una subclase
- 19. ¿Qué es una proyección?
- 20. ¿Qué es una unión?
- 21. ¿Qué es una "Unidad"?
- 22. Campo de actualización cuando no es nulo
- 23. Borrar NSMutableArray para una actualización
- 24. Buscar una actualización de subversión
- 25. SafeModeResult es nulo después de la actualización
- 26. ¿Qué es y qué no es una historia de usuario?
- 27. ¿Qué es una interfaz fluida?
- 28. ¿Qué es una consulta ilimitada?
- 29. MySQL: ¿Qué es una página?
- 30. BDD, ¿qué es una función?
Como ejemplo: una actualización destructiva sería ordenar una lista en el lugar, mientras que una no destructiva sería crear una copia ordenada. Destructivo sería cambiar un elemento de matriz, una propiedad de objeto ... cualquier cosa que actúe sobre el objeto/datos originales. –