Парадигмы | Мультипарадигма |
---|---|
Семья | Лисп |
Разработано | Энди Гэвин |
Разработчик | Игривый щенок |
Впервые появился | 3 декабря 2001 г . |
Стабильный выпуск | 3/7 февраля 2012 г . |
Печатная дисциплина | Динамичный , скрытый , сильный |
Объем | Лексический |
Язык реализации | Аллегро Common Lisp |
Платформа | PlayStation 2 , PlayStation Portable , PlayStation 3 |
Лицензия | Проприетарный |
Под влиянием | |
Лисп , Схема , Игровой объектный Лисп (GOOL) |
Game Oriented Assembly Lisp ( GOAL ) - это язык программирования , диалект языка Lisp , созданный для видеоигр, разработанный Энди Гэвином и командой Jak and Daxter в компании Naughty Dog .
Он был написан с использованием Allegro Common Lisp и использовался при разработке всей серии игр Jak and Daxter .
Дизайн [ править ]
Синтаксис GOAL напоминает схему диалекта Лиспа , хотя и со многими характерными особенностями объектно-ориентированного программирования, такими как классы , наследование и виртуальные функции . [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 больше не работает основной инженер Разработка и сопровождение цели, и они находились под давлением со стороны своего нового материнской компании , Sony , чтобы обмениваться технологиями между студиями, Naughty Dog не переходили от Лиспа: [2]
Честно говоря, самая большая причина, по которой мы не используем GOAL для разработки нового поколения, заключается в том, что мы теперь являемся частью Sony. Я могу только представить себе шок Sony, когда они купили Naughty Dog несколько лет назад, надеясь использовать некоторые из наших технологий в других студиях Sony, а затем поняли, что никто другой не сможет использовать какую-либо нашу кодовую базу. . Sony хочет, чтобы мы могли делиться кодом с другими студиями, и это работает в обоих направлениях - обе студии используют наш код, и наоборот. Добавьте к этому кривую сложности изучения нового языка для новых сотрудников, отсутствие поддержки со стороны внешних инструментов разработки (у нас был собственный компилятор, компоновщик и отладчик, и в значительной степени пришлось использовать Emacs в качестве нашей IDE.) и т. д., означает, что явно задействовано множество других факторов. Обратите внимание, однако, что эти проблемы на самом деле не технические, а социальные.
- Скотт Шумейкер
Однако с тех пор они возобновили его использование для написания сценариев в некоторых играх для PlayStation 3 , включая The Last of Us . [3]
Ссылки [ править ]
- ^ a b Шумейкер, Скотт (11 августа 2005 г.). «[Sweng-gamedev] Языки высокого уровня (было: мультиплатформенная балансировка нагрузки нового поколения)» . Midnight Ryder Technologies: список рассылки sweng-gamedev . Архивировано из оригинала на 2007-04-12 . Проверено 20 апреля 2019 .
- ^ Шумейкер, Скотт (2005-08-08). "[Sweng-Gamedev] более высокий уровень Языки (Был: Next Gen Multiplatform Load Balancing" . Полночь Ryder технологии: sweng-Gamedev список рассылки . Архивировано из оригинала на 2007-07-20 извлекаться. 2019-04-20 .
- ^ Энтони Ньюман (2017-10-28). Несинхронизировано: Система ближнего боя The Last of Us (Видеозапись). Конференция разработчиков игр. 37 минут в . Проверено 5 ноября 2017 .
Внешние ссылки [ править ]
- Программное обеспечение Naughty Dog: поднимая парадигму видеоигр - снова… Благодаря Lisp и Allegro CL
- Jak & Daxter: The Precursor Legacy (Powerpoint) - обзор разработки, извлеченные уроки
- Высокодетализированные непрерывные миры (Powerpoint) - о загрузчике потокового мира