本文へ移動

Game Oriented Assembly Lisp(GOAL)—Naughty Dogのゲーム向け言語

GOALは、Naughty Dogが性能に敏感なゲームコード向けに開発したLisp由来のプログラミング言語です。Jak and Daxterシリーズで特に用いられ、Crash Bandicootで使われた先行ツールから発展しました。

Game Oriented Assembly Lisp(一般にGOALと略される)は、コンソールハードウェア上で高性能なゲーム開発を支援するため、Naughty Dogが制作したプログラミング言語である。Andy Gavinとその同僚によって設計されたGOALは、Lispに似た構文と高水準の抽象化を、制約のあるプラットフォームに適したコンパクトで効率的な低水準コードを生成する能力と組み合わせている。この言語はNaughty Dog作品の開発中にAllegro Common Lispを用いて実装され、同スタジオのツールチェーンの中核を担うものとなった。

設計と特徴

GOALは、記号式、マクロ、迅速な反復開発への重視など、Lisp系言語に関連する多くの特徴を保っている。その一方で、メモリレイアウトの厳密な制御、明示的なデータ表現、必要に応じた手作業で最適化したアセンブリとの相互運用といった、ゲームエンジンの実用的な要請に向けられていた。開発者はこの言語により、ゲームプレイのロジック、オブジェクトの挙動、エンジンレベルのシステムを記述し、コンソール向けに高性能なネイティブコードへ変換できる構成要素を利用した。

歴史と開発

この言語は、コンソールの制約に合わせた独自言語とツールチェーンを構築してきたNaughty Dogの長年の実践から生まれた。GOAL以前には、Andy Gavinが同スタジオの初期プロジェクト、Crash Bandicootシリーズを含む作品向けにGame Oriented Object Lisp(GOOL)を開発していた。GOALはJak and Daxter: The Precursor Legacyの制作中に導入・初使用され、先行する社内言語の代替かつ発展形として機能した。これにより、より高速な反復開発と、保守しやすいゲームプレイコードに寄与した。

用途と例

GOALはJak and Daxterフランチャイズ全体で広範に使用され、キャラクターの挙動、ミッションのスクリプティング、エンジンシステムの実装に用いられた。そのLisp由来の性質は、開発中の迅速な反復作業に適していた一方、コンパイル処理はPlayStation 2時代のハードウェア向けに効率的なバイナリを生成した。歴史的背景およびスタジオの概要についてはNaughty Dogを、Jakシリーズにおける言語の役割についてはJak and Daxterを参照できる。先行言語のGOOLはCrash Bandicootと関連している。

注目すべき点と区別

  • ハイブリッドな手法:GOALは高水準プログラミングの利便性と、コンソール開発で求められる低水準の制御を結び付けた。
  • ツールチェーンへの統合:反復速度と実行時性能を優先する、特注の開発パイプラインに組み込まれていた。
  • 系譜:GOALは、GOOLに続く、ゲーム向けに調整されたLisp風システムについてのNaughty Dogの実験の継続を示す。

GOALは汎用的に公開された言語ではなく、スタジオ内部に特化した技術だった。しかし、表現力と制約のあるハードウェア向けの効率的な出力を両立させることで、領域特化言語がゲーム開発を加速し得ることを示している。より詳しい技術的・歴史的資料としては、Naughty Dogのツールチェーンに関するスタジオ回顧記事や技術講演が追加の文脈を提供しており、上記リンクはスタジオおよびシリーズ情報の出発点となる。

関連項目

著者

AlegsaOnline.com Game Oriented Assembly Lisp(GOAL)—Naughty Dogのゲーム向け言語

URL: https://ja.alegsaonline.com/art/37394

共有