Игровой ассемблер Lisp - Game Oriented Assembly Lisp
Парадигмы | Мультипарадигма |
---|---|
Семья | Лисп |
Разработано | Энди Гэвин |
Разработчик | Игривый щенок |
Впервые появился | 3 декабря 2001 г. |
Стабильный выпуск | 3/7 февраля 2012 |
Печатная дисциплина | Динамический, скрытый, сильный |
Объем | Лексический |
Язык реализации | Аллегро 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]
Рекомендации
- ^ а б Шумакер, Скотт (11 августа 2005 г.). «[Sweng-gamedev] Языки высокого уровня (было: мультиплатформенная балансировка нагрузки нового поколения)». Midnight Ryder Technologies: список рассылки sweng-gamedev. Архивировано из оригинал на 2007-04-12. Получено 2019-04-20.
- ^ Шумакер, Скотт (2005-08-08). "[Sweng-gamedev] Языки высокого уровня (было: мультиплатформенная балансировка нагрузки следующего поколения". Midnight Ryder Technologies: список рассылки sweng-gamedev. Архивировано из оригинал на 2007-07-20. Получено 2019-04-20.
- ^ Энтони Ньюман (28.10.2017). Unsynced: The Last of Us Система ближнего боя (Видеозапись). Конференция разработчиков игр. 37 минут в. Получено 2017-11-05.
внешняя ссылка
- Программное обеспечение Naughty Dog: поднимая парадигму видеоигр - снова… Благодаря Lisp и Allegro CL
- Джак и Дакстер: Наследие Предтечи (Powerpoint) - обзор развития, извлеченные уроки
- Высокодетализированные непрерывные миры (Powerpoint) - о загрузчике потокового мира