Open Source Conference 2008 Tokyo/Spring 2日目レポート(1/4):「D言語BOF(1/2)紹介/事例編」


(追記)こちらにもっと詳しくレポートを書いている方がいらっしゃいます。http://d.hatena.ne.jp/Dubhead/20080301

オープニング

作者Walter Brightさんからの祝電を読み上げる。
「もうこれからは生産性と性能のどちらかを犠牲にする必要はない」
とのこと。

D+SDL+OpenGLでざくざくゲームを作る

講師:ABAさん(id:ABA)

略歴紹介
    • PC-6001時代からゲーム作り続ける
  • なんでDを使うようになったか?
    • Cは再利用性が悪い
    • 元々Javaの人間 最低限オブジェクト指向ないとやってられん
    • C++はGCないし黒魔術っぽくて面倒
    • はまじさんからDを聞き、やってみようと
ゲーム製作の変遷(かっこ内の数字はDのバージョン)
    • 2003/8 最初のゲームを作る (0.61)
    • youtubeからデモムービーを紹介(TT,gunroar)特にゲーム名は出さず
    • p47(0.7),tumiki(0.8)の紹介
      • tumikiは海外のゲーム会社がwii版を作ってるらしい(製作には関わってない)
    • 0.100ショック(0.99の次は1.0だと誰もが思ったのに…)
      • この頃TT
    • mucade (0.148)
    • titanion (0.174)

これだけ量産できたのはDのおかげ

Dの利点
  • GC、ビルド速い、ランタイムほぼ不要exe作成
  • Noiz2bg(noiz2saの背景だけ流す)MonaOSで動く(C+SDL)
  • ゲームのライセンスは全部修正BSD

はじめてのD

講師:k.inabaさん(稲葉一浩さん)
Dドキュメントの翻訳をした人。
現在オーストラリアにいるためskypeからプレゼン。

D?

「変化の激しい言語」
今日のDは明日のDではない
今日のプレゼンが一週間後も同じとは限らない
今日は「今日のD言語の話」をする

特徴
  • 見た目はCやJava系統
    • DでもCでも動くコードもある
  • ネイティブコンパイル
    • 速い
  • スクリプト言語っぽくも使える
    • #!/...みたいにしてシェルから実行できたりする。
  • コンパイル時限定eval
    • 文字列からその名前のフィールドを持つクラスを生成
  • オブジェクト指向っぽい機能
    • ミックスイン
  • 関数型っぽい機能
    • クロージャ

D&DirectX

講師:Hiroki Itoさん

製作物
  • 花火の立体映像
    • 高速にパーティクルを扱うことができる
  • 魚が泳ぐ3Dムービー
  • 長崎 出島町の仮想環境シミュレーション装置
    • 中に入るとCG空間に入り込んだような感覚となる
Dのいいところ
  • C++だと
    • パフォーマンスだめ
    • デバッグやりにくい
    • シングルスレッドだから
      • ここはこれから大問題になるボトルネック
    • LuaはGCがくせもの
  • Dのいいところ
    • C++よりも汎用性を高められる
    • ポリゴン頂点情報の取扱い
    • DXの3Dモデル構成情報はCPU、GPUで共通
    • mixinを使うとC++に比べはるかに簡素なコード
    • instancing
      • DX Draw関数はオーバーヘッドが大きく、如何に呼び出し回数を減らすかがキモ
    • ビデオメモリ、サウンドバッファ操作
    • ロックアンロックをまとめて記述できる
    • interface(C++)による過去の資産とのリンク

CプログラマがDを使うと?

講師:一色さん

  • 普通に使うだけならCと同じで書ける
  • プロトタイプ不要
    • そもそもヘッダファイル書く必要がない
  • Dでは変数にプロパティがある
  • 配列がいい
    • sortプロパティ使えばソートは一発
    • dupプロパティでコピー
  • Cライブラリが使えるSDL,OpenGL,DirectX
    • ヘッダをDモジュールにする必要あり

Dでゲームを作ってみる〜芝とdHellの紹介〜

講師:omegaさん(id:o_mega)

最近作ってるゲーム 芝

ニコニコ動画ネタで生態系シミュレーション
ニコニコ動画にもupされてる

dHell/dHell2
  • dHell
    • Kenmoさん作のSDL/SDL_mixerのラッパー
    • 問題点
      • 表現力貧弱
  • dHell2
    • 作画周りをOpenGL
    • RectwinderNTGL
    • 問題?点
      • OpenGLドキュメント少ない
      • VistaだとOpenGL重いらしい
      • 一部のGPUで挙動おかしい
なんでDに?

ABAさんとissikiさんが使ってたから

Cの.hを確実にDのモジュールへ変換する

講師:糸柳さん(ITKz)

従来の方法
  • Cの型からDの型へ
  • extern(c):を使ってDモジュール内の宣言を書く
  • DMD「では」確実に動く
  • DMD:Win32、x86Linuxしか対応してない(64bitOS未対応)
GDCを使う
  • (Dはマイナー、D使いはきもい!)
  • GCCのDフロントエンド
  • (最近のGCCではGHC(haskell)もあるらしい)
  • 注意点?
    • Cは処理系依存でサイズ変わるがDは不変
      • win32:Cのlong4byte,Dのint4byte
      • win64:Cのlong4byte,Dのint4byte
      • 64bitUbuntu:Cのlongは8byteだからずれる
  • 解決策
    • Cの構造体へはCのコードからアクセスする
その他
  • swig4dなんてのもある
  • 引数のスタック上のオフセットはどうなるか不明

おことわり

後半は別のセッションを聞きにいったため聞いてません。