Игровой ассемблер Lisp - Game Oriented Assembly Lisp

Игровой ассемблер Lisp
ПарадигмыМультипарадигма
СемьяЛисп
РазработаноЭнди Гэвин
РазработчикИгривый щенок
Впервые появился3 декабря 2001 г.; 18 лет назад (2001-12-03)
Стабильный выпуск
3/7 февраля 2012; 8 лет назад (2012-02-07)
Печатная дисциплинаДинамический, скрытый, сильный
ОбъемЛексический
Язык реализацииАллегро Common Lisp
ПлатформаPlayStation 2, PlayStation портативный, PlayStation 3
ЛицензияПроприетарный
Под влиянием
Лисп, Схема,
Игровой ориентированный объектный лисп (GOOL)

Игровой ассемблер Lisp (ЦЕЛЬ) это язык программирования, а диалект языка Лисп, сделано для видеоигры разработан Энди Гэвин и Джек и Дакстер команда в компании Игривый щенок.

Он был написан с использованием Аллегро Common Lisp и использовался при разработке всего Джек и Дакстер серия игр.

Дизайн

Цели синтаксис напоминает диалект Лиспа Схема, хотя и со многими своеобразными объектно-ориентированного программирования такие функции, как классы, наследование, и виртуальные функции.[1] GOAL поощряет императивное программирование стиль: программы обычно состоят из последовательности выполняемых событий, а не из функциональное программирование стиль функции оцениваться рекурсивно. Это отклонение от схемы, которая позволяет побочные эффекты но не поощряет императивный стиль.

GOAL не работает в устный переводчик, но вместо этого составлен прямо в PlayStation 2 машинный код для выполнения. Он предлагает ограниченные возможности для вывоз мусора, во многом полагаясь на поддержку во время выполнения. Он предлагает примитивы динамического распределения памяти, предназначенные для работы в постоянном режиме. объем памяти на игровой приставке. GOAL широко поддерживает встроенный язык ассемблера код с использованием специального rlet форма,[1] позволяя программам свободно смешивать сборки и конструкции более высокого уровня в одной функции.

Компилятор GOAL реализован в Аллегро Common Lisp. Он поддерживает длительный сеанс прослушивания компиляции, который дает компилятору информацию о состоянии скомпилированной и, следовательно, запущенной программы, включая таблицу символов. Это, помимо динамического связывания, позволяет редактировать, перекомпилировать, загружать и вставлять функцию в работающую игру без перезапуска. Процесс похож на отредактировать и продолжить функция, предлагаемая некоторыми C ++ компиляторы, но позволяет программам заменять произвольные объемы кода (вплоть до целых объектных файлов) и не прерывает выполнение игры с помощью отладчика. Эта функция использовалась для реализации кода и для выравнивания потоковой передачи в Джек и Дакстер игры.

Использует

Первое использование GOAL было для Джак и Дакстер: наследие предшественников игра. Язык-предшественник, Game Oriented Object Lisp (GOOL), также был разработан Энди Гэвином для Крэш Бандикут.

Поскольку в Naughty Dog больше не работает главный инженер по разработке и обслуживанию GOAL, и они испытывали давление со стороны своего нового материнская компания, Sony, чтобы делиться технологиями между студиями, Naughty Dog отказалась от Lisp:[2]

Честно говоря, основная причина, по которой мы не используем GOAL для разработки нового поколения, заключается в том, что мы теперь являемся частью Sony. Я могу только представить себе шок Sony, когда они купили Naughty Dog несколько лет назад, надеясь, что смогут использовать некоторые из наших технологий в других студиях Sony, а затем поняли, что никто другой не сможет использовать какую-либо нашу кодовую базу. . Sony хочет, чтобы мы могли делиться кодом с другими студиями, и это работает в обоих направлениях - обе студии используют наш код, и наоборот. Добавьте к этому кривую сложности изучения нового языка для новых сотрудников, отсутствие поддержки со стороны внешних инструментов разработки (у нас был собственный компилятор, компоновщик и отладчик, и в значительной степени приходилось использовать Emacs как наш IDE ) и т. д., означает, что явно задействовано множество других факторов. Обратите внимание, однако, что эти проблемы на самом деле не технические, а социальные.

— Скотт Шумейкер

Однако с тех пор они возобновили его использование для написания сценариев на некоторых PlayStation 3 игры, в том числе Последний из нас.[3]

Рекомендации

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

внешняя ссылка