it-swarm-es.com

¿Deberíamos utilizar más lenguajes de programación lógicos y / o funcionales?

He programado un poco de Haskell y Prolog como parte de un par de cursos universitarios, pero eso es todo. Y nunca he visto que se use en la industria (no es que tenga mucha experiencia laboral para empezar, pero nunca he visto un anuncio en el que se requiera que los conozca).

Entonces, ¿deberíamos usar lenguajes de programación lógicos o funcionales con más frecuencia? ¿Existen ventajas o desventajas por usarlos o no usarlos?

8
gablin

Creo en utilizar la herramienta adecuada para el trabajo. Tanto los lenguajes imperativos como los funcionales tienen su lugar y no hay necesidad de presionar para usar un tipo más que el otro.

Por las ventajas/desventajas, no creo que pueda superar la respuesta de Eric Lippert a la "¿Por qué no se ha hecho cargo todavía la programación funcional?" SO pregunta.

9
Adam Lear

En primer lugar, porque el compilador tiene que hacer mucho más. Si desea crear un compilador imperativo, casi puede hacer una transformación 1-1 en ensamblador y el código producido tendrá una velocidad aceptable (seguro, podría haber mucho que hacer, pero es 'básicamente' compilación 1-1 + optimización). Los compiladores funcionales TIENEN QUE manejar bien el encadenamiento pesado, la optimización de llamadas finales, etc. Por lo tanto, la implementación de lenguajes funcionales era mucho más lenta que C/C++/... en el pasado (sin embargo, ganan mucha velocidad en cada iteración a medida que los compiladores mejoran).

En segundo lugar, los programadores están tan acostumbrados a afirmar que no pueden "aceptar" el enfoque de "no hay spoo ... estado". Claro, la falta de estado no es útil en cada condición, pero la falta de estado (global) no significa falta de estado local.

En tercer lugar, la programación funcional no tiene una buena historia detrás. El OOP tiene una buena historia ya que los objetos se asignan a los sustantivos y lo intuitivo que es. Luego, sabes que no es tan simple porque no puedes crear una clase Manager como subclase de Employee as Employee puede obtener un ascenso a Manager y tienes que jugar con los decoradores Los programas funcionales tienen una historia en matemáticas que, en mi humilde opinión, es más útil pero menos comercial.

Como internamente desde la perspectiva de la computadora, no hay diferencia entre la computación paralela y concurrente, muchos programadores no ven una diferencia y muchos lenguajes tienen las mismas primitivas para manejar ambos. Gracias a la falta de subprocesos locales estatales y ligeros en los lenguajes de programación funcionales, la paralelización del algoritmo es mucho más fácil. Sin embargo, la programación concurrente no se facilita automáticamente ya que la concurrencia se trata de un estado global.

Finalmente, hay muchos programas antiguos escritos en estilo operativo. Incluso la migración del lenguaje imperativo al lenguaje imperativo es mucho más simple que al funcional.

Hasta donde yo sé, los bancos de inversión comienzan a adoptar los programas funcionales internamente, por lo que SÍ entran en XXI c. (en un área muy importante, aunque oculta), por lo que ganan impulso.

PD. Si bien creo que los programas funcionales son "mejores" en el sentido de que ocultan la complejidad mejor que otros enfoques, no significa que no haya áreas como los scripts que sean inherentemente imperativas.

5
Maciej Piechotka

Un lenguaje de programación es una forma de representación de información. En este caso, las instrucciones que debe seguir la computadora. Sin embargo, la representación también es importante para el público objetivo (es decir, los programadores).

Los conceptos funcionales/lógicos no se utilizan con tanta frecuencia en la vida diaria como los conceptos de procedimiento. Si lee las instrucciones (es decir, cómo usar su televisor, reproductor de DVD o cómo construir algunos muebles de IKEA), en su mayoría están escritas de forma procedimental (aunque en lenguaje natural).

Por lo tanto, muchas personas que no están muy involucradas en matemáticas o ciencias a menudo están mucho más familiarizadas con estos conceptos de procedimiento que con los lógicos o funcionales.

Creo que esto tiene un gran impacto en la elección de qué clase de lenguaje de programación se usa. Al final, el conjunto de problemas que se pueden resolver con cualquiera de estos lenguajes de programación es prácticamente el mismo (siempre que estén completos).

Sin embargo, muchos lenguajes procedimentales obtienen cada vez más facetas de otros conceptos. Python puede hacer cálculos lambda y cierres, Ruby también. Javascript, que se usa mucho en la industria) es en realidad un lenguaje funcional (incluso la mayoría de la gente "usa indebidamente "es usándolo más de una manera procedimental). Por lo tanto, es realmente tarea del programador usar esas características apropiadamente donde encajen.

2
txwikinger