Игроориентированный ассемблерный Lisp
Парадигмы | Мультипарадигмальность |
---|---|
Семья | Лисп |
Разработано | Энди Гэвин |
Разработчик | Непослушная собака |
Впервые появился | 3 декабря 2001 г |
Стабильная версия | 3 / 7 февраля 2012 г |
Дисциплина набора текста | Динамичный , скрытый , сильный |
Объем | Лексический |
Язык реализации | Аллегро Общий Лисп |
Платформа | PlayStation 2 , Портативная PlayStation , PlayStation 3 |
Лицензия | Собственный |
Под влиянием | |
Лисп , Схема , Игроориентированный объектный Lisp (GOOL) |
Game Oriented Assembly Lisp ( GOAL , также известный как Game Object Assembly Lisp ) — это язык программирования , диалект языка Lisp , созданный для видеоигр , разработанный Энди Гэвином и командой Джека и Дакстера из компании Naughty Dog .
Он был написан с использованием Allegro Common Lisp и использовался при разработке всей Jak and Daxter серии игр .
Дизайн [ править ]
GOAL Синтаксис диалекта Lisp напоминает Scheme , хотя и содержит множество характерных функций объектно-ориентированного программирования, таких как классы , наследование и виртуальные функции . [1] GOAL поощряет императивный стиль программирования : программы, как правило, состоят из последовательности событий, которые необходимо выполнить, а не из программирования функционального стиля , в котором функции должны оцениваться рекурсивно. Это отклонение от Scheme, которое допускает такие побочные эффекты , но не поощряет императивный стиль.
GOAL не запускается в интерпретаторе , а вместо этого компилируется непосредственно в PlayStation 2 машинный код для выполнения. Он предлагает ограниченные возможности по сбору мусора , в значительной степени полагаясь на поддержку во время выполнения. Он предлагает примитивы динамического распределения памяти, предназначенные для работы в постоянной памяти на игровой консоли. GOAL имеет обширную поддержку встроенного кода на языке ассемблера с использованием специального rlet
форма, [1] позволяя программам свободно смешивать ассемблерные конструкции и конструкции более высокого уровня в одной функции.
Компилятор GOAL реализован на Allegro Common Lisp . Он поддерживает долгосрочный сеанс прослушивания компиляции, который дает компилятору информацию о состоянии скомпилированной и, следовательно, запущенной программы, включая таблицу символов. Это, в дополнение к динамическому связыванию, позволяет редактировать, перекомпилировать, загружать и вставлять функцию в работающую игру без необходимости перезапуска. Этот процесс аналогичен функции редактирования и продолжения, предлагаемой некоторыми компиляторами C++ , но позволяет программам заменять произвольные объемы кода (даже целые объектные файлы) и не прерывает запущенную игру с помощью отладчика. Эта функция использовалась для реализации кода и включения потоковой передачи уровней в играх Jak и Daxter .
Использует [ править ]
Первое использование GOAL было в игре Jak and Daxter: The Precursor Legacy . Язык-предшественник, Game Oriented Object Lisp (GOOL), также был разработан Энди Гэвином для Crash Bandicoot .
Поскольку в Naughty Dog больше нет главного инженера по разработке и сопровождению GOAL, и на них оказывалось давление со стороны новой материнской компании Sony , требующей обмена технологиями между студиями, Naughty Dog отказались от Lisp: [2]
Честно говоря, главная причина, по которой мы не используем GOAL для разработки следующего поколения, заключается в том, что теперь мы являемся частью Sony. Я могу только представить шок Sony, когда они купили Naughty Dog несколько лет назад, надеясь использовать некоторые из наших технологий в других студиях Sony, а затем поняли, что никто другой не сможет использовать нашу кодовую базу. . Sony хочет, чтобы мы могли делиться кодом с другими студиями, и это работает в обе стороны — и другие студии используют наш код, и наоборот. Добавьте это к кривой сложности изучения нового языка для новых сотрудников, отсутствия поддержки со стороны внешних инструментов разработки (у нас был собственный компилятор, компоновщик и отладчик, и нам практически приходилось использовать Emacs в качестве нашей IDE ) и т. д., и это означает, что очевидно, что здесь задействовано множество других факторов. Однако обратите внимание, что эти проблемы на самом деле не технические, а социальные.
— Скотт Шумейкер
Однако с тех пор они возобновили использование его для написания сценариев в некоторых играх для PlayStation 3 , включая The Last of Us . [3]
OpenGOAL [ править ]
Проект сообщества OpenGOAL стартовал в 2020 году с целью переноса GOAL на x86-64 путем декомпиляции существующих ресурсов Jak и Daxter: The Precursor Legacy и Jak II и их перекомпиляции в исходном виде. [4] Он включает в себя компилятор GOAL, написанный на C++, а также цикл чтения-оценки-печати , позволяющий реализовать рабочий процесс, аналогичный исходной реализации Naughty Dog. К ноябрю 2023 года команда OpenGOAL подготовила порты для обеих игр, которые на 100% можно было завершить на компьютерах с Windows и Linux. [5] [6] с портом Jak 3 в разработке по состоянию на 2024 г. [update]. [7] [8]
Ссылки [ править ]
- ^ Jump up to: а б Шумейкер, Скотт (11 августа 2005 г.). «[Sweng-gamedev] Языки более высокого уровня (было: многоплатформенная балансировка нагрузки нового поколения)» . Midnight Ryder Technologies: список рассылки sweng-gamedev . Архивировано из оригинала 12 апреля 2007 г. Проверено 20 апреля 2019 г.
- ^ Шумейкер, Скотт (8 августа 2005 г.). «[Sweng-gamedev] Языки более высокого уровня (было: Многоплатформенная балансировка нагрузки нового поколения» . Midnight Ryder Technologies: список рассылки sweng-gamedev . Архивировано из оригинала 20 июля 2007 г. Проверено 20 апреля 2019 г.
- ^ Энтони Ньюман (28 октября 2017 г.). Несинхронизировано: система ближнего боя The Last of Us (видеозапись). Конференция разработчиков игр. 37 минут. Архивировано из оригинала 14 декабря 2021 г. Проверено 5 ноября 2017 г.
- ^ «ОпенГОЛ» . OpenGOAL . Архивировано из оригинала 13 декабря 2022 года . Проверено 23 октября 2022 г.
- ^ «Джек и Дакстер ОТКРЫВАЮТ ГОЛ, прохождение 100%!» . Ютуб . Возмутительный Джош. 22 июня 2022 г. . Проверено 16 мая 2024 г.
- ^ «Отчет о проделанной работе – октябрь 2023 г.» . OpenGOAL . 30 октября 2023 года. Архивировано из оригинала 16 мая 2024 года . Проверено 16 мая 2024 г.
- ^ «Отчет о проделанной работе – апрель 2024 года» . OpenGOAL . 30 апреля 2024 года. Архивировано из оригинала 16 мая 2024 года . Проверено 16 мая 2024 г.
- ^ «Прогресс» . OpenGOAL . Архивировано из оригинала 12 февраля 2024 года . Проверено 16 мая 2024 г.
Внешние ссылки [ править ]
- Программное обеспечение Naughty Dog: снова поднимаем парадигму видеоигр… благодаря Lisp и Allegro CL
- Джейк и Дакстер: Наследие предшественников (PowerPoint) – обзор разработки, извлеченные уроки
- Высокодетализированные непрерывные миры
— о потоковом загрузчике мира