不良少年 » プログラミング »

D言語とはなんぞや?

Atom RSS

D言語とはなんぞや?

 私の本業はシステムエンジニアです。
 仕事で使ったものだけでも、アセンブラから始まって、C、C++、Objective C、C#、Java、Visual Basic、Perl、Ruby、Python、PHP、COBOL、Pascal、Fortran、その他諸々。
 ……なんとも雑食なプログラマだこと。
 自宅ではゲームばっか作ってるので、TJS(吉里吉里)D言語をメインに使ってます。
 吉里吉里は最近有名ですね。NScripterと並んで商業ゲームや同人ゲームで使われてますし。同人ゲームサークルさんなどでは愛用してる方も多いでしょう。
 逆にD言語の方は、ほとんど聞いたことがないと思います。

 D言語とは乱暴な言い方をすると、「バグを出しにくく、書きやすい構文で、しかも高速動作する」という、なんだかいいとこ取りなプログラミング言語です。
 あたしゃすっかり気に入っちゃって、2004年くらいからずっと使ってます。
 ……なんですが、いつまでたっても書籍は出ないわ、ネットで検索してもほとんどヒットしないわ。
 このままだと自分でも忘れそうなので、今のうちにメモっとくことにします。

 ……前にも増して、一層なんのサイトだかわからなくなりそうだ。(泣)

参考リンク

 D言語について調べたい方は、まず以下のサイトをじっくり読んでください。

D言語の利点

 職業プログラマなら上のサイトを読むだけで理解できるでしょうが、それだけではあんまりなので、「同人ゲームサークルのプログラマ」から見た場合の利点を挙げておきます。

コンパイルが爆速

 もしあなたがC、C++プログラマであればご理解いただけるでしょう。
 何重にもincludeされたファイルの、あの亀にも嘲笑されそうなコンパイル速度。
 そんな昨日とはさよなら。30分もかかったコンパイルが数秒で終わるこの快感。

標準で単体テストが使える

 やたら冗長な書き方のフレームワークなんざ不要! unittest 構文で、ソースコード内に直接試験コードを書けます。
 むろんリリース時には自動で試験コードは無視されるので、無駄に容量食ったりもしません。

契約プログラミングで安心設計

 それぞれの関数に事前条件(関数実行前の引数チェック)、事後条件(関数実行後の戻り値チェック)、クラスには不変条件(メンバ関数を実行する度にチェックされる)を書くことができます。
 null 値を渡してエラーが出たなんつー初歩的なバグとはオサラバよ!

Cのライブラリもそのまま使える

 C言語で書いたDLLやEXEファイルの関数、OSのAPIなども直接呼び出せます。
 いちいちD言語で書き直す必要はありません。DirectXやOpenGLとかも使えます。

ガベージコレクション

 メモリリークと戦った日々が懐かしい。
 GC使いたくないなら、昔ながらの malloc()、free() で直接メモリ管理してもオゲ。

可変長配列とスライシング

 ノベルゲームのスクリプトエンジンとかシナリオ変換ツールとか作る場合、字句解析でものすごーく役に立ちます。
 配列のスライスはC言語のような「メモリのコピー」ではないため、省メモリ&高速化も実現。

超高速の実行ファイル

 ビルド後の実行ファイルも軽快(C、C++と同等)に動作します。

D言語の欠点

 これだけ見るといいとこばっかのようですが、以下に挙げるような欠点もあります。

書籍が全然ない

 私の知る限り、国内で発行されたD言語の本は一冊だけ、しかもあまり初心者向きとはいえません。
 D言語を覚えるにはネットだけが頼りです。

IDE(統合開発環境)がない

 EclipseやCode::Blocksにプラグインはありますが、まだまだテキストエディタでコーディング→コマンドラインでmake、の作業が主流です。
 デバッガなどはVisual C++のを使ってもいいんですけどね。

ゲーム開発ではGCが邪魔になることがある

 特にシューティングなどのリアルタイム系では要注意。
 なんせGCはメモリが足りなくなると勝手にスキャン始めますので。
 malloc() で確保されたメモリはGCのスキャン対象にならないので、画像や音声などで大きなメモリが必要な場合は malloc() を使いましょう。

64ビット版のコンパイラはまだない

 まぁ3Dレンダリングツールならともかく、ゲームでx64アプリは見たことないので、当面は大丈夫でしょうが。

Windows 95/98/Me に対応させる場合、Shift_JISに変換しなきゃならん

 D言語ソースの文字コードは ASCII、UTF-8/16/32 のいずれかでなければなりません。
 Windows 95/98/Me の日本語版はCP932(Windows-31J、Shift_JIS)を扱うので、出力前に変換しないと文字化けします。
 2000/XP/Vista/7 はUTF-16文字列に終端文字 (“\0″) を追加するだけですみますが、末尾にAが付いてるAPI(MessageBoxA など)を使う場合は同じように変換する必要があります。

まとめ

 なんだか長所と短所がえれえハッキリ分かれた言語ですが、気に入ってるのはホントなので、今後は気付いた点などちまちま書いてこうかと思います。
 ……D言語の本、出ないかなあ。

関連記事

トラックバック

コメント

コメントはまだありません。

コメント投稿フォーム

※ スパム防止の為、コメント内に2個以上のリンクがあった場合、サイト管理者 (かのう神路) が承認するまで表示されません。

ページの先頭に戻る