web-dev-qa-db-ja.com

ゲーム開発のためのDプログラミング言語

最近、C++(0xでさえ)が非常に制限されていると感じたため、代替案を探し始めました。

Java、C#、PythonまたはRubyは忘れてください。私はC++の低レベルの性質が好きで、仮想マシンは好きではありません。さらに、ゲームエンジンの開発者なので、本当に高速でなければならないコアルーチンを開発する必要があり、最近、コードの表現力に飢えています。C++はalmost-there言語ですが、テンプレートの使用方法には多くの例外があります。 GCCは、私が望んでいたほど最適化していません。

だから私はDを学び始めることを考えています。

ゲーム開発者としての私のニーズは十分だと思いますか? Dが使われているのを聞いたことがないので、私は警戒しています。

ありがとう!

54

私は最近、かなりのDを学びましたが、まだまだあります。これまでに学んだことから、languageは実質的に何にでも最適ですが、compilersおよびlibrariesは現在のところ最適ではないため、コンパイラーにバグがないことを確認することはできません(そうではありません)。ゲームプログラミングの場合、たとえば、ガベージコレクションが正しく行われていること、およびコンパイラが重要なコードを誤って最適化していないことを確認する必要があります。このようなことは、言語。しかし、私自身は言語自体が最高であると思います(これは完全に主観的です)、それを使用するための唯一の障壁は、言語自体ではなく、完全な実装の欠如です。

39
Mehrdad

ゲームやデモを行うためにD 1.xを使用しましたが、それらの一部はパブリックドメインのオープンソースです( [〜#〜] a [〜#〜][〜#〜] b [〜#〜][〜#〜] c [〜#〜][〜#〜] d [〜#〜][〜#〜] e [〜#〜] )。

なぜDを使用するのかについてみんなと議論するという高額な代価を払う気があるなら、DはC++ランドでは前例のない生産性をあなたに与えることができます。

この方法を使用する場合は、D 2.x、Derelict、およびVisual Dを選択することをお勧めします(将来の読者へのヒント:これは2011年です)。

ゲーム開発に関しては:

  • d GCは実際の問題ではありません。フレームに割り当てすぎた場合ですが、それはそれで終わりです。プール、再利用などの古典的な方法が機能します。

  • linux、Mac、Windows間で移植可能なx86アセンブリを作成できます。また、静的な場合は、かなり楽しいテンプレート化された裸のアセンブリ関数を使用できます。

  • モジュールの境界を越えたインライン化は、「リンク時最適化」スイッチなしで機能しています

  • (C++と比較して)デバッグとリリースのバージョンを維持する方が簡単だと思う

  • c ++の場合と同じように、新機能を避けてコンパイラを保守的に選択します。

24
ponce

健太は、Dと Simple DirectMedia Layer(SDL) を使用して Windowsゲーム を開発しています。彼らはとても楽しいです。インスピレーションとソースを見てみましょう:

14
Corbin March

Dはビデオゲームに最適な言語であり、パフォーマンスの高い実行ファイルを迅速に開発するためのすべての機能を備えています。

  • ネイティブコードに高速でコンパイルされ、高速に実行されます。
  • ユニットテスト、プロファイリング、コードカバレッジをそのまま使用できます。
  • ガベージコレクションがデフォルトですが、独自のメモリアロケータを使用できます。
  • CとABI互換で、ネイティブライブラリを呼び出すためにマーシャリングコストを支払う必要はありません。
  • 型システムのスレッドセーフ:共有の純粋で不変の修飾子。
  • タイプシステムでのメモリの安全性:@ safe、@ trusted、@ system。
  • コンパイル時の関数評価、コード生成など。

個別のスクリプト言語は必要ありません。コードを生成するための追加のコンパイル手順は必要ありません。低レベルシステムのパフォーマンスが重要な場合でも、仮想マシンのメモリモデルに限定されることはありませんが、スクリプトの生産性と安全性はすべて得られます。ゲームロジックのマネージ言語。手元の問題について、手続き型、オブジェクト指向、関数型、汎用、またはメタプログラミングパラダイムから自由に選択することもできます。

8

まあ、それはあなたがDを使用している場合、完全にゼロからすべてを構築しなければならないようなものではありません。たとえば、次のように使用できます。

  • 入出力用のGLFW
  • レンダリングエンジンとしてのHorde3D
  • サウンドのためのOpenAL
  • 物理学のための弾丸
  • スクリプト用のLua
  • lzo高速解凍
  • シリアル化のために多分オレンジ

オーバーレイについてはわかりません。それはうまくいけば私にとってうまくいくかなり堅実なベースです:)

頑張って!

7
shd

Dプログラミングでは、次のとおりです。

  • derelict 誰がopengl 3とopengl 4をサポートしているか

ほとんどの場合、言語プログラミングではopengl 3および4はサポートされていません

  • yage 無料の3Dゲームエンジン。

少しハウツー: http://blog.Fedora-fr.org/bioinfornatics/post/D-programming-OpenGL-and-MVC-Pattern

DでRAIIを使用する場合、キーワードスコープであり、非常に強力です。

6
bioinfornatics

2014年へようこそ!

これを書いている時点でのDの最新バージョンは2.067です。 Dはautoに関して少し不安定ですが、それ以外では、なぜDを使用しないのかわかりません。コンパイラーが大幅に改善されています。

私の意見では、DはC++よりも読みやすく、習得も容易です。 CへのインターフェイスとC++への部分的なインターフェイスが含まれています。変数と対話できるインラインアセンブリも可能です。 D標準ライブラリはPhobosと呼ばれます。

Dを強くお勧めします。Dは効率のために作られました。 Adam D. Ruppeによれば、「[Cも]同じくらい速い」。そして、Cは最も速い言語の1つです。したがって、Cの速度とC++の高レベル機能を備えたゲームを構築する場合、Dはその中間に位置します。質問がある場合は、irc.freenode.net #dに参加してください。

まとめると、Dは基本的にC++の安全なバージョンです。言語はOOPを含むマルチパラダイムですが、FPパラダイムはpure関数と不変性を使用して強調されました。すべてのオブジェクトはinitプロパティを持っているため、 'int foo;'を宣言すると、それはint.initに初期化されます。はい、まだポインタがあります。Dのポインタは左辺値と呼ばれ、値は右辺値と呼ばれます。左辺値は常に右辺値を指します。

詳細については、公式Dサイト http://www.dlang.org/ をご覧ください。

4
AMDG

自分たちを「team0xf」と呼ぶ人々は、完全にD1で this を行いました。

1
Baxissimo

Remedy(Max Payne、Alan Wake、Quantum Break)はDを使用しています: http://dconf.org/2013/talks/evans_1.html

1
Denis Gladkiy

私もいつかD言語を学ぶのを楽しみにしています:)

ただし、覚えておかなければならないことが1つあります。優れた言語は優れていますが、ゲーム開発者として、入札を行うためのツール(ライブラリなど)も必要です。そして現在、Dへのバインディングを持っている優れたライブラリはほとんどありません。

Ogre -ポータブル3Dグラフィックのすべてのニーズに対応する、自由ではない、主要なライブラリの1つ。

もちろんもっと必要ですが、それはあなたのゲームに大きく依存します。

C++ライブラリのDへのバインディングを作成するのがどれほど簡単か難しいかはわかりません。難しいかもしれないし、簡単かもしれないし、やや自動化されているかもしれません。私が理解しているように、言語は互いに非常に近く、D開発者はおそらくC++を念頭に置いていたので、後者はかなり可能でした。

お役に立てれば。

0
Septagram