IGDA SIG-GT12「ゲームにおけるスクリプト言語の現状」のレポート

http://www.igda.jp/modules/eguide/event.php?eid=58へ行ってきた。

CRI Scriptの実装の話が面白かったです。

メモをとりました。内容は保証しませんので…

CriScript @ errorの人

  • 趣味と実益をかねて開発
  • コンシューマーゲームゲームエンジンの組み込みをやっている
  • 大規模ゲーム開発では、スクリプト言語はスタンダード 特にヨーロッパ、アメリ
  • 予言 五年後、ゲームコードの殆どはスクリプト言語で記述される。
  • CriScript オープンソースのECMA262実装 Win32/Xbox360/OSX/iPhone
  • SPUにも移植したいが…
  • 標準仕様の採用
    • 利点 ある程度こなれた言語仕様 既存のテストコードが使える オープンである
    • 欠点 仕様規模が大きい(ゲームには不要そうな機能も) ヲレ拡張が難しい 組み込みに向いていない仕様もある
  • Webのアクセス数
    • 200-300/day アメリカ、日本、 意外とロシアが多い。
  • 実装編
  • flexは使わないで自前コード
  • バイトコードの選択がパフォーマンスに影響する。慎重に。
    • CIL, JAVA, ASのバイトコードを検討
    • CILの中身を知りたくて、CILを選択したが、CILはどちらかといえば失敗-
    • CILはスタックマシンなので効率が良くない
    • 中間フォーマットとは良いが、最終ターゲットのバイトコードとしては効率が良くない。
    • 独自命令を追加した。
    • 今だったらLLVMがオススメ
  • Q バイトコードの乗り換えはどれくらいかかるのか。
    • A やりたくない。 コードジェネレータとVMを書き換えないといけない。
  • スタックマシン
    • 実装が容易
  • ディスパッチループ
    • 単純なスイッチ文
    • ダイレクトスレッド、コンテクストスレッド やってみたがあまり効果が無かった。
  • Q スタックマシンが最適でない どれくらい違うと考えているのか by 笹田先生
  • A スタックだと、4回かかるバイトだと1回でできる。3,40%早くなるのは
  • Q コードをみたけど、最適化の余地がるby 笹田先生
  • A ためしてみます。
  • BooSt::Regenを使ったらVMの30%のコード
  • 今後はいらないライブラリをリンクしないようにしたい。
  • オブジェクト管理
    • リファレンスカウンタ、GC
    • GC自動発動は無し。明示的にGCする。
  • ネイティブコード生成
    • ゲーム機としてチャレンジング
    • セキュリティモデル
    • 今後は非署名コードは実行できない。
      • C++ソースファイルを生成すれば可能ではあるが、スクリプトの意味が無い。
    • JITパフォーマンス
  • CriScriptでは
    • 静的なevalのみ許可
  • パフォーマンス
    • ネィティブコード比 1/7-1/20ぐらいのパフォーマンス
    • Luaのパフォーマンスをリファレンスにしている。
  • 最適化の軸
    • VM最適化
    • アーキテクチャ毎に最適化する。
      • IA32 命令数を減らす。正統的な最適化が有効 まずIA32で最適化する
      • PPC パイプラインをつまるところ
      • ARM バスが貧弱なことが多いので、バスのR/Wを減らす。
      • プロファイリング環境を整えれば、モチベーションが保てる
      • コード生成をアセンブリレベルでよく見る。
    • バイトコードのコード生成最適化
        • ピープホール最適化が一番効く。
    • 高速化に適した言語仕様の拡張
      • class定義、明示的な型指定:型毎の演算命令を用意する
      • ゲーム機にフィットする拡張
    • (スクリプト言語で最適化したコードを書く)


Luaの発表とパネルのメモもあるけど、中途半端すぐる。