Jump to content

Игроориентированный ассемблерный Lisp

Игроориентированный ассемблерный Lisp
Парадигмы Мультипарадигмальность
Семья Лисп
Разработано Энди Гэвин
Разработчик Непослушная собака
Впервые появился 3 декабря 2001 г .; 22 года назад ( 03.12.2001 )
Стабильная версия
3 / 7 февраля 2012 г .; 12 лет назад ( 07.02.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 г. . [7] [8]

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

  1. ^ Jump up to: а б Шумейкер, Скотт (11 августа 2005 г.). «[Sweng-gamedev] Языки более высокого уровня (было: многоплатформенная балансировка нагрузки нового поколения)» . Midnight Ryder Technologies: список рассылки sweng-gamedev . Архивировано из оригинала 12 апреля 2007 г. Проверено 20 апреля 2019 г.
  2. ^ Шумейкер, Скотт (8 августа 2005 г.). «[Sweng-gamedev] Языки более высокого уровня (было: Многоплатформенная балансировка нагрузки нового поколения» . Midnight Ryder Technologies: список рассылки sweng-gamedev . Архивировано из оригинала 20 июля 2007 г. Проверено 20 апреля 2019 г.
  3. ^ Энтони Ньюман (28 октября 2017 г.). Несинхронизировано: система ближнего боя The Last of Us (видеозапись). Конференция разработчиков игр. 37 минут. Архивировано из оригинала 14 декабря 2021 г. Проверено 5 ноября 2017 г.
  4. ^ «ОпенГОЛ» . OpenGOAL . Архивировано из оригинала 13 декабря 2022 года . Проверено 23 октября 2022 г.
  5. ^ «Джек и Дакстер ОТКРЫВАЮТ ГОЛ, прохождение 100%!» . Ютуб . Возмутительный Джош. 22 июня 2022 г. . Проверено 16 мая 2024 г.
  6. ^ «Отчет о проделанной работе – октябрь 2023 г.» . OpenGOAL . 30 октября 2023 года. Архивировано из оригинала 16 мая 2024 года . Проверено 16 мая 2024 г.
  7. ^ «Отчет о проделанной работе – апрель 2024 года» . OpenGOAL . 30 апреля 2024 года. Архивировано из оригинала 16 мая 2024 года . Проверено 16 мая 2024 г.
  8. ^ «Прогресс» . OpenGOAL . Архивировано из оригинала 12 февраля 2024 года . Проверено 16 мая 2024 г.

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d045fb5d6e01023894792daede6edbd5__1716076800
URL1:https://arc.ask3.ru/arc/aa/d0/d5/d045fb5d6e01023894792daede6edbd5.html
Заголовок, (Title) документа по адресу, URL1:
Game Oriented Assembly Lisp - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)