Game Oriented Assembly Lisp ( GOAL , también conocido como Game Object Assembly Lisp ) es un lenguaje de programación , un dialecto del lenguaje Lisp , creado para videojuegos desarrollados por Andy Gavin y el equipo de Jak and Daxter en la compañía Naughty Dog .
Fue escrito utilizando Allegro Common Lisp y se utilizó en el desarrollo de toda la serie de juegos Jak and Daxter (excluyendo Daxter y Jak and Daxter: The Lost Frontier ).
Diseño
La sintaxis de GOAL se asemeja al dialecto Lisp Scheme , aunque con muchas características idiosincrásicas de la 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 ejecutan, en lugar del estilo de programación funcional de funciones que se evalúan recursivamente. Esto representa una diferencia con respecto a 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 código máquina de PlayStation 2 para su ejecución. Ofrece funcionalidades limitadas para la recolección de basura , dependiendo en gran medida del soporte en tiempo de ejecución . Ofrece primitivas de asignación dinámica de memoria diseñadas para que sea ideal para ejecutarse en memoria constante en una consola de videojuegos. GOAL cuenta con un amplio soporte para código en lenguaje ensamblador en línea mediante una forma especial, [ 1 ] lo que permite a los programas combinar libremente ensamblador y construcciones de nivel superior dentro de una misma función.rlet
El compilador GOAL está implementado en Allegro Common Lisp . Admite una sesión de escucha de compilación a largo plazo que proporciona al compilador información sobre el estado del programa compilado y en ejecución, incluyendo la tabla de símbolos. Esto, junto con el enlace dinámico, permite editar, recompilar, cargar e insertar una función en un juego en ejecución sin necesidad de reiniciarlo. El proceso es similar a la función de edición y continuación que ofrecen algunos compiladores de C++ , pero permite a los programas reemplazar cantidades arbitrarias de código (incluso archivos objeto completos) y no interrumpe la ejecución del juego con el depurador. Esta función se utilizó para implementar código y habilitar la transmisión de niveles en los juegos de Jak and Daxter .
Usos
El primer uso de GOAL fue para el juego Jak and Daxter: The Precursor Legacy . El lenguaje predecesor, Game Oriented Object Lisp (GOOL), también fue desarrollado por Andy Gavin para Crash Bandicoot .
Dado que Naughty Dog ya no empleaba 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 dejó de usar Lisp: [ 2 ]
Sinceramente, la principal razón por la que no usamos GOAL para el desarrollo de próxima generación es que ahora formamos parte de Sony. Me imagino la sorpresa de Sony cuando compró Naughty Dog hace unos años, con la esperanza de poder aprovechar nuestra tecnología en otros estudios de Sony, y luego se dio cuenta de que nadie más podría usar nuestro código. Sony quiere que podamos compartir código con otros estudios, y esto funciona en ambos sentidos: otros estudios usan nuestro código y viceversa. Si a esto le sumamos la dificultad de aprender un nuevo lenguaje para los nuevos empleados, la falta de soporte de herramientas de desarrollo externas (teníamos nuestro propio compilador, enlazador y depurador, y prácticamente teníamos que usar Emacs como nuestro IDE ), etc., queda claro que hay muchos otros factores involucrados. Sin embargo, cabe destacar que estos problemas no son técnicos, sino sociales.
— Scott Shumaker
Sin embargo, Naughty Dog reanudó el uso de GOAL para la creación de scripts en algunos juegos de PlayStation 3 , incluido The Last of Us . [ 3 ]
OpenGOAL
Un proyecto comunitario, OpenGOAL, comenzó en 2020 con el objetivo de portar GOAL a x86-64 descompilando los recursos existentes de Jak and Daxter: The Precursor Legacy , Jak II , Jak 3 y, tentativamente, Jak X: Combat Racing , y recompilándolos de forma nativa. [ 4 ] Incluye un compilador de GOAL escrito en C++ así como un bucle de lectura-evaluación-impresión para permitir un flujo de trabajo similar a la implementación original de Naughty Dog. Para abril de 2026, el equipo de OpenGOAL había producido versiones para Windows, macOS y Linux de la trilogía principal que son 100% completables. [ 5 ] [ 6 ] [ 7 ] [ 8 ]
Referencias
- 1 2 Shumaker, Scott (11 de agosto de 2005). " [ Sweng-gamedev ] Lenguajes de alto nivel (anteriormente: Balanceo de carga multiplataforma de próxima generación)" . Midnight Ryder Technologies: lista de correo sweng-gamedev . Archivado del original el 12 de abril de 2007. Recuperado el 20 de abril de 2019 .
- ↑ Shumaker, Scott (2005-08-08). " [ Sweng-gamedev ] Higher Level Languages (Antes: Next Gen Multiplatform Load Balancing" ) . Midnight Ryder Technologies: sweng-gamedev mailinglist . Archivado del original el 2007-07-20 . Recuperado el 2019-04-20 .
- ↑ Anthony Newman (28/10/2017). Sin sincronización: Sistema de combate cuerpo a cuerpo de The Last of Us (Vídeo). Conferencia de desarrolladores de videojuegos. Minuto 37. Archivado del original el 14/12/2021 . Consultado el 05/11/2017 .
- ↑ "OpenGOAL" . OpenGOAL . Archivado del original el 13 de diciembre de 2022. Consultado el 23 de octubre de 2022 .
- ↑ "¡Jak and Daxter OPENGOAL 100% Playthrough!" . YouTube . OutrageousJosh. 22 de junio de 2022 . Consultado el 16 de mayo de 2024 .
- ↑ "Informe de progreso - octubre de 2023" . OpenGOAL . 30 de octubre de 2023. Archivado del original el 16 de mayo de 2024. Consultado el 16 de mayo de 2024 .
- ↑ "Informe de progreso - abril de 2024" . OpenGOAL . 30 de abril de 2024. Archivado del original el 16 de mayo de 2024. Consultado el 16 de mayo de 2024 .
- ↑ "Informe de progreso - Primer trimestre de 2026" . Consultado el 1 de abril de 2026 .
{{cite web}}: CS1 mantenimiento: estado de la URL ( enlace )
Enlaces externos
- Naughty Dog Software: Elevando el paradigma de los videojuegos, una vez más… Gracias a Lisp y Allegro CL.
- Jak & Daxter: El legado precursor (PowerPoint) – Resumen del desarrollo, lecciones aprendidas
- Mundos continuos altamente detallados
: acerca del cargador de mundos en streaming
- Familia de lenguajes de programación Lisp
- Lenguajes funcionales
- Lenguajes de programación orientados a objetos
- Software Common Lisp (lenguaje de programación)
- desarrollo de videojuegos
- Lenguajes de programación específicos de dominio