ゲーム制作でのRacketの使われ方

RacketCon 2013( http://con.racket-lang.org/2013/ )で、Naughty Dogの人による発表があったらしい。NDはPS2時代にFranzのLispで作ったGOAL( http://www.franz.com/success/customer_apps/animation_graphics/naughtydog.lhtml )でも知られるが、スライドにあるように、PS3時代でもRacketを使ったC++ソース生成でLisp(ただしScheme)を使い続けている*1。(過去にもUC2の事例がある: http://www.gameenginebook.com/gdc09-statescripting-uncharted2.pdf )

S式によってデータを定義し、C++ソースとランタイムデータを生成させている。
...このビデオを見て、初めてMzSchemeを"ミズスキーム"と発音することを知った。。あと、RacketConの他のビデオはみんなアヴァンギャルドですごい。

どうやってSchemeを売り込んでいくか

個人的にも、同じ手法(Scheme DSL + C++/C#コード生成)でゲームやインスタレーションを作っていたので、どうやってこの手の手法をAAAタイトルにDeployしたのかは興味が有る。
ビデオ/スライドによると、以下が壁になったらしい:

  • エラーリポート: Syntax transformationによって文脈が失われるので、エラー報告を良く作ることが出来ない。
  • S式構文: 最終的にはみんなNotepad2でちゃんと編集できたが、心理バリアが有る。

どちらもScheme界にとっては永遠の課題のような気がするが、これらに真面目に取り組むのが処理系の差別化に有効に思える。
どちらかというと、DSLでポチポチとゲームを作るのは"日本的"で、ラブプラスWindowsの"メモ帳"でスクリプトの編集をして実装されたという逸話まである。

薗部氏「(snip) NOTEPADでの作業はとてつもなく大変でした。実機で動くモノを見るためのコンバート作業とかに最初は5分かかってましたからね。まぁ、このプロジェクトは環境整備にそれほど時間が取れなかったので文句を言っても仕方がなかったですから。でも、ちょっとだけ、文句を言ったらコンバートから実機確認までの所要時間は1分に改善されました(笑)」

今回のtalkのように、100名以上のアーティストにもテキストエディタでS式を書かせるようなプロジェクトが他所で採用されるかというと難しいと思う。
いわゆるゲームエンジンでは、グラフィカルな(例えば、フローチャートをベースにした)AI/イベントエディタが付属するのが普通で( http://www.siliconstudio.co.jp/middleware/orochi/product/library/#character )、スクリプト言語はより"プログラマ寄り"のユースケースに寄っている。
つまるところ、Schemeは"S式処理系"であり、データを統合された構造化構文で記述できることの強力さを売り込んでいけば良いと思う。このための編集UIの強化などが課題として有り、研究が必要そうだ。S式はJSONよりは多分読みやすく、XMLよりも書きやすいという強みが有る。

*1:GOALは実際にMIPSコードを出力するコンパイラだが、Racketはソースジェネレータとして使用されているという違いが有る。個人的にはそれほど大きな違いとも思わないけど。