Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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]

Ссылки [ править ]

  1. ^ a b Шумейкер, Скотт (11 августа 2005 г.). «[Sweng-gamedev] Языки высокого уровня (было: мультиплатформенная балансировка нагрузки нового поколения)» . Midnight Ryder Technologies: список рассылки sweng-gamedev . Архивировано из оригинала на 2007-04-12 . Проверено 20 апреля 2019 .
  2. ^ Шумейкер, Скотт (2005-08-08). "[Sweng-Gamedev] более высокий уровень Языки (Был: Next Gen Multiplatform Load Balancing" . Полночь Ryder технологии: sweng-Gamedev список рассылки . Архивировано из оригинала на 2007-07-20 извлекаться. 2019-04-20 .
  3. ^ Энтони Ньюман (2017-10-28). Несинхронизировано: Система ближнего боя The Last of Us (Видеозапись). Конференция разработчиков игр. 37 минут в . Проверено 5 ноября 2017 .

Внешние ссылки [ править ]

  • Программное обеспечение Naughty Dog: поднимая парадигму видеоигр - снова… Благодаря Lisp и Allegro CL
  • Jak & Daxter: The Precursor Legacy (Powerpoint) - обзор разработки, извлеченные уроки
  • Высокодетализированные непрерывные миры (Powerpoint) - о загрузчике потокового мира