動的バインドとllvmに関して楽しそうな話してたぜ

1
h.omae @pigeon6

数日前Popcapの人と呑んだらなんか昔僕がやってたのと同じような仕事をやっているらしい。カジュアルゲームには無縁の泥臭い技術とシステムかなと思っていたがやはり大所帯になると巨大なフレームワークを作ったりするみたいだ。

2010-03-18 01:40:55
h.omae @pigeon6

そのときに昔書いたReflectionの話をしたらこっちが引くぐらいすんげー食いついて来たので意外と今でも賞味期限切れじゃない話題なのかな、と思い始めた。

2010-03-18 01:41:58
h.omae @pigeon6

ゲーム開発でもC++なんかもうみんなそろそろ捨てるんじゃないの?そうでなくてもコンパイラといかにバトル(強敵と書いて「とも」と読む系の)するかみたいな話はいい加減もういいだろと思っていたが興味がある人が多いならMITライセンスで一から書いてみようかな。やり残した最適化もあるし。

2010-03-18 01:44:21
h.omae @pigeon6

と思いつつも自分でもコレいい加減話題にするの飽きてるんだよなぁどうしようかなぁ、と葛藤する。自分的には今から作って出しても高橋名人の冒険島4みたいな立ち位置になることが自明だろと思ってるし・・

2010-03-18 01:45:47
h.omae @pigeon6

あとHoard+自前ページ管理で、マルチスレッド対応&動的サイズ変更可能なヒープ+ログベースのメモリデバッガというのも自分のプログラマとしての課題としては積み残しになっている。

2010-03-18 01:49:29
H.Holon🍤/🐁🌕 @H_Holon

コンパイラとバトルなんて何年やってないかなぁ。最適化で手間かけるぐらいならアルゴリズムとか設計で改善したほうが速いし安定するしなぁ……。

2010-03-18 01:49:41
h.omae @pigeon6

ヒープの話はシステム的にはEmery先生の論文マルパクなんで自分のだって言うつもり毛頭ないけどGPLは使いづらいからMITライセンスとかzlibライセンスとかで在野に存在するとみんな幸せになれるかな。

2010-03-18 01:50:48
h.omae @pigeon6

そういえばgccがllvmをサポートし始めたらしいが、llvmの使い方についても面白い話を聞いた。

2010-03-18 01:56:59
h.omae @pigeon6

C++の何が問題だって、クラスの依存関係や最適化の見地からいろんなものがヘッダに入る→コンパイル遅い→毎回全部ビルド完了状態にして全部リンクしないと動かない→リンク遅い(あるいはリンク時最適化遅い)→バイナリをリロードして実機をリスタートしないといけない→最初からテスト、という

2010-03-18 02:00:10
h.omae @pigeon6

実行機材がインオーダーCPUだったりタイムクリティカルなシステムだったりリモートデバッグが基本だったりするのが一般的なゲーム開発という分野には、成果としてのバイナリ自体のクオリティは兎も角運用面がすこぶる向いてない言語=C++

2010-03-18 02:02:33
h.omae @pigeon6

そんなC++の運用面で特にイケテナイT&Eのサイクルの遅さを解消するべくC++→ビルド→llvmで止める→実機で実行→実行時にJITコンパイルしつつ実行→モジュール単位でリロードとかC++のくせに出来ちゃうんだぜ的なドリームプロジェクトがあるらしい

2010-03-18 02:05:34
h.omae @pigeon6

また、そこまで行くとC/C++を別の次元で使える。llvmになるなら呼出規約だけ別の言語と揃えられるようにコンパイラキーワードを追加したりすれば、C#で書いてもJavaScriptで書いてもいいってことになる。C#->C関数の実行のコストが実質C->Cの時と同じになるシステムを構

2010-03-18 02:09:34
h.omae @pigeon6

そして徐々に世界はJavaScriptで埋まっていく

2010-03-18 02:09:55
h.omae @pigeon6

なぜならCプログラマが受け入れてくれる文法の言語の中で圧倒的にプロダクティビティが高いから!キリッ

2010-03-18 02:10:28
h.omae @pigeon6

勿論、異なる言語の呼び出しの時にはManaged Objectをどう扱うかという重要な問題がある。別の言語のオブジェクトを別の言語で破壊したり生成したりということを禁止すれば、あとはアクセサの問題だけになるのでシンタックスシュガーでも付けてコンパイラがハンドリングすればよろしい問

2010-03-18 02:16:45
H.Holon🍤/🐁🌕 @H_Holon

(de)serialize + dynamic loadingじゃダメですか? RT @pigeon6: そんなC++の運用面で特にイケテナイT&Eのサイクルの遅さを解消するべくC++→ビルド→llvmで止める→実機で実行→実行時にJITコンパイルしつつ実行→モジュール単位でリ

2010-03-18 02:21:00
taishi @zuigend

@pigeon6 個人的には、多くのハードで共通コードが通るようなシステムを目指すには枯れてていい言語だなーと。 ぶっちゃけ最適化とか、そこまで気にしなくてもCPUのオーバーヘッドとかもはや… って言いすぎると宗教紛争がおきちゃうか?

2010-03-18 02:26:27
h.omae @pigeon6

Monoはこの辺面白くて、底辺のガベージコレクタがC実装なので全てのメモリはfree()に通ずる。だから低レベルな言語では全てのリソースはmalloc()して返せばよろしい。

2010-03-18 02:29:24
h.omae @pigeon6

シリアライズ&デシリアライズはインスタンスでは可能でもC/C++の文脈ではクラスは対象に出来ないのでは? RT @H_Holon: (de)serialize + dynamic loadingじゃダメですか? RT @pigeon6: そんなC++の運用面で特にイケテナイ...

2010-03-18 02:30:46
taishi @zuigend

@pigeon6 確かにビルドからのフルリンクはアレなんで、信頼できるところはなるだけ.aやらに固めたりしちゃう。 リアルタイムにランタイムライブラリを読み替えつつデバッグ…とかできればまだねぇ… 結局プロジェクトに1人はバイナリコードレベルのスペシャリストが必要なのは問題かな?

2010-03-18 02:32:48
H.Holon🍤/🐁🌕 @H_Holon

portableな形で (de)serializerかけば(boost::serializationとか)クラス変更しても対応できると思います。RT @pigeon6: シリアライズ&デシリアライズはインスタンスでは可能でもC/C++の文脈ではクラスは対象に出来ないのでは?

2010-03-18 02:33:21
h.omae @pigeon6

言語によるオーバーヘッドを気にするくらいならまずは設計・アルゴリズムレベルのオーバーヘッドを気にしましょう。大抵はそれで終了です。でもねー、地味に、全体的にふんわり遅いッてのが開発後半で一番困るパターンなのも事実、じゃない? RT @zuigend

2010-03-18 02:33:54
h.omae @pigeon6

結果としてMonoのネイティブコードプラグインはmallocしたメモリをそのまま返したりする。うわぁコレ大丈夫なのかなと言いつつ

2010-03-18 02:35:13
H.Holon🍤/🐁🌕 @H_Holon

CEDEC/IGDAなどで Squirrelや Luaの組込スクリプトを利用した動的な状態操作を覚えた私にとって、次にあったのは C++など native codeでの動的状態操作でした。Protocol Buffersとかyamlで保存・更新・回復。

2010-03-18 02:37:01
h.omae @pigeon6

あー、やっぱり拡散していくんだな・・・(遠い目)

2010-03-18 02:37:25