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
Ensamblador Lisp Orientado a Juegos | ||
---|---|---|
Naughty Dog | ||
Información general | ||
Paradigma | multi-paradigmico | |
Apareció en | 2001 | |
Diseñado por | Andy Gavin | |
Última versión estable | (02/07 de febrero de 2012) | |
Influido por | Lisp, Scheme | |
Licencia | Proprietario | |
Fue escrito usando Allegro Common Lisp y utilizado en el desarrollo de toda la serie de juegos Jak and Daxter .
Diseño
editarLa 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 .[1] 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,[1] 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
editarEl 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:[2]
Honestamente, la razón principal por la que no utilizamos GOAL para el desarrollo de próxima generación es porque ahora somos parte de Sony. Solo puedo imaginar la sorpresa de Sony cuando compraron Naughty Dog hace unos años, con la esperanza de poder aprovechar parte de nuestra tecnología en otros estudios de Sony, y luego se dieron cuenta de que no había manera de que nadie más pudiera usar nuestro código base. . Sony quiere que podamos compartir código con otros estudios, y esto funciona en ambos sentidos: otros estudios usan nuestro código y viceversa. Agregue esto a la curva de dificultad de aprender un nuevo idioma para los nuevos empleados, la falta de soporte de herramientas de desarrollo externas (teníamos nuestro propio compilador, enlazador y depurador, y prácticamente tuvimos que usar Emacs como nuestro IDE), etc., significa que Es evidente que hay muchos otros factores implicados. Tenga en cuenta, sin embargo, que estos problemas no son realmente problemas técnicos, sino sociales. Scott ShumakerScott Shumaker
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 .[3]
OpenGOAL
editarEs 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.[4] 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.
Referencias
editar- ↑ a b Shumaker, Scott (11 Aug 2005). «[Sweng-gamedev] Higher Level Languages (Was: Next Gen Multiplatform Load Balancing)». Midnight Ryder Technologies: sweng-gamedev mailinglist. Archivado desde el original el 12 de abril de 2007. Consultado el 20 de abril de 2019.
- ↑ Shumaker, Scott (8 de agosto de 2005). «[Sweng-gamedev] Higher Level Languages (Was: Next Gen Multiplatform Load Balancing». Midnight Ryder Technologies: sweng-gamedev mailinglist. Archivado desde el original el 20 de julio de 2007. Consultado el 20 de abril de 2019.
- ↑ https://www.youtube.com/watch?v=Ox2H3kUQByo&t=37m40s. Falta el
|título=
(ayuda) - ↑ «OpenGOAL».
Enlaces externos
editar- Naughty Dog Software: elevando el paradigma de los videojuegos, otra vez... gracias a Lisp y Allegro CL
- Jak & Daxter: The Precursor Legacy (PowerPoint) – descripción general del desarrollo, lecciones aprendidas
- Mundos continuos altamente detallados.</img> – sobre el cargador mundial de streaming