3

私はゲームを設計していますが、この質問は、クラスター内のノードとメインサーバー間の双方向通信を必要とするすべての状況に当てはまります。私はクラスターにかなり慣れていませんが、Goで、時にはDで積極的にプログラムしています。

私は本当に現代語(C / C ++ではない)を使いたいので、次の理由でこれら2つの言語を選択しました。

  • 配列スライス
  • 優れた並行性サポート
  • クロスプラットフォーム&ネイティブコンパイル(複数のコンパイラ実装を使用)
  • GC(両方とも正確なGCに取り組んでいます)

https://stackoverflow.com/questions/3554956/d-versus-go-comparisonゲーム開発用のDプログラミング言語を読みました。

大まかに言えば、私のゲームは処理サーバー側のほとんどを実行し、クライアントはゲームの状態を自分の視点からレンダリングするだけです。ゲームはスケーリングするように設計されているため、クラスターで動作する必要があります。コンポーネントは主にCPUにバインドされており、ゲームの状態をクライアントと共有するメインサーバーに非同期で更新されます。ほとんどの計算はユーザー入力に依存するため、これらのイベントは個々のコンポーネントに送信する必要があります(したがって双方向RPC)。

Dが好きな理由:

  • 手動メモリ管理
  • テンプレート/CTFE
  • コードの安全性(@safe、コントラクト、イン/アウト)

Goが好きな理由:

  • 標準ライブラリ(pprofRPC
  • ルーチンに行く
  • goツール(特にgo get -uリモート依存関係をインストール/更新するため)

クライアントはDで記述される可能性がありますが、サーバーに影響を与えることはありません。

手動のメモリ管理が言語に組み込まれているため、私はDに傾倒しています。RPCに適したライブラリはありませんが、理論的にはそれを実装できますが、Goで手動のメモリ管理をエレガントに実装することはできません。

2つの言語のどちらかを選択した場合、この問題にどちらを使用しますか?

4

2 に答える 2

5

どちらでも機能すると思いますが、多くは好みによって異なりますが、クライアントを D で実行している場合は、サーバーを D で実行することをお勧めします。これは、関係する言語が少なくなるためです。2 つの言語を使用する場合、プロジェクトで作業する人は通常、両方を知っている必要があります。この時点では、Go と D はどちらもユーザーベースの点で十分に小さいため、両方を知っている人はほとんどいません。それは、あなたは明らかにそれらの両方をすでに知っています。

ただし、D の使用に関する問題が RPC ライブラリの欠如である場合、D はApache Thriftによってサポートされているため、それは問題ではありません。したがって、Dに、標準ライブラリに含まれていなくても、確かな RPC ライブラリがあります (実際、これは、D が Google の Summer of Code に最初に参加した成果の 1 つです)。

于 2012-09-14T21:33:04.423 に答える
0

あなたのゲームについては何も知りません。サーバーの同時実行性が重要である場合は、Go に投票します。

PUSH技術を用いた通信を実現する通信サーバーをGoで開発しました。Go はそのようなタスクに最適です。理解しやすいコンパクトでクリーンなコード。

同時実行アプリでは、自動化されたメモリが重要です。

クライアント アプリは、サーバー アプリのように同時実行ではありません。クライアント アプリは常に高いフレーム レートを維持する必要があります。

そのため、グローバル GC ロックを使用しない手動のメモリ管理は、クライアント アプリに適しています。

于 2012-09-14T23:59:24.007 に答える