| パラダイム | マルチパラダイム |
|---|---|
| 家族 | リスプ |
| デザイン: | アンディ・ギャビン |
| 開発者 | ノーティードッグ |
| 初登場 | 2001年12月3日 |
| 安定版リリース | 2012年2月3日 |
| タイピングの規律 | ダイナミック、潜在的、強力 |
| 範囲 | 語彙 |
| 実装言語 | アレグロ コモンリスプ |
| プラットフォーム | プレイステーション 2、プレイステーション ポータブル、プレイステーション 3 |
| ライセンス | 独自 |
| 影響を受けた | |
| Lisp、Scheme、 ゲーム指向オブジェクト Lisp (GOOL) | |
Game Oriented Assembly Lisp ( GOAL 、 Game Object Assembly Lispとも呼ばれる) は、プログラミング言語であり、Lisp言語の方言であり、Naughty Dog社のAndy GavinとJak and Daxterチームによって開発されたビデオ ゲーム用に作成されました。
これはAllegro Common Lisp を使用して記述され、 Jak and Daxterシリーズ全体のゲーム ( DaxterおよびJak and Daxter: The Lost Frontierを除く)の開発に使用されました。
デザイン
GOALの構文はLisp方言のSchemeに似ていますが、クラス、継承、仮想関数など、多くの特異なオブジェクト指向プログラミング機能を備えています。[1] GOALは命令型プログラミングスタイルを推奨しています。つまり、プログラムは関数を再帰的に評価する関数型プログラミングスタイルではなく、実行される一連のイベントで構成される傾向があります。これは、そのような副作用を許可しながらも命令型スタイルを推奨しない Schemeからの逸脱です。
GOALはインタプリタでは実行されず、PlayStation 2のマシンコードに直接コンパイルされて実行されます。ガベージコレクションの機能は限られており、ランタイムサポートに大きく依存しています。ビデオゲームコンソールの定数メモリでの実行に適した動的メモリ割り当てプリミティブを提供します。GOALは、特別な形式[1]を使用したインラインアセンブリ言語コードを幅広くサポートしており、プログラムは1つの関数内でアセンブリと高レベル構造を自由に混在させることができます。
rlet
GOAL コンパイラはAllegro Common Lispで実装されています。長期間のコンパイル リスナー セッションをサポートしており、これによりコンパイラは、シンボル テーブルを含むコンパイル済みで実行中のプログラムの状態に関する情報を得ることができます。これにより、動的リンクに加えて、関数を編集、再コンパイル、アップロードし、再起動せずに実行中のゲームに挿入することができます。このプロセスは、一部のC++コンパイラが提供する編集と継続機能に似ていますが、プログラムで任意の量のコード (オブジェクト ファイル全体まで) を置き換えることができ、デバッガーで実行中のゲームを中断することはありません。この機能は、コードを実装し、 Jak ゲームと Daxterゲーム でレベル ストリーミングを有効にするために使用されました。
用途
GOAL が最初に使用されたのは、ゲームJak and Daxter: The Precursor Legacyでした。前身の言語である Game Oriented Object Lisp (GOOL) も、Crash Bandicoot用に Andy Gavin によって開発されました。
ノーティードッグはGOALの主要な開発・保守エンジニアを雇用しておらず、新しい親会社であるソニーからスタジオ間で技術を共有するよう圧力を受けていたため、ノーティードッグはLispから移行した。[2]
正直に言うと、次世代開発に GOAL を使用しない最大の理由は、私たちが今やソニーの一部になったからです。数年前、ソニーが Naughty Dog を買収し、私たちの技術の一部を他のソニースタジオで活用できるようにしたいと考えたにもかかわらず、他のスタジオが私たちのコードベースをまったく使用できないことに気づいたときのソニーのショックは想像に難くありません。ソニーは私たちが他のスタジオとコードを共有できるようにしたいと考えていますが、これは双方向です。つまり、他のスタジオが私たちのコードを使用し、その逆も同様です。これに、新入社員が新しい言語を習得する難しさ、外部開発ツールのサポートの欠如 (独自のコンパイラ、リンカー、デバッガーがあり、IDEとしてはほとんどEmacs を使用する必要がありました) などを加えると、明らかに他の多くの要因が関係していることがわかります。ただし、これらの問題は実際には技術的な問題ではなく、社会的な問題であることに注意してください。
— スコット・シューメーカー
しかし、その後、 The Last of Usを含むいくつかのPlayStation 3ゲームのスクリプトに再び使用されました。[3]
オープンゴール
コミュニティプロジェクトであるOpenGOALは、既存のJak and Daxter: The Precursor Legacy、Jak II、Jak 3、そして暫定的にJak X: Combat Racingのアセットを逆コンパイルし、ネイティブに再コンパイルすることで、GOALをx86-64に移植することを目的として2020年に開始されました。 [4] C++で書かれたGOALコンパイラと、 Naughty Dogの元の実装と同様のワークフローを可能にする読み取り-評価-印刷ループが含まれています。2023年11月までに、OpenGOALチームは最初の2つのゲームの100%完成可能な移植版を制作し、[5] [6] 2024年現在、 Jak 3の移植版が開発中です。[7] [8][アップデート]
参考文献
- ^ ab Shumaker, Scott (2005年8月11日). 「[Sweng-gamedev] Higher Level Languages (Was: Next Gen Multiplatform Load Balancing)」. Midnight Ryder Technologies: sweng-gamedev メーリングリスト. 2007年4月12日時点のオリジナルよりアーカイブ。 2019年4月20日閲覧。
- ^ Shumaker, Scott (2005-08-08). 「[Sweng-gamedev] Higher Level Languages (Was: Next Gen Multiplatform Load Balancing)」。Midnight Ryder Technologies: sweng-gamedev メーリングリスト。2007-07-20 時点のオリジナルよりアーカイブ。2019-04-20閲覧。
- ^ Anthony Newman (2017-10-28). Unsynced: The Last of Us Melee System (ビデオテープ). Game Developer 's Conference. 37分目。2021-12-14時点のオリジナルよりアーカイブ。2017-11-05に閲覧。
- ^ “OpenGOAL”. OpenGOAL . 2022年12月13日時点のオリジナルよりアーカイブ。2022年10月23日閲覧。
- ^ 「Jak and Daxter OPENGOAL 100% Playthrough!」YouTube . OutrageousJosh. 2022年6月22日. 2024年5月16日閲覧。
- ^ “Progress Report - October 2023”. OpenGOAL . 2023年10月30日. 2024年5月16日時点のオリジナルよりアーカイブ。 2024年5月16日閲覧。
- ^ “Progress Report - April 2024”. OpenGOAL . 2024年4月30日. 2024年5月16日時点のオリジナルよりアーカイブ。 2024年5月16日閲覧。
- ^ “Progress”. OpenGOAL . 2024年2月12日時点のオリジナルよりアーカイブ。2024年5月16日閲覧。
