usos proyectos programacion para lenguajes lenguaje inteligencia funcionales español entornos desarrollo con caracteristicas artificial emacs dynamic haskell static lisp

emacs - programacion - proyectos con haskell



Utiliza tanto lenguajes fuertemente testados estáticos como Haskell como lenguajes dinámicos(fuertes) como Common LIsp (5)

Estás abriendo varias latas de gusanos muy retorcidos. En primer lugar, todos los lenguajes fuertemente contra los de tipo débil pueden hacerlo. En segundo lugar, el lenguaje funcional vs imperativo puede.

(En realidad, tengo curiosidad: con el "dialecto lisp" ¿te refieres a Clojure por casualidad? Porque en gran medida es funcional y más cercano a Haskell).

Bueno entonces. En primer lugar, puede escribir casi cualquier programa en casi cualquier idioma normal, con más o menos esfuerzo. La supuesta ventaja de una tipificación fuerte es que se puede detectar una gran clase de errores en tiempo de compilación. Por otro lado, los lenguajes menos típicos pueden ser más fáciles de codificar. Common Lisp es interesante porque es un lenguaje dinámico con la opción de declarar y usar tipos más fuertes, lo que le da al CL compilaciones sobre cómo optimizar. (Ah, y Common Lisp real generalmente se implementa con un compilador, que le da la opción de compilar o seguir con el código interpretado).

Hay una serie de estudios sobre la comparación de idiomas sin tipo, débilmente tipados y fuertemente tipados. Estos estudios invariablemente dicen que uno de ellos es mejor o dicen que no hay diferencia observable. Sin embargo, hay poco acuerdo entre los estudios.

El área más grande en la que puede haber una clara ventaja es en el manejo de especificaciones complicadas para problemas matemáticos. En esos casos (los algoritmos criptográficos son un ejemplo), un lenguaje funcional como Haskell tiene ventajas porque es más fácil verificar la correspondencia entre el código Haskell y el algoritmo subyacente.

Estaba trabajando con un dialecto Lisp pero también aprendí algo de Haskell también. Comparten algunas similitudes, pero la principal diferencia en Common Lisp parece ser que no tienes que definir un tipo para cada función, argumento, etc., mientras que en Haskell lo haces. Además, Haskell es principalmente un lenguaje compilado. Ejecute el compilador para generar el ejecutable.

Mi pregunta es: ¿hay diferentes aplicaciones o usos en los que un lenguaje como Haskell tenga más sentido que un lenguaje más dinámico como Common Lisp? Por ejemplo, parece que Lisp podría usarse para una programación más profunda, como en la creación de sitios web o GUI, donde Haskell podría usarse donde se necesitan más comprobaciones de tiempo de compilación, como en la construcción de servidores TCP / IP o analizadores de código.

Aplicaciones Lisp populares: Emacs

Aplicaciones populares de Haskell: PUGS Darcs

¿Estás de acuerdo y hay algún estudio sobre esto?


Haskell es un lenguaje funcional puro. Si bien permite construcciones imperativas (usando mónadas), generalmente obliga al programador a pensar el problema de una manera bastante diferente, utilizando un enfoque más orientado a las matemáticas. No puede reasignar otro valor a una variable, por ejemplo.

Se afirma que esto reduce la probabilidad de cometer algunos tipos de errores. Además, los programas escritos en Haskell tienden a ser más cortos y concisos que los escritos en lenguajes de programación típicos. Haskell también hace un uso intensivo de la evaluación no estricta y perezosa, que teóricamente podría permitir al compilador realizar optimizaciones que de otro modo no serían posibles (junto con el paradigma de los efectos sin efectos secundarios).

Ya que me lo preguntaste, creo que el sistema de tipeo de Haskell es bastante bueno y útil. No solo detecta errores comunes, sino que también puede hacer que el código sea más conciso (!) Y puede reemplazar constructos orientados a objetos de los lenguajes de OO comunes.

Algunos kits de desarrollo de Haskell, como GHC, también cuentan con entornos interactivos.


Los lenguajes de programación son herramientas para pensar. Puede expresar cualquier programa en cualquier idioma, si está dispuesto a trabajar lo suficiente. El valor principal proporcionado por un lenguaje de programación sobre otro es cuánto apoyo le brinda para pensar sobre los problemas de diferentes maneras.

Por ejemplo, Haskell es un lenguaje que enfatiza el pensamiento sobre su problema en términos de tipos. Si hay una manera conveniente de expresar su problema en términos de los tipos de datos de Haskell, probablemente encontrará que es un lenguaje conveniente para escribir su programa.

Las fortalezas de Common Lisp (que son numerosas) radican en su naturaleza dinámica y su homoiconicidad (es decir, los programas Lisp son muy fáciles de representar y manipular como datos de Lisp) - Lisp es un "lenguaje de programación programable". Si su programa se expresa más fácilmente en un nuevo lenguaje específico de dominio, por ejemplo, Lisp hace que sea muy fácil hacerlo. Lisp (y otros lenguajes dinámicos) son adecuados si la descripción de su problema se refiere a datos cuyo tipo está mal especificado o puede cambiar a medida que avanza el desarrollo.

La elección del idioma es a menudo una decisión tan estética como cualquier otra cosa. Si los requisitos de su proyecto no lo limitan a idiomas específicos por motivos de compatibilidad, dependencia o rendimiento, también puede elegir el que más le guste.


Vengo principalmente desde una perspectiva de Common Lisp, y, por lo que puedo ver, Common Lisp es adecuado para cualquier aplicación.

Sí, el valor predeterminado es tipado dinámico (es decir, detección de tipo en tiempo de ejecución), pero puede declarar tipos de todos modos para la optimización (como nota al margen para otros lectores: CL está fuertemente tipado, ¡no confunda débil / fuerte con estático / dinámico!) .

Me imagino que Haskell podría ser un poco más adecuado como reemplazo de Ada en el sector de la aviónica, ya que obliga al menos a todas las comprobaciones de tipo en el momento de la compilación.

No veo cómo CL no debería ser tan útil como Haskell para servidores TCP / IP o analizadores de código, sino todo lo contrario, pero mis contactos con Haskell han sido breves hasta ahora.


El mejor uso para el tipado dinámico que he encontrado es cuando dependes de cosas sobre las que no tienes control, por lo que también podrían usarse dinámicamente. Por ejemplo, al obtener información del documento XML, podríamos hacer algo como esto:

var volume = parseXML("mydoc.xml").speaker.volume()

El hecho de no usar el método de pato llevaría a algo como esto:

var volume = parseXML("mydoc.xml").getAttrib["speaker"].getAttrib["volume"].ToString()

El beneficio de Haskell por otro lado es en seguridad. Por ejemplo, puedes asegurarte, usando tipos, que los grados en Fahrenheit y Celsius nunca se mezclan involuntariamente . Además de eso, encuentro que los lenguajes tipados estáticamente tienen mejores IDEs.