ものがたり(旧)

atsushieno.hatenablog.com に続く

IGDA 「ゲームにおけるスクリプト言語の現状」に行ってきた

http://www.igda.jp/modules/eguide/event.php?eid=58

個人的にはゲーム開発とか全然やったことないんだけど、luaは全然知らないし、ecmascriptの実装にまつわる話ってのも面白そうだと思って参加してみた。MonoでもSecond LifeとかUnityみたいな事例があるし、PDC 2008ではMono.Simdもゲーム開発の文脈で語られていたものだし、今後使われていくようになるかもしれないし。

いろいろ収穫があったなーと思う。例によって僕の視点でmonoを意識しながら感想を書いてみる。

Luaのセッションは、入門的な話から入ったので、ゲーム開発の現状をほとんど何も知らない僕はこれで助かった。デバッグフェーズでの、コード修正→ビルド→ゲーム再起動→問題の箇所まで移動→結果確認、のうち最初と最後を直結させたいのでLuaでコードをいじって動的にリロードする、という需要はわかるなあ。monoで動的にデバッグしようと思ったら、booみたいな言語を選ぶか、mono 2.2以降であれば、Attach APIを使ってリモートデバッグすることになるだろうな。数年前のGNOME Summitで、bansheeのAaronが、組み込みbooシェルを使ってbansheeを内側から操作していたのを見たことがあった。

あとLua 5.1にはインクリメンタルGCまであるらしい。その話を聞いてふと思ったのだけど、monoのsgen-gcは未完成とはいえ、僕の2,3年前の記憶では(そんなに昔なのか)、詰まっているのはgeneric objectまわりだったので、もしかしたらgenericsに対応していない(実行環境的に動的コード生成が出来ない)Unityでは使っていたりするのかもしれない。覚えていたら聞いてみよう。あと、話の感じからして、インクリメンタルではあってもcompactingではないんだろうなあ。

CriScriptのセッションはディープなもので楽しめた。てかCILを独自拡張したものを生成しているそうで(それ自体は失敗と思われているそうだけどw)、もしかして何かうまいことやっちゃえば、monoでも活用できるかもしれない。独自拡張を出力しないことも出来るようだし。てかCILを自分のプロジェクトでバイトコードに使っているっていう人は他にもいて、へえぇと思った。

バイトコード生成も、コードジェネレータの時点で、monoがJITでやっているようなpeephole postpassとかdead code eliminationをやっているそうで、いろいろ試しているんだなあ。(バイトコードの時点で命令が無くなっているとソースコードと連動したデバッグは面倒かもしれないけど。)

ゲーム組み込みの観点では、RegexだのDateだのが入るのはコードサイズの関係でもったいない、っていう話は笑えた。言えてるなあ…216KB中44KBもRegexだけで食われるのは、確かにもったいない。あとやっぱりゲーム方面だとyieldとかコルーチンがほしくなるんだなあ。Second Lifeで使われているmonoも、monocoか何かのcontinuationが使われていたりするけど、多分これは当事者からしたら当然の流れなんだろうな。

最近はMiguelを含むmonoハッカーの何人かがGDCに遊びに行ったりして、興奮して帰ってきたりするのだけど、彼らもあっちでこういう話をいろいろ聞いてきているんだろうなあと思った。