回答
ただし、ゲームエンジン全体をCで作成することは、今日では不合理でしょうか?
合理的ですが、質問はそれがあなたに何を買うのかということですか?あなたはおそらくCが提供する極端な移植性を必要としないでしょう、そしてあなたが本当に哲学的にそれに反対しない限り、C ++が提供するすべての機能をあきらめるのは残念です。
CがC ++よりも優れている点は何ですか?
コンパイル時間が短縮されますか?
なぜ誰かがposするのかおそらくC ++ではなくCを使用したいですか?
ほとんどの場合、美的な選択だと思います。 Cはシンプルで最小限で、すっきりしているので、多くの人がCを気に入っています。C++には多くの優れた機能がありますが(名前空間だけでも使用する価値があります)、大きくて面倒です。
コメント
回答
私は、いくつかの製品を出荷している純粋なCゲームエンジンを幅広く使用してきたので、それは絶対に可能です。 CエンジンとC ++エンジンの両方での作業に関する私の個人的な経験は次のとおりです。
- 純粋なC構造体を使用すると、構造体の配置に関する知識を活用でき、この情報を使用できます。オブジェクトの永続化レイヤーとシリアル化レイヤーを構築するために使用しました。私が使用したエンジンには、構造体に関するこのメタデータを自動的に作成する単純なヘッダーパーサーがいくつかあり、特定の種類のデータ操作が簡単になりました。任意のC ++ヘッダーファイルの解析は基本的に不可能です。継承と仮想関数を追加すると、メモリ内のどこにあるかを正確に知ることができなくなります。
- ヘッダーファイルを非常にコンパクトに保ち、構造体の前方宣言を利用できるため、コンパイル時間が大幅に短縮されます。
- テンプレートと継承を使用しないと、特定のオブジェクトが何であるか、そしてそれが何をしているのかを正確に把握することが非常に簡単であるため、デバッグを改善できます。
これらの利点はすべて、シリアル化されたオブジェクトでのテンプレートと継承の使用を控える抑制されたc ++コードを使用して同じように簡単に達成できますが、CTOの決定はより簡単であるということでした。 C ++のより紛らわしい要素が利用できない場合に、単純さを強制するためです。
個人的には、forループで変数を正しく宣言する機能と、の多くの完全に正当な使用法を見逃したため、これは少し極端だったと思います。継承。しかし、実際には、「最終的には、考慮されるすべてのことについて、それほど生産性を犠牲にすることはありませんでした
コメント
回答
C ++とLuaで記述された2DゲームエンジンをCとLuaに書き直しています。これまでのところ、経験はかなり良いです。明らかに、ベクトル演算と行列演算を実行しても、Cの見栄えは良くありません。しかし、それを除けば、C ++開発者として10年以上過ごした後、経験は非常に新鮮であることがわかりました。
CにはC ++に対する利点:
- コンパイラは、静的初期化時にコードが実行されないようにします。これにより、キーとして使用される文字列などのグローバルデータを静的に割り当てることが完全に安全になります。例:
- 透明性。Cの割り当てでは、変数の割り当てや定義によって大量のコードが実行されることはありません。C++はコピーコンストラクターを自動生成するため、割り当てを行うときに実行される内容を制御できなくなります。
- 多くのデバッグは、関数名がマングルされないため、が簡単になります
- 通常、Cでは memcpy を使用できますが、コピーコンストラクターが実行されないため、C ++では問題が発生しやすくなります。 tha t memcpy は std :: copy
重要です。
それ以外にも、Cの考え方を取り入れることには多くの利点があります。 C ++では、物事を少し一般化しすぎて抽象的にしていることに気付くことがよくあります。 Cでは、通常、get-setメソッドなどを切り取り、動的配列を使用するのではなく、固定サイズの配列を事前に割り当てることがよくあります。多くの場合、Cでコードを短くしてデバッグしやすくなります。データ構造は通常、よりフラットで、コンパイラーで表示しやすくなります。
公平を期すために、Cだけでアプリを作成することは決してありません。理由Cがそれほど強力ではない場合、Cを非常によく補完できるLuaのような高レベルの言語と組み合わせると機能します。
IdソフトウェアはほとんどのエンジンをCIで記述していると信じています。 Cで記述されたWolfenstein城に戻る。
CとC ++のスケーラビリティおよびプレーン配列と比較したSTLベクトルの欠点。
コメント
回答
他の誰かが指摘したように、C ++は、あなたが立つことができる大きな肩(BOOST、STLなど)の利点をもたらします。結局、それは個人的な選択ですが、利用可能なリソースのためにC ++を選択します。 C ++に使用したくない機能がある場合は、使用しないでください。
コメント
回答
私はしません “最近は誰もがCを独占的に使用していると思いますが、通常は高級言語と混合されています。
Cでのプログラミングには、たとえばC ++でのプログラミングよりもいくつかの利点があります。 C ++ は、ユーザーには見えない内部で多くのことを実行できます。これは、「注意しないとパフォーマンスを低下させる可能性があります。C++ は、ひどいこともあります。キャッシュの使用。これもパフォーマンスに悪影響を与える可能性があります。
したがって、ゲームのパフォーマンスが重要な部分を、従来のC ++の方法ではなく、Cのような方法で記述することにはいくつかの利点があります。しかし、近年、実際にゲーム全体をCで記述している人のことは聞いたことがありません。
iPhoneなどの一部のプラットフォームでは、C ++を使用すると、実行可能なサイズが特定のキロバイト単位で増加する可能性があります(方法を忘れました)。申し訳ありませんが)、これが一部のiPhone開発者がCとObjective-Cを組み合わせてコードを書くことを選択する理由です。
回答
今日C ++ではなくCでゲームエンジンを作成するのが不合理である理由をいくつか挙げます。STLとBOOSTです。
どうなるか想像できません。さらに別のlist
実装を書く価値があります箱から出してすぐに機能する(そして「書く必要がない」)コードに頼ることができる場合の説明
コメント
回答
Cでゲームエンジンを書くのは合理的です。高速で、複数のシステムに移植できます。たとえば、Android(NDKを使用)に使用できます。iPhoneにも使用できます(Objective cはcの単なる拡張です)。 Linux、Mac、WindowsなどのメインOS用です。cに慣れている場合は、試してみることをお勧めします。
回答
もちろんそれは合理的です。私は個人的にはそうしません。私が知っているCファンのほとんどは、実際には.cppファイルにCのようなコードを書くだけです。しかし、言語は実際には重要ではない場所と十分に似ています。
誰かがこれを選択する理由については、ほとんどが反C ++の哲学にあると思います。個人的には、これが「CスタイルのC ++」よりもCを選択する正当な理由ではないと思います。 typedef struct crazinessは、Cを回避するのに十分な理由であり、他にも多くの理由があります。
残念ながら、CとC ++はどちらも、かなりひどい言語です。これが、近年人々がスクリプトで多くのコードを実行しようとしている理由の1つです。
Cで働いている人々の例を探しているなら、彼らがずっと前にCを放棄したことを読んだことを思い出すので、idを無視することができます。ただし、Cryptic Studios(Star Trek Online)は、すべてのエンジン開発をCで行います。私の知る限りでは、そうです。それは、具体的な利点よりも哲学のおかげです。
回答
はい、いいえ。はい、数年前にやりましたが、ダム端末にプレーヤーを搭載したUNIX(Linuxではない)64ビットリモートサーバーで3Dでゲームを実行する必要がありました。それは簡単なことではありませんでした。 LUAを統合したいのですが、最終的にluaをC ++で動作させることができたので、可能ですが、実行しないでください。
回答
「両方を使用する」が良い答えかもしれませんか?
panda3dプロジェクトを最適化して、cythonを使用するか、それらの部分を再コーディングすることでボトルネックを解消できると聞きました。
ほとんどの場合、最適化する必要のある部分は、多くの反復とネスト、または多くの数値計算を伴う部分です。したがって、私の(野生の)推測では、1つの公正な妥協点は両方の言語を使用することです。 、低レベルのプログラミングが多く含まれているパーツにCを使用しているため、 y速度が必要な部分でのC ++言語の誤用、およびゲームの残りの部分でのC ++の誤用。
理想的には、高レベルを念頭に置いてエンジンの高速部分を実行し、次に使用するネスト/ループがはるかに少ないスクリプト言語またはC ++。
もちろん、エンジンを特別な専用にする場合を除いて、開発者が行う必要のあるすべてのゲームに適合するようなエンジンを作成することはできません。一種のゲーム…
しかし、私は経験豊富なゲーム開発者でも経験豊富な開発者でもないので、私のアドバイスを当然のことと思ってはいけません… Cは書き込み中に高速コードを書くことを強制すると思いますゲームと同じくらい大きなプロジェクトのための優れた高速C ++コードは別のものです…
回答
Cは John Carmack では、Cを使用することで多くの利点が得られる可能性がありますが、Cを使用して利益を得るまでには、しばらく時間がかかる場合があります。
ここにゲームエンジンのリストがありますそれらがCで記述されている場合は、ソースコードを調べることで、Cゲームエンジンの実行方法に関する洞察を得ることができます。
回答
Cコードは通常有効なC ++コードです。
C ++の主な問題は、誤った使用です( Linus Torvaldsは、この理由でそれを嫌っています、彼はライブラリの移植性などの他の問題も抱えていました。彼はオペレーティングシステムレベルで作業しており、そこにあるすべてのランダムチップで処理を実行できる必要があります。
たとえば、 c ++ std :: vector <>(または同様のコンテナ)よりもcstyle array []を使用する利点はほとんどありません。
ベクトルはタイプセーフです。境界チェックを行うことができます(get()または[]を使用して要素にアクセスできます。配列チェックメソッドを使用しない場合でも、ポインターでカートに入れるのではなく、サイズをクエリできます)。
ただし、たとえば、でデフォルトサイズを宣言しない場合、ベクトルは遅くなる可能性があります コンストラクタ。また、ベクターに物を追加すると、サイズ変更が必要になった場合に速度が低下する可能性があります。 C ++ 11には、均一な初期化(同じ構文を使用してベクトルを宣言および初期化できる)などの多くの利点も追加され、コピーを回避できる移動コンストラクターがあります。独自のカスタム初期化子を作成することもできます(何らかの理由でmallocを使用する以外のことをしたい場合)。
またはもちろん、サイズを変更する必要がある場合は、ベクターを使用するとさらに簡単になります。 、「mallocをいじったり、手動でコピーしたりする必要はありません。
C ++は、オブジェクト指向のコードを提供します。コンパイルすると、実際には同じように効率的になります。コードを操作する人間のための抽象化。コンストラクターのようなものはオブジェクトの作成を遅くする可能性がありますが、デフォルト値を設定するためにコンストラクターが必要になるか、そうでなければコンストラクターを使用せずにオブジェクトを初期化できます(()を省略して) 。
ただし、オブジェクト指向を使用すると、ゲームのプログラミングがはるかに簡単になります。ゲームはしばしばオブジェクトを扱います。