私はゲームを設計していますが、この質問は、クラスター内のノードとメインサーバー間の双方向通信を必要とするすべての状況に当てはまります。私はクラスターにかなり慣れていませんが、Goで、時にはDで積極的にプログラムしています。
私は本当に現代語(C / C ++ではない)を使いたいので、次の理由でこれら2つの言語を選択しました。
- 配列スライス
- 優れた並行性サポート
- クロスプラットフォーム&ネイティブコンパイル(複数のコンパイラ実装を使用)
- GC(両方とも正確なGCに取り組んでいます)
https://stackoverflow.com/questions/3554956/d-versus-go-comparisonと ゲーム開発用のDプログラミング言語を読みました。
大まかに言えば、私のゲームは処理サーバー側のほとんどを実行し、クライアントはゲームの状態を自分の視点からレンダリングするだけです。ゲームはスケーリングするように設計されているため、クラスターで動作する必要があります。コンポーネントは主にCPUにバインドされており、ゲームの状態をクライアントと共有するメインサーバーに非同期で更新されます。ほとんどの計算はユーザー入力に依存するため、これらのイベントは個々のコンポーネントに送信する必要があります(したがって双方向RPC)。
Dが好きな理由:
- 手動メモリ管理
- テンプレート/CTFE
- コードの安全性(@safe、コントラクト、イン/アウト)
Goが好きな理由:
クライアントはDで記述される可能性がありますが、サーバーに影響を与えることはありません。
手動のメモリ管理が言語に組み込まれているため、私はDに傾倒しています。RPCに適したライブラリはありませんが、理論的にはそれを実装できますが、Goで手動のメモリ管理をエレガントに実装することはできません。
2つの言語のどちらかを選択した場合、この問題にどちらを使用しますか?