回答:
ある意味では、C ++は実際に置き換えられています-C#だけでなく、他の多くの言語によって置き換えられています。しかし、あなたが尋ねると、それは完全に置き換えられますか?-答えは間違いなくノーです。
これは、C ++が伝統的に2つの機能で使用されているためです。まず、ゲームエンジンを作成します。リソースをロードする低レベルコンポーネントで、物理シミュレーションでポリゴンをスクリーンに押し込み、数値を計算します。第二に、ゲームのロジックをコード化するために:ゲームプレイを行う実際のルール。
この2番目の容量には、C ++の長所(低レベルの詳細を完全に制御するなど)は必要ありませんが、その弱点(バグが発生しやすい手動コードメモリ管理など)に苦しんでいます。また、この2番目の容量では、C ++はさまざまなスクリプト言語に置き換えられています。多くの開発者がLuaを使用しています。Pythonを使用する人もいます。ただし、.NETまたはMonoのいずれかの形式でCLIプラットフォームが利用可能な場合、それは優れたスクリプトホスト候補となります。これらのプラットフォームは非常に高速で信頼性が高く、広く知られている言語(C#)と包括的な基本クラスライブラリを提供します。ツールを忘れないでください。MSVisual studioとSharpDevelop / MonoDevelopは、世界で最高のIDEではないかもしれませんが、非常に優れています。
そうは言っても、ゲームエンジンはC#(またはLua、またはPythonについて)で作成されることはありません。どうして?彼らは十分に速くないからです。
多くの一般的な信念に反して、今日の最大のパフォーマンスヒットはメモリレイテンシによるものです。これは、メモリへのアクセスが深刻なビジネスであることを意味します。また、マネージ言語では、ユーザーがメモリアクセスを制御することはできません。そのため、そもそも「マネージ」されています。そのため、マネージド言語では、非常に高速なゲームエンジンを記述できません。実際、私が考えることができるすべての大きな「C#」エンジン-XNA、MOGRE、Unity-はネイティブ C ++コードに基づいています。ただし、C#でゲームロジックを記述できます。
要約すると、 C#はC ++または他の言語の代わりに使用されます。しかし、少なくとも遅延のないインスタントアクセスメモリが発明されるまで、C ++に置き換わることはありません。
言語の選択はプラットフォームに大きく依存します。現時点では、Microsoftプラットフォーム以外では、実装として.NETが実際に必要になることはほとんどありません。
従来の知恵では、小さなプラットフォームは性能を発揮するために金属に近づける必要がありますが、一方で、管理されたプラットフォームはより安全です。これがおそらくWindows Phone 7で.NETの使用を強制される理由です。
新しいXboxがマネージドプラットフォームを必要とした場合、それは確かに興味深いでしょう。電話機のハードウェアがそれを処理できる(実際に処理する)場合、フルサイズのコンソールでそれらを使用しているのは確かです。すべてのゲームコードをスクリプト言語で記述せずにクロスプラットフォームのゲームを作成するのは難しいため、コンソールエコシステムをかなり混乱させます。その場合、C#はC ++に置き換わることはありませんが、密接に関連しています。
現在、Monoをスクリプティングバックエンドとして使用できます(Unityと同様)が、ほとんどのエンジンメーカーは独自にロールバックするか、C#よりもLuaやPythonのようなコンパクトなものを使用したいと考えています。
いずれにせよ、それはすべて、適切な仕事に適切なツールについてです。とにかく両方の言語を学ぶ必要があります。C#を使用すると特定の処理(ツール開発、サーバー開発など)が簡単になり、場合によってはC ++以外は使用できないためです。
ありそうもない。C ++には低レベルであるという利点があり、開発者は実際に最も細かい詳細を微調整して、可能な限り最高のパフォーマンスを得ることができます。
C#と.NETを使用すると、非常に便利なガベージコレクションがありますが、メモリとリソースが限られているプラットフォーム(ポータブルコンソールとある程度ホームコンソール)で作業する場合、最大限に活用するにはメモリをできるだけ制御する必要がありますリソースの。マネージ言語がメモリを割り当てて解放できるようにすると、多くの問題が発生する可能性が高くなります。
速度も問題になります(おそらくそうではありませんが)。時間が経つにつれて、マネージ言語がC ++コンパイラと同等のパフォーマンスを発揮できるようになると確信しています。
全体的に、とにかく私の経験では、ゲーム開発者はメモリ、CPU時間、およびリソース(可能な限り多くのパフォーマンスを絞り出すため)に関してはコントロールがおかしい傾向があるため、C / C ++が主に使用される言語です。
いいえ。.NETに依存することは、PS3のような利用可能なフレームワークのないプラットフォームの大規模な書き直しを意味し、パフォーマンスの欠点はPCまたはLive Arcadeゲームでは完全に受け入れられるかもしれませんが、より大きなゲームではコンソールのパフォーマンスが十分に速く実行されます。それ以上に、C ++には既存の巨大なコードベースがあり、アップグレードしたとしても誰もアップグレードする余裕がありません。C ++はゲーム業界にあり、長い間そこにとどまるでしょう。
ガベージコレクション言語がプログラマからメモリ制御を奪い、パフォーマンスが低下する可能性があるため、コンピュータのパワーが乏しい時代には、すべてをCまたはC ++でプログラムする必要がありました。
今日、コンピューターは高速になっていますが、Knuthが言うように、簡単に言えば、最適化は悪です。
低レベルのコア機能を最適化する必要があることは明らかです。3Dジオメトリ、物理学、衝突、照明を計算すると、利用可能な最高のプロセッサがすぐに膨張する可能性があるためです。マシンの視覚的品質が上がると、ほとんどの場合パフォーマンスが大幅に低下することがわかります。
現在、ゲームの状態、AI、サウンド、入力、ネットワークなどの他の機能があります。これらはゲームではまだ重要ですが、コンピューターリソースをほとんど使用しません。これらの機能は、ほとんどの場合、最適化する必要はありません。これがスクリプト言語とガベージコレクション言語の目標です。低レベルのものをコーディングしていない場合、これらの言語で書くコードは決してならないので、メモリの一貫性とアプリケーションの組織について考える必要はありません。ボトルネック。
2つのケースの例
どちらも500 kmの距離にあります。
どちらの場合も、船/トラックをより速く動かすことができることを知って、全体の輸送時間を短くするために、積み降ろしプロセスを速くすることが重要ですか?
答えは次のとおりです。トラックで問題になりましたが、ボートでは問題ではありませんでした。
この比phorを理解しているかどうかはわかりませんが、ある意味では、数学的な問題を想像させることができます。これは答えを理解することよりも重要です。
スクリプト言語を使用すると、C / C ++でプログラムされたエンジンが既にある場合にゲームを高速化できます。3Dエンジンは低レベルの問題を解決するため、スクリプトでゲームを作成する必要があります。
ただし、低レベルのコンパイル済み言語を絶対に置き換えることは絶対にできないということを忘れないでください。静的に型付けされたコンパイル済み言語はパフォーマンスの中核であり、カーネル、3Dエンジン、グラフィックカードドライバーのいずれであっても、それらを除外することはできません。
しかし、もちろん、ゲームがグラフィカルにシンプルで、多くのベクトル計算を必要としない場合、ゲームプレイに集中して最適化を忘れることができます。この場合、マシンは非常に高速であるため最適化に対処する必要がないそのために
DSにポートを移植する場合を除きます。しかし、私はそこで停止します。
見て、私はこれが暴言であることを知っているが、私は毛を割っているだけではない。ほとんどのプログラマーはこれを実際に組み合わせていないように感じます。言語自体は、実行速度/パフォーマンスとは関係ありません。それはコンパイラ/フレームワークです。gccをcl(2010年以前のMicrosoftコンパイラー)またはmsbuild(2010年の現在のc ++コンパイラー)に対して議論した方がよいでしょう。これらのコンパイラはリリースごとに改善されるため、以前のバージョンと比較する必要もあります。私は.netに非常に感銘を受けており、優れたパフォーマンスを発揮しますが、わずかに優れたパフォーマンスであったとしても、それを引き継ぐことはありません。1つの理由:移植性です。
AAAゲームは、Windows、Linux、Mac、XBox、PS3、任天堂などに搭載されたい