stringtranslate.com

Lisp ensamblador orientado a juegos

Game Oriented Assembly Lisp ( GOAL , también conocido como Game Object Assembly Lisp ) es un lenguaje de programación , un dialecto del lenguaje Lisp , hecho para videojuegos desarrollado por Andy Gavin y el equipo Jak and Daxter de la empresa Naughty Dog .

Fue escrito usando Allegro Common Lisp y se utilizó en el desarrollo de toda la serie de juegos Jak y Daxter (excluyendo Daxter y Jak y Daxter: The Lost Frontier ).

Diseño

La sintaxis de GOAL se parece a la del 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 deben ejecutar en lugar del estilo de programación funcional de funciones que se deben evaluar de forma recursiva. Esto es una desviación de 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 en 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 en línea mediante un formato especial, [1] lo que permite que los programas mezclen libremente ensamblajes y construcciones de nivel superior dentro de una 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 conocimiento sobre el estado del programa compilado y, por lo tanto, en ejecución, incluida la tabla de símbolos. Esto, además de la vinculación dinámica, permite editar, volver a compilar, 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 de C++ , pero permite que los programas reemplacen cantidades arbitrarias de código (incluso hasta archivos de objetos completos) y no interrumpe el juego en ejecución con el depurador. Esta función 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 . El lenguaje predecesor, Game Oriented Object Lisp (GOOL), también fue desarrollado por Andy Gavin para Crash Bandicoot .

Como 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 abandonó Lisp: [2]

Sinceramente, la principal razón por la que no utilizamos GOAL para el desarrollo de próxima generación es porque ahora formamos parte de Sony. Solo puedo imaginar la sorpresa de Sony cuando compró 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 forma de que nadie más pudiera usar nuestra base de código. Sony quiere que podamos compartir código con otros estudios, y esto funciona en ambos sentidos: que otros estudios utilicen nuestro código y viceversa. Si a esto le sumamos la curva de dificultad que supone 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., significa que claramente hay muchos otros factores involucrados. Sin embargo, tenga en cuenta que estos problemas no son realmente problemas técnicos, son sociales.

—Scott  Shumaker

Sin embargo, desde entonces han vuelto a usarlo para crear scripts en algunos juegos de PlayStation 3 , incluido The Last of Us . [3]

Objetivo abierto

OpenGOAL, un proyecto comunitario, 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 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 noviembre de 2023, el equipo de OpenGOAL había producido ports para los dos primeros juegos 100% completables en computadoras Windows y Linux, [5] [6] con un port de Jak 3 en desarrollo a partir de 2024. [ 7] [8]

Referencias

  1. ^ ab Shumaker, Scott (11 de agosto de 2005). "[Sweng-gamedev] Higher Level Languages ​​(Was: Next Gen Multiplatform Load Balancing)". Midnight Ryder Technologies: lista de correo de sweng-gamedev . Archivado desde el original el 2007-04-12 . Consultado el 20 de abril de 2019 .
  2. ^ Shumaker, Scott (8 de agosto de 2005). "[Sweng-gamedev] Higher Level Languages ​​(Was: Next Gen Multiplatform Load Balancing"). Midnight Ryder Technologies: lista de correo de sweng-gamedev . Archivado desde el original el 20 de julio de 2007. Consultado el 20 de abril de 2019 .
  3. ^ Anthony Newman (28 de octubre de 2017). Unsynced: The Last of Us Melee System (videocinta). Conferencia de desarrolladores de juegos. Minuto 37. Archivado desde el original el 14 de diciembre de 2021. Consultado el 5 de noviembre de 2017 .
  4. ^ "OpenGOAL". OpenGOAL . Archivado desde el original el 13 de diciembre de 2022 . Consultado el 23 de octubre de 2022 .
  5. ^ "Jak and Daxter OPENGOAL 100% Playthrough!". YouTube . OutrageousJosh. 22 de junio de 2022 . Consultado el 16 de mayo de 2024 .
  6. ^ "Informe de progreso - Octubre de 2023". OpenGOAL . 30 de octubre de 2023. Archivado desde el original el 16 de mayo de 2024 . Consultado el 16 de mayo de 2024 .
  7. ^ "Informe de progreso - abril de 2024". OpenGOAL . 30 de abril de 2024. Archivado desde el original el 16 de mayo de 2024 . Consultado el 16 de mayo de 2024 .
  8. ^ "Progreso". OpenGOAL . Archivado desde el original el 12 de febrero de 2024 . Consultado el 16 de mayo de 2024 .

Enlaces externos