7

me preguntaba acerca de los beneficios de la programación sin estado, y encontré a alguien que comparte mi pregunta: Advantages of stateless programming?ventajas de la programación con estado?

Al leer las respuestas, sin embargo, me hizo curioso sobre la pregunta inversa. ¿Cuáles son las ventajas de la programación con estado? parece que hay un gran enfoque en el código sin estado recientemente, pero desconfío de las tendencias.

parece que la programación con estado (es decir, imperativa) podría prestarse a ciertos escenarios mejor que la programación sin estado (es decir, funcional), y me gustaría poder reconocer mejor qué problemas pueden resolverse mediante una programación con estado.

+0

Creo que su pregunta es una pregunta legible en su núcleo, sin embargo debe mejorarla: elimine el último párrafo (es subjetivo) y trate de establecer activamente qué tipo de respuesta está esperando. –

+1

¿por qué se cerró esta pregunta, mientras que la pregunta inversa (vinculada a arriba) no lo era? – ericsoco

+0

@JohannesRudolph: anotado y editado. – ericsoco

Respuesta

6

Existen solo unos pocos casos en los que existen ventajas no debatibles para un modelo de programación basado en un estado compartido y mutable en comparación con un modelo de programación inmutable y sin estado. Un área donde la mutabilidad puede aportar enormes ventajas es permitir que los algoritmos funcionen en el lugar. La wiki de haskell tiene un gran ejemplo sobre la implementación de quicksort: http://www.haskell.org/haskellwiki/Introduction#When_C_is_better

Para resumir, cuando no permite modificaciones en la memoria de la lista, debe crear una copia ordenada de la misma. Lo mismo es cierto para casi cualquier otro algoritmo que modifique alguna estructura de datos, p. un árbol AVL.

En general, los lenguajes de programación funcionales tienden a ser más intensivos en memoria que sus contrapartes imperativas. La memoria es barata hoy en día, sin embargo, el ancho de banda es crucial y las velocidades de memoria no aumentan proporcionalmente al aumento que vemos en la potencia de la CPU. Sin embargo, se debe tener en cuenta que el modelo de ejecución de Haskell permite al compilador realizar algunas optimizaciones ingeniosas, también en lo que respecta al uso de la memoria y los patrones de acceso. Hasta cierto punto, esto puede compensar las desventajas teóricas.

1

La legibilidad es la clave. Me gusta la programación funcional (actualmente estoy en un atracón de clojure), pero el estado es cómo funciona el mundo. No es accidental que el paradigma orientado a objetos sea más popular que el funcional o cualquier otro tipo de programación. OOP y programación de procedimientos son la ruta de menor resistencia para los nuevos programadores. La mayoría de las personas entiende intuitivamente la idea de un objeto como algo que cambia de estado (se puede mover o cambiar de color, etc.) en lugar del combinador en Y que ayuda con la recursión.

+0

No sé si compro esto. Después de todo, una de las razones por las que son "el camino de menor resistencia" es porque los lenguajes OOP ya son tan populares, lo que significa que tienen más tutoriales, más herramientas, más IDE, más de todo. Pero la popularidad no significa simplicidad conceptual. – thedayturns

+0

Estoy de acuerdo con eso para algunos idiomas (un POO bien implementado es muy bueno). Mi punto era que la gente piensa en estado. El mundo en sí mismo es solo una máquina de estados finitos. – semisight

+3

"estado es cómo funciona el mundo" - una hipótesis filosófica altamente especulativa. Uno podría responder: "La matemática y la mecánica cuántica es cómo funciona el mundo (y bajo ciertas circunstancias parece haber estado)". – Ingo

1

El estado es importante. Cada bit en este universo tiene estado, es el estado que define cómo se comporta un sistema, el estado hace que el sistema sea dinámico y utilizable, pero como el estado es tan importante, también es importante cómo se accede y manipula este estado. No sería bueno si cualquier ser humano puede manipular el estado de otro ser humano (el estado como el contenido en el cerebro de un ser humano). Mi opinión sobre el estado es que debe hacerse explícito y no debe ser algo que esté disperso en su código y se vuelva muy implícito que es difícil saber en qué estado se encuentra el sistema y qué parte del sistema es responsable de qué parte del Estado. El estado debe controlarse de tal manera que pueda decir fácilmente que esta parte del estado del sistema es manejada por este módulo y solo este módulo.

En cualquier programa FP del mundo real, siempre tendrá 2 partes, una que es apátrida, que sería su algoritmo central, etc. y otra parte que mantendrá el estado del programa.

Cuestiones relacionadas