memory - que - programacion funcional vs orientada a objetos
¿La programación funcional ocupa más memoria? (4)
¡Advertencia! posiblemente una pregunta muy tonta
¿La programación funcional consume más memoria que la programación de procedimientos? Quiero decir ... si sus objetos (estructuras de datos) son todos imutables. No termines teniendo más objetos en la memoria en un momento dado.
¿Esto no consume más memoria?
Además de evitar las copias defensivas del programador, una implementación muy inteligente de lenguajes de programación puramente funcionales como Haskell o Standard ML (que carecen de igualdad de punteros físicos) puede recuperar activamente el intercambio de valores estructuralmente iguales en la memoria, por ejemplo, como parte de la gestión de la memoria y la basura. colección.
Por lo tanto, puede tener el control de hash automático proporcionado por su lenguaje de programación en tiempo de ejecución-sistema.
Compare esto con los objetos en Java: la identidad del objeto es una parte integral de la definición del lenguaje. Incluso el solo cambio de una String
inmutable por otra plantea problemas semánticos.
De hecho, al menos hay una tendencia a considerar la memoria como un recurso rico (que, de hecho, en realidad lo es en la mayoría de los casos), pero esto se aplica a la programación moderna en su conjunto.
Con múltiples núcleos, recolectores de basura paralelos y RAM disponible en los gigabytes, uno solía concentrarse en diferentes aspectos de un programa que en épocas anteriores, cuando cada byte que se podía guardar contaba. ¿Recuerda cuando Bill Gates dijo "640K debería ser suficiente para cada programa"?
Depende de lo que estés haciendo. Con la programación funcional no tiene que crear copias defensivas, por lo que para ciertos problemas puede terminar usando menos memoria.
Muchos lenguajes de programación funcionales también tienen un buen soporte para la pereza, que puede reducir aún más el uso de la memoria ya que no crea objetos hasta que realmente los usa. Sin embargo, esto es posiblemente algo que solo se correlaciona con la programación funcional en lugar de una causa directa.
Los valores persistentes, que los lenguajes funcionales fomentan, pero que pueden implementarse en un lenguaje imperativo, hacen que compartir sea una tarea sencilla.
Aunque la idea generalmente aceptada es que con un recolector de basura, hay una cierta cantidad de espacio desperdiciado en un momento dado (ya no se puede acceder pero aún no se han recopilado bloques), en este contexto, sin un recolector de basura, terminas copiando los valores que son inmutables y podrían compartirse, solo porque es demasiado complicado decidir quién es el responsable de liberar la memoria después de su uso.
Estas ideas se amplían un poco en este informe de experiencia que no pretende ser un estudio objetivo sino solo una evidencia anecdótica.