Game Oriented Assembly Lisp ( GOAL ) es un lenguaje de programación , un dialecto del lenguaje Lisp , hecho para videojuegos desarrollado por Andy Gavin y el equipo de Jak and Daxter en la empresa Naughty Dog .
Paradigmas | Multi-paradigma |
---|---|
Familia | Ceceo |
Diseñada por | Andy Gavin |
Desarrollador | Perro travieso |
Apareció por primera vez | 3 de diciembre de 2001 |
Lanzamiento estable | 3/7 de febrero de 2012 |
Disciplina de mecanografía | Dinámico , latente , fuerte |
Alcance | Léxico |
Lenguaje de implementación | Allegro Common Lisp |
Plataforma | PlayStation 2 , PlayStation portátil , PlayStation 3 |
Licencia | Propiedad |
Influenciado por | |
Lisp , Scheme , Lisp de objetos orientados a juegos (GOOL) |
Fue escrito usando Allegro Common Lisp y usado en el desarrollo de toda la serie de juegos Jak y 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 . [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. Esta 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 , dependiendo 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 en lenguaje ensamblador en línea usando una forma especial , [1] permitiendo a los programas mezclar libremente ensamblajes y construcciones de alto nivel 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 el 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, 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 de C ++ , pero permite a los programas reemplazar 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 nivelar la transmisión 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 .
Dado que Naughty Dog ya no emplea al ingeniero principal de desarrollo y mantenimiento de GOAL, y estaban bajo la presión de su nueva empresa matriz , Sony , para compartir tecnología entre estudios, Naughty Dog abandonó Lisp: [2]
Honestamente, la razón principal por la que no estamos usando 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 forma 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: tanto otros estudios que 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 Claramente hay muchos otros factores involucrados. Sin embargo, tenga en cuenta que estos problemas no son realmente problemas técnicos, son problemas sociales.
- Scott Shumaker
Sin embargo, desde entonces han reanudado su uso para la creación de scripts en algunos juegos de PlayStation 3 , incluido The Last of Us . [3]
Referencias
- ↑ a b Shumaker, Scott (11 de agosto de 2005). "[Sweng-gamedev] Idiomas de nivel superior (antes: equilibrio de carga multiplataforma de próxima generación)" . Midnight Ryder Technologies: lista de correo sweng-gamedev . 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] Idiomas de nivel superior (antes: equilibrio de carga multiplataforma de próxima generación" . Midnight Ryder Technologies: lista de correo sweng-gamedev . Archivado desde el original el 20 de julio de 2007. Consultado el 20 de abril de 2019 .
- ^ Anthony Newman (28 de octubre de 2017). Unsynced: The Last of Us Melee System (Videotape). Conferencia de desarrolladores de juegos. 37 minutos en . Consultado el 5 de noviembre de 2017 .
enlaces externos
- Software Naughty Dog: Elevando el paradigma de los videojuegos, una vez más ... Gracias a Lisp y Allegro CL
- Jak & Daxter: The Precursor Legacy (Powerpoint) - descripción general del desarrollo, lecciones aprendidas
- Mundos continuos altamente detallados (Powerpoint): sobre el cargador de mundos de transmisión