Gacela

Gacela es una extensión del lenguaje de programación Lisp para desarrollar juegos de forma rápida y fiable. Llevo trabajando en esto durante un año aproximadamente (no de forma continuada) y aunque aún falta mucho por hacer no tardaré demasiado en publicar las fuentes, por lo que voy a hacer una pequeña introducción.

El nombre Gacela viene de GCL (GNU Common Lisp), que es la implementación oficial Lisp del proyecto GNU que uso para el proyecto. Con esto no quiero decir solamente que Gacela se basa en GCL, sino que el proyecto se encuentra identificado plenamente con las ideas del proyecto GNU. Y al mismo tiempo, intento transmitir la idea de que Gacela puede servir para programar juegos de una forma rápida e intuitiva.

Gacela funciona internamente con SDL y OpenGL. La versión actual sólo permite programación gráfica (sin sonidos) y de una forma algo elemental, pero de momento la gestión de memoria funciona bastante bien. Con Gacela el programador no se preocupa de reservar y liberar memoria; el lenguaje se encarga de reservarla cuando es necesario y de liberarla cuando ya no se necesita. Lisp es muy bueno en eso.

De momento uso el intérprete de Lisp para ejecutar los programas, pero tengo intención de desarrollar una interfaz gráfica que permita programar de forma más efectiva. Al redirigir la entrada y la salida del intérprete a otro programa es posible inyectar código en tiempo de ejecución, y es muy divertido. Lo he hecho de forma artesanal, redirigiendo la entrada y la salida a una terminal y programando un juego en tiempo de ejecución, con lo que no sabes si estas jugando o estas programando (¿hay alguna diferencia?).

También estoy trabajando en un módulo para exportar los juegos de Lisp/Gacela a C, para que puedan ejecutarse sin el intérprete, empaquetarlos, etc... esto aún lo tengo en la cabeza y en papel, pero es algo que tendré que hacer antes o después.

La única pega para muchos supongo que será el hecho de que Gacela es Lisp. Para mi es genial ;-)

Y para los impacientes ahí va el primer tutorial:

(run-game "Mi primer juego" (render-text "Hola mundo"))