07 May 2004: Zinc
(This is a reprint of the original post)
Hace unos minutos he publicado la versión 0.3.0 del Zinc Curry Compiler (ZCC), con lo que mi proyecto ya empieza a parecerse al objetivo que me he fijado. Aprovecho la ocasión para comentar algo en mi bitácora sobre mi proyecto fin de carrera, por si acaso hay alguien leyendo esto que no se ha enterado todavía.
El ZCC es, como indica su nombre, un compilador de un nuevo lenguaje (que no tiene nombre) que consiste en una extensión de un lenguaje existente (Curry) añadiéndole un concepto que tampoco he inventado yo (las clases de tipos). El nombre genérico del proyecto es Zinc, que por supuesto es un acrónimo recursivo (Zinc is not Curry).
Curry es un lenguaje de programación lógico-funcional, creado por Michael Hanus. La diferencia fundamental de la programación lógico-funcional con respecto a la habitual y más conocida programación imperativa reside en la ausencia de la asignación destructiva, es decir, no se puede machacar un dato con otro dato. Los lenguajes más representativos de esta forma alternativa de programar son Haskell (programación funcional) y Prolog (programación lógica). Precisamente Curry fue creado para unificar lo mejor de la programación lógica y la programación funcional. Para satisfacer la curiosidad de aquellos que se pregunten qué aspecto tiene un programa en Curry, aquí hay unos ejemplos.
En cuanto a las clases de tipos, se trata de un artificio de los sistemas de tipos. Esto no resulta fácil de explicar. Cualquiera que conozca un poco de la teoría que sostiene los lenguajes de programación, conocerá las complicaciones que provocan la sobrecarga y el polimorfismo. Las clases de tipos son una nueva aproximación para resolver estos problemas. Actualmente, sólo están presentes en un lenguaje popular (Haskell), pero mi proyecto pretende crear un compilador que soporte Curry con clases de tipos (las clases de tipos no son lo mismo que las clases de la programación orientada a objetos).