# Ensamblador Lisp Orientado a Juegos

Lenguaje ensamblador Lisp orientado a juegos (o GOAL, por sus siglas en inglés Game Oriented Assembly Lisp ) es un lenguaje de programación, un dialecto del lenguaje Lisp, creado para videojuegos desarrollado por Andy Gavin y el equipo de Jak and Daxter en la empresa Naughty Dog . paradigma de programación/paradigma para múltiples
Fue escrito usando Allegro Common Lisp y utilizado en el desarrollo de toda la serie de juegos Jak and Daxter .

## Diseño

La sintaxis de GOAL se parece al esquema del dialecto Lisp, aunque con muchas características idiosincrásicas de programación orientada a objetos, como clases, herencia y funciones virtuales . GOAL fomenta un estilo de programación imperativo : los programas tienden a consistir en una secuencia de eventos que se ejecutarán en lugar del estilo de programación funcional de funciones que se evaluarán de forma recursiva. Esto es una desviación del Scheme, que permite tales efectos secundarios pero no fomenta el estilo imperativo.
GOAL no se ejecuta en un intérprete, sino que se compila directamente en el código de máquina de PlayStation 2 para su ejecución. Ofrece instalaciones limitadas para la recolección de basura y depende en gran medida del soporte de tiempo de ejecución. Ofrece primitivas de asignación de memoria dinámica diseñadas para que sea adecuado para ejecutarse en memoria constante en una consola de videojuegos. GOAL tiene un amplio soporte para código de lenguaje ensamblador incorporado utilizando una forma rlet especial, que permite a los programas mezclar libremente construcciones ensambladoras y de nivel superior dentro de una función.
El compilador GOAL está implementado en Allegro Common Lisp . Admite una sesión de escucha de compilación a largo plazo que brinda al compilador conocimiento sobre el estado del programa compilado y, por lo tanto, en ejecución, incluida la tabla de símbolos. Esto, además del enlace dinámico, permite editar, recompilar, cargar e insertar una función en un juego en ejecución sin tener que reiniciar. El proceso es similar a la función de edición y continuación que ofrecen algunos compiladores C++, pero permite que los programas reemplacen cantidades arbitrarias de código (incluso archivos objeto completos) y no interrumpe el juego en ejecución con el depurador. Esta característica se utilizó para implementar código y habilitar la transmisión de niveles en los juegos de Jak y Daxter .

## Usos

El primer uso de GOAL fue para el juego Jak and Daxter: The Precursor Legacy . Su lenguaje predecesor era Lisp orientado a objeto juego (o GOOL por Game Oriented Object Lisp en inglés), también fue desarrollado por Andy Gavin para Crash Bandicoot .
Dado que Naughty Dog ya no emplea al ingeniero principal de desarrollo y mantenimiento de GOAL, y estaban bajo presión de su nueva empresa matriz, Sony, para compartir tecnología entre estudios, Naughty Dog se alejó de Lisp:
Sin embargo, desde entonces se ha han vuelto a utilizarlo para crear secuencias de comandos en algunos juegos de PlayStation 3, incluido The Last of Us .

## OpenGOAL

Es un proyecto comunitario, OpenGOAL es libre y de código abierto, empezó en 2020 con el objetivo de portar GOAL a X86-64 (y próximamente en microprocesadores de apple) descompilando los activos existentes jak and Daxter: The Precursor Legacy y Jak II y recompilándolos de forma nativa. Incluye un compilador GOAL escrito en C++, así como un REPL para permitir un flujo de trabajo similar a la implementación original de Naughty Dog.