programming pinecone make languages language how examples create programming-languages language-design

programming languages - pinecone - ¿El lenguaje no convencional más interesante?



programming languages pdf (30)

Estoy interesado en compiladores, intérpretes e idiomas.

¿Cuál es el idioma más interesante, pero olvidado o desconocido, que conoces? Y más importante, ¿por qué?

Me interesan tanto los lenguajes compilados, interpretados y de VM, pero no los idiomas esotéricos como Whitespace o BF.
El código abierto sería una ventaja, por supuesto, ya que planeo estudiar y espero aprender de ello.



Considero que los lenguajes restrictivos son interesantes, pero es difícil saber qué se considera olvidado o desconocido. Aquí hay algunos idiomas que conozco (esta no es una lista exhaustiva de ningún tipo):

  • Ciao , YAP , SWI-Prolog y GNU Prolog son todas las implementaciones de Prolog. Creo que todos son de código abierto. Ciao, gnu prolog, y probablemente los otros también, como es común en las implementaciones de Prolog, admiten otros tipos de restricciones. Programación entera, por ejemplo.
  • Mozart y Mercury son, como yo lo entiendo, lenguajes de programación lógicos alternativos.
  • Alice está más en la familia ML, pero admite la programación de restricciones utilizando la biblioteca GECODE C ++.

Se está desviando un poco del tema ...

  • Maude es un término interesante para reescribir el lenguaje.
  • HOL y COQ son sistemas de prueba mecanizados que se utilizan comúnmente en la comunidad de idiomas.

Lambda-the-Ultimate es un buen lugar para hablar y aprender más sobre los lenguajes de programación.


Es imprescindible aprender cualquier idioma que requiera que reconsidere sus hábitos de programación. Un signo seguro es el ritmo con el que se pasa revista a la documentación del núcleo de un idioma (no de la biblioteca). Rápido significado infructuoso aquí.

Mi breve lista sería, en mi orden de exposición y cuáles fueron los conceptos que aprendí de ellos:

  • Assembly, C: ideal para los indicadores de aprendizaje y su aritmética.
  • C ++: lo mismo que C con una introducción a los genéricos, siempre que pueda soportar la sintaxis increíblemente detallada.
  • Ruby / Lua: lenguajes de scripting, escritos de manera dinámica, escribiendo enlaces para bibliotecas C existentes.
  • Python / C # / Java: omitido, estos lenguajes me parecen una repetición de nociones originadas en otra parte con una gran biblioteca estándar. Seguro que todos los paquetes son agradables, pero aquí no aprenderás nuevos conceptos.
  • OCaml: tipo de inferencia hecha correctamente, aplicación parcial, compilador de genéricos, inmutabilidad por defecto, cómo manejar nulos de forma elegante.
  • Haskell: pereza por defecto, mónadas.

Mi € .02.


FORTH era un lenguaje diseñado para código de bajo nivel en CPUs tempranas. Su característica más notable fue RPN stack based based math operations. El mismo tipo de matemática utilizada en las primeras calculadoras HP. Por ejemplo 1 + 2 + 3 + 4 = se escribiría como 1, 2, 3, 4, +, +, +


Haskell y REBOL son idiomas fascinantes, por razones muy diferentes.

Haskell realmente puede abrir los ojos como desarrollador, con conceptos como mónadas, aplicación parcial, coincidencia de patrones, tipos algebraicos, etc. Es una mezcla heterogénea para el curioso programador.

REBOL no es ningún vago tampoco. Al principio es engañosamente simple, pero cuando comienzas a profundizar en conceptos como contextos, dialectos PARSE y Bindology, te das cuenta de que hay mucho más de lo que parece. Lo bueno de REBOL es que es mucho más fácil comenzar con él que con Haskell.

No puedo decidir cuál me gusta más.


Me encantan los compiladores y las VM, y me encanta Lua.

Lua no es tan compatible con muchos otros lenguajes de scripting, pero desde una mentalidad como la tuya, estoy seguro de que también te enamorarás de Lua. Quiero decir que es como lisp, (puede hacer cualquier ceceo, hasta donde yo sé), tiene muchas de las características principales de ADA, además tiene meta programación incorporada, con programación funcional y programación orientada a objetos lo suficientemente suelta para hacer cualquier tipo del lenguaje de dominio que pueda desear. Además, el código de la máquina virtual es simple C, lo que significa que puede cavar fácilmente en él para apreciar incluso en ese nivel.

(Y es una licencia MIT de código abierto)


Modula-2 es el lenguaje no convencional que he encontrado más interesante. Parece convencional, pero no funciona como a lo que estamos acostumbrados. Hereda mucho de Pascal, y aún es lo suficientemente diferente como para proporcionar interesantes posibilidades de aprendizaje.


PROLOG es un lenguaje basado en reglas con funcionalidad de seguimiento. Puede producir código legible por humanos (como en prosa).



Recientemente me he enamorado de Ocaml y de los lenguajes funcionales en general.

Ocaml, por ejemplo, ofrece lo mejor de todos los mundos posibles. Obtiene código que se compila en lenguaje de máquina nativo ejecutable tan rápido como C, o código de bytes universalmente portátil. Obtienes un intérprete para llevar la velocidad de REPL al desarrollo. Obtiene todo el poder de la programación funcional para producir estructuras perfectamente ortogonales, recursión profunda y verdadero polimorfismo. Encima de todo esto está el soporte para Object-Orientation, que en el contexto de un lenguaje funcional que ya proporciona todo lo que OOP promete (encapsulación, modularización, funciones ortogonales y reciclabilidad polimórfica), significa OOP que se ve obligado a probarse a sí mismo.


Soy un fanático del lenguaje de programación D. Aquí hay un artículo de wikipedia y una introducción del sitio oficial .

Algunos fragmentos del artículo de wikipedia:

El lenguaje de programación D, también conocido simplemente como D, es un lenguaje de programación de sistema multiparadigm imperativo orientado a objetos por Walter Bright de Digital Mars. Se originó como una reingeniería de C ++, pero a pesar de que está predominantemente influenciado por ese lenguaje, no es una variante de C ++. D ha rediseñado algunas características de C ++ y ha sido influenciado por conceptos utilizados en otros lenguajes de programación, como Java, C # y Eiffel. Una versión estable, 1.0, fue lanzada el 2 de enero de 2007. Una versión experimental, 2.0, fue lanzada el 17 de junio de 2007.

en características:

D está siendo diseñado con lecciones aprendidas del uso práctico de C ++ en lugar de desde una perspectiva teórica. Aunque utiliza muchos conceptos de C / C ++, también descarta algunos y, como tal, no es estrictamente compatible con el código fuente de C / C ++. Se agrega a la funcionalidad de C ++ implementando también el diseño por contrato, pruebas unitarias, módulos reales, recolección de basura, matrices de primera clase, matrices asociativas, matrices dinámicas, rebanadas de matriz, funciones anidadas, clases internas, cierres [2], funciones anónimas, compila la ejecución de la función de tiempo, la evaluación diferida y tiene una sintaxis de plantilla modificada. D conserva la capacidad de C ++ para hacer codificación de bajo nivel y la agrega con soporte para un ensamblador integrado en línea. La herencia múltiple de C ++ se reemplaza por una herencia individual de estilo Java con interfaces y mixins. La sintaxis de declaración, declaración y expresión de D''iguala estrechamente a la de C ++.


Supongo que mucho depende de lo que quieras decir con "no convencional".

¿El ceceo contaría como no convencional?


Tendría que decir Scheme, especialmente en su encarnación R6RS .


Boo apunta al framework .NET y es de código abierto. Inspirado por Python.


Primera respuesta - Esquema. No se usa demasiado, pero definitivamente parece ser un lenguaje sólido para usar, especialmente teniendo en cuenta la solidez de DrScheme (que de hecho compila programas Scheme con código binario nativo).

Después de eso, Haskell es increíblemente interesante. Es un lenguaje que hace una evaluación perezosa correcta, y las consecuencias son increíbles (incluyendo cosas como una definición de una línea de la secuencia fibonnaci).

Yendo más corriente, Python todavía no es ampliamente aceptado en los círculos comerciales, pero definitivamente debería serlo, por ahora ...



Eche un vistazo a Io en http://www.iolanguage.com/ o Lisaac en: https://gna.org/projects/isaac/ o Self en: http://self.sourceforge.net/ o Sather (ahora Absolutamente olvidado) o Eiffel http://www.eiffel.com

¿Por qué aquí hay algunas razones? Io es absolutamente minimalista y ni siquiera tiene "elementos de flujo de control" como entidades de sintaxis. Lisaad es un seguimiento de Eiffel con muchas simplificaciones AFAIKT. Self es una continuación de Smalltalk e Io también ha tomado bastante de Self. Lo básico es que la distinción entre clase y objeto ha sido abandonada. Sather es un experto en Eiffel con algunas otras reglas y un mejor soporte para la programación funcional (desde el principio).

Y Eiffel definitivamente es un sello distintivo para los lenguajes OO estáticos. Eiffel fue el primer lenguaje con soporte para Design by Contract, genéricos (aka templates) y una de las mejores maneras de manejar la herencia. Era y es uno de los lenguajes más simples aún. Por mi parte, encontré las mejores bibliotecas para Eiffel .....

Su creador solo tiene un problema, no aceptó otras contribuciones al campo de OO .....

Saludos


El primer lenguaje importante (no BÁSICO) que aprendí fue Dream Maker, de http://www.byond.com . Es algo similar a C ++ o Java, pero está diseñado para juegos multijugador en línea. Está muy basado en la herencia. Es un lenguaje interesante especialmente como lenguaje de inicio, obtiene resultados gratificantes más rápido, y seamos honestos, la mayoría de las personas que primero están aprendiendo a programar están interesadas en una cosa ... juegos.


Encuentro Factor , Oz y OCaml bastante interesantes. De hecho, comencé a usar Factor para proyectos personales.


No puedo creer que Logo esté tan olvidado. Ok, es Logo. Algo así como lisp, pero con una sintaxis ligeramente más fea. Aunque trabaja con listas en Logo, uno se encuentra con las deliciosamente nombradas operaciones "primero" y "último". = P



Recientemente he buscado mucho sobre Windows PowerShell .

Aunque no necesariamente es solo un lenguaje. Es un shell impresionante que tiene un lenguaje de scripting incorporado. Básicamente es una concha de línea de comando reforzada.

A diferencia de los shells de Unix, donde todo es texto de cadena (que definitivamente tiene sus ventajas), los comandos de PowerShell (cmdlets) usan objetos. Está basado en el framework .Net, así que ustedes que están familiarizados con eso probablemente ya habrán descubierto que todo lo que PowerShell devuelve se puede canalizar y las propiedades y métodos de ese objeto se pueden usar. Es divertido decir "¡todo es un objeto!" nuevamente como cuando OOP estaba creciendo.

Cosas muy ordenadas Por primera vez, Windows está implementando algunas de las herramientas de interfaz de línea de comandos de Unix similares a grep y todo el grupo.


Si te interesan las máquinas virtuales, deberías mirar a Parrot ... Hay varios lenguajes compatibles y eso es bastante bueno ...

O''Call es un buen lenguaje si quieres aprender cómo implementar un compilador ...


ML. Aprenderlo y usarlo te obliga a pensar diferente sobre los problemas de programación de forma diferente. También otorga una paciencia, en la mayoría de los casos. Más.


¿Qué hay de ir ? Es completamente nuevo, por lo que es desconocido y no convencional (todavía).

Es interesante porque la sintaxis se parece a lo que sucede después de poner C y Pascal en un frasco y hacer que peleen.


Sugiero echarle un vistazo a Erlang, ha estado recibiendo un poco de prensa recientemente, por lo que algunos de los recursos de aprendizaje son excelentes. Si usó OO y / o lenguajes de procedimiento, Erlang definitivamente inclinará su mente de maneras nuevas y emocionantes.

Erlang es un lenguaje funcional puro, con soporte básico para programas concurrentes, distribuidos y tolerantes a fallas. Tiene una serie de características interesantes, incluido el hecho de que las variables no son realmente variables en absoluto; no se pueden cambiar una vez declaradas, y de hecho se entienden mejor como una forma de patrón.

Se habla de la blogósfera sobre la construcción de la plataforma Erlang (OTP) y el soporte de máquinas para otros lenguajes como Ruby: Erlang se convertiría en una especie de máquina virtual para ejecutar aplicaciones concurrentes, lo que sería una posibilidad muy emocionante.



Harbor para tipo dinámico. Gran opción para aplicaciones de negocios.


Recientemente me enteré de la existencia de Icon a partir de esta pregunta . Desde entonces lo he usado en respuestas a varias preguntas. ( 1 , 2 , 3 , 4 )

Es interesante por su estrategia de evaluación: es el único lenguaje imperativo que conozco que admite el back-track. Permite un buen código sucinto para muchas cosas :)


Smalltalk (ver discusión vinculada aquí) . Tipo de abuelo de los lenguajes dinámicos (con la posible excepción de Lisp y SNOBOL). Muy agradable para trabajar y tristemente pisoteado por Java y ahora los lenguajes más nuevos como Python y Ruby.