33

C++ は、私が自分のメモリを細かく管理したり、タイプしすぎたり (hello std::vector<Thingy>::const_iterator it = lotsOfThingys.begin()) したり、長いコンパイル時間で私を退屈させたりすることで、私の時間を浪費しすぎています。本格的なリアルタイム グラフィックス プログラミングの唯一の最良の代替手段は何ですか? ガベージ コレクションは必須であり (必要に応じてその使用を回避する機能も同様)、速度は C++ に匹敵するものでなければなりません。C ライブラリにアクセスするための合理的な話も必須です。

(完全な開示: 私はこれに対する独自の回答を持っていますが、リアルタイム グラフィックス作業のための C++ の優れた代替手段であると他の人が見つけたものを知りたいと思っています。)

編集:思慮深い返信をありがとう。この質問に対する「正しい」答えは実際には存在しないため、特定の答えを選択するつもりはありません。それに、たまたま気に入った言語を C++ の代替として選択するだけですが、これは公平ではありません。

4

30 に答える 30

19

Dプログラミング言語はどうですか?

コメントでリクエストされたいくつかのリンク:

Win32 API

遺棄 (マルチメディア ライブラリ)

于 2008-09-16T14:34:27.360 に答える
18

私は C++ を捨てません。実際、Boost を C++ ライブラリに追加することを検討します。これにより、言語がより使いやすくなります。あなたの例は次のようになります。

BOOST_FOREACH( Thingy& t, lostOfThingys ) {
    // do something with 't'
}

Boost には、C++ をより良い言語にするのに役立つツールがたくさんあります。

于 2008-09-16T19:08:58.497 に答える
17

Visual Studio や XNA などの優れたツールとライブラリを C# に提供しようとする Microsoft の努力のおかげで、C# はユーザーの要件に合った優れた言語であり、グラフィックスに最適です。

于 2008-09-16T14:32:42.780 に答える
15

私はあなたの前提に同意しません。注意深く適切に使用すれば、C++ は優れた言語であり、特にリアルタイム グラフィックスのようなスピードが重要な分野では優れた言語です。

システムを適切に設計し、stl コンテナーとスマート ポインターを使用すると、メモリ管理が容易になります。

std::vector::const_iterator it = lotsOfThingys.begin())を使用すると、はるかに短くなります

using namespace std;
typedef vector::const_iterator ThingyConstIter;

また、システムを適度に自己完結型のモジュールに分割するか、プリコンパイル済みヘッダーを使用するか、PIMPL イディオムを使用することで、コンパイル時間を大幅に短縮できます。

于 2008-09-16T18:38:29.943 に答える
15

リアルタイム + ガベージ コレクションは、あまり一致しません。

ガベージ コレクターがいつでも作動し、未定義の量の処理を費やすことができる場合、リアルタイムの応答を保証するのは少し難しいです...

于 2008-09-16T14:56:24.140 に答える
13

おそらくハイブリッドアプローチ。Python と C++ は適切な組み合わせになります (たとえば、PyGame を参照)。

于 2008-09-16T15:15:31.350 に答える
13

新しい「auto」の使用について言及することを忘れないでください。

auto it = lotsOfThingys.begin(); // Let the compiler figure it out.
auto it2 = lotsOfFoos.begin();
if (it==it2) // It's still strongly typed; a Thingy iter is not a Foo iter.
于 2008-09-17T09:35:58.757 に答える
13

機械語にコンパイルされるLispのいくつかのバリエーションは、この種のプログラミングではC++とほぼ同じ速度になる可能性があります。Naughty Dogチームは、Game Oriented Assembly Lispと呼ばれる Lisp のバージョンを作成しました。これを使用して、Jak や Daxter シリーズを含むいくつかの AAA タイトルが作成されました。ゲーム業界における Lisp アプローチの 2 つの主な障害は、C/C++ 開発の定着した性質 (ツールと人的資産の両方が C/C++ に多額の投資を行っている) と、スターである才能のあるエンジニアを見つけることの難しさです。ゲーム プログラミング ドメインと Lisp 言語の両方。

業界の多くのプログラミング チームは、ハイブリッド アプローチに移行しています。このアプローチでは、リアルタイム コード、特にグラフィックスと物理コードは C または C++ で記述されますが、ゲーム ロジックは高レベルのスクリプト言語で作成されます。プログラマーも非プログラマーも同様に編集可能です。LuaPythonはどちらも、高レベルのスクリプト作成で人気があります。

于 2008-09-16T17:01:58.253 に答える
8

約 20 年間 3D VR アプリケーションの開発者/研究者/教授として、私は (おそらく C を除いて) 代替手段がないことをお勧めします。待ち時間を短縮してリアルタイムの対話を可能にする唯一の方法は、最適化されたコンパイル済み言語 (C または C++ など) を使用して、OpenGL などの高速で信頼性の高い 3D グラフィックス ライブラリにアクセスすることです。すべてをコーディングしなければならないのは面倒だと思いますが、これはパフォーマンスと最適化にも不可欠です。

于 2009-05-13T10:51:51.970 に答える
6

時々、人里離れた道の外を見ると、本物の宝石を見つけることができます。PureBasicを検討することをお勧めします(名前に惑わされないようにしてください)。詳細は次のとおりです。

PureBasic の機能

  • マシン コード (アセンブリ) 実行可能ファイル (FASM)
    • インライン アセンブリのサポート
    • ランタイム不要 (DLL 不要など) 1 つの実行可能ファイル
    • 小さな実行可能ファイル (ランタイムなしの C++ と同じくらい小さいか小さい/同じくらい速いか速い)
    • DLLを書くことができます
    • マルチスレッドのサポート
    • 完全な OS API サポート
  • マルチプラットフォームのサポート
    • Windows 95-2003
    • Linux
    • Mac-OS X
    • アミガ
  • 2D & 3D ゲーム開発
    • DirectX
  • 寛大なライセンス
    • 安価 (79 ユーロまたは約 112 ドル)
    • ライフタイム ライセンス (将来のすべてのアップデートとバージョンが含まれます)
    • すべてのプラットフォームで 1 つの価格
  • 外部ライブラリのサポート
    • サードパーティの DLL
    • ユーザー ライブラリ
  • オンラインサポート
    • 作成者が率いるレスポンシブ開発チーム
    • オンラインフォーラム
      • 1 か所で回答が得られます (ネット全体にアクセスする必要はありません)
      • 膨大な量のサンプル コード (IE で IEtool を使用してコードを試す)
      • 質問への迅速な返信
  • ボーナス学習 (C++ の学習の代替)
    • API
    • 構造物
    • インターフェース
    • ポインター

オンライン フォーラムにアクセスして、PureBasic ( http://www.purabasic.fr/english/index.php ) またはメイン サイト: www.purabasic.com について理解を深めてください。

于 2008-09-16T16:00:23.690 に答える
5

グラフィックス プログラミングに C# を使用することに完全に同意します。マネージド言語であるというわずかな欠点があり、ガベージ コレクターがアプリケーションを自由に支配できるようにすることは、しばらくするとフレームレートの自殺になりますが、プログラムの初期段階で比較的インテリジェントなプール割り当てを行うことで、実際の問題を回避できます。

何人かの人々がすでに XNA について言及しています。XNA は信じられないほどフレンドリーで、十分に文書化されています。私もその推奨事項に同意したいと思います。個人的には趣味のゲーム プロジェクトに使用していますが、非常にうまく機能しています。

ただし、XNA が唯一の代替手段ではありません。また、マネージ DirectX と同様の方法で DirectX の無駄のないラッパーを提供する手段として継続的に開発されている SlimDX もあります (これは、XNA を支持して Microsoft によって廃止されたと思います)。どちらも研究に値します: http://code.google.com/p/slimdx/

于 2008-09-16T19:31:24.060 に答える
3

Dプログラミング言語は良い選択肢だと思います。C オブジェクト ファイルにリンクし、C ライブラリを介して C++ コードとやり取りすることができます。D にはガベージ コレクション、インライン アセンブリがあり、ゲーム開発者は SDL および OpenGL ライブラリへのバインディングを作成し、新しいゲーム開発 API にも積極的に取り組んでいます。私は D が大好きです。残念なことに、私の仕事では D を使用する必要はありません。:(

于 2008-09-16T19:06:19.267 に答える
3

特にコンソールでは、大きな AAA タイトルの真の代替手段はありません。小さいタイトルの場合は、C# を使用する必要があります。

于 2008-09-16T14:56:14.627 に答える
3

ここでは C# が良い答えです。かなりのガベージ コレクションがあります (ただし、メモリ処理全体が手に負えなくなったため、処理方法を変更するには、かなりのプロファイルを作成する必要があります)。使用し、多くの例があり、十分に文書化されています。3D 部門では、シェーダーとエフェクトを完全にサポートしているので、それが私の選択です。

それでも、C# は C++ ほど効率的ではなく、オーバーヘッドが原因で遅くなります。そのため、スピードと、本の好きなトリックを使用する柔軟性がある場合 (手を汚したい場合はポインターとアセンブリを使用) - に固執します。あなたが言及したように、C++と価格はより多くのコードを記述しますが、メモリ管理を含むすべてを完全に制御できます。

于 2008-09-16T15:33:48.340 に答える
2

Windows をターゲットにしている場合、特に C++ の経験を活用したい場合は、C++/CLI (Microsoft の .NET の C++ の「マネージド」方言) が興味深い可能性です。ネイティブ コード (C スタイル ライブラリの呼び出しなど) を .NET マネージ コードと非常にシームレスに混在させることができ、.NET GC とライブラリを利用できます。

GC が「リアルタイム」パフォーマンスに影響を与えるという懸念に関しては、誇張される傾向があると思います。多世代 .NET GC は、何らかの重大なメモリ不足の状況でない限り、コレクションの実行にそれほど時間をかけないという点で非常に優れています。私は、電子デリバティブ取引所と対話する .NET コードを作成します。ここでは、時間の遅延 == 大量の $$$ が発生しますが、GC 関連の問題は一度もありません。GC にとって数ミリ秒は非常に長い時間ですが、「リアルタイム」ゲームであっても、ソフトウェアと対話する人間にとってはそうではありません。真の「リアルタイム」パフォーマンス (医療機器、プロセス制御など) が本当に必要な場合は、Windows を使用することはできません。Windows はリアルタイム OS ではありません。

于 2008-09-16T19:44:51.920 に答える
2

多くのゲームエンジンがあなたのニーズに合うと思います。たとえば、移植性が必要な場合は、SDL や Cairo を使用します。多くのスクリプト言語 (一般的に簡単な構文とガベージ コレクションを備えています) には、これらのキャンバスへのバインドがあります。
フラッシュは別の選択肢かもしれません。

Processing、画像、アニメーション、インタラクションをプログラミングしたい人向けのオープンソースのプログラミング言語および環境です

実際には、これは Java のシン ラッパーであり、スクリプト言語のように見えます。(プリミティブな) IDE があり、数行のコードを入力して、ファイルを保存しなくても [実行] を押すことができます。実際には、コードをクラスにラップし、main() 呼び出しを追加してコンパイルし、ウィンドウで実行します。

多くの人がリアルタイム展示(VJ など)に使用しています。Java のパワーと制限を備えていますが、Java2D、OpenGL、SVG などへのアクセスを簡素化するために、すぐに使用できる多数の優れたラッパー (ライブラリ) が追加されています。

どういうわけか、これは単純なグラフィック言語のモデルになりました。Ruby、Scala、Python などの他の言語で Processing を模倣しようとするアプリケーションがいくつかあります。最も印象的なものの 1 つは、canvasFirefox、Safari、Opera などで実装されたコンポーネントを使用した JavaScript の実装です。

于 2008-09-24T05:37:53.750 に答える
2

私は c++0x に投票します。-std=c++0x フラグを使用すると、部分的なサポートが gcc-4.3+ ですでに利用可能です。

于 2010-01-03T02:33:31.673 に答える
2

James (hopkin) のように、私にとっては、ハイブリッド アプローチが最適なソリューションです。Python と C++ は適切な選択ですが、C#/C++ などの他のスタイルも機能します。すべては、グラフィック コンテキストに依存します。ゲームの場合、XNA は優れたプラットフォームです (win32 に限られます)。この場合、C#/C++ が最適なソリューションです。科学的な視覚化には、Python/C++ が受け入れられます (Python での vtk のバインディングと同様)。モバイルゲームの場合、JAVA/C++ は動作します...

于 2008-09-16T15:38:53.883 に答える
1

Java と LWJGL (OpenGL ラッパー) はうまく機能しました。Orge のようなシーン グラフ タイプ ライブラリをさらに探している場合は、Google Earth タイプ アプリケーションの作成に使用した jMonkeyEngine を参照してください (www.skapeworld.com を参照)。オブジェクトの作成に慣れている場合、ガベージ コレクションは問題ではありません。

于 2010-11-24T10:46:42.397 に答える
1

エンジンに C++ を使用し、アプリケーションを Lua で作成することに成功しました。JavaScript も非常に実用的で、最新世代の JIT ベースの JS エンジン (tracemonkey、V8 など) が登場しました。

C++ は、まだしばらくは使用されると思います。Tim Sweeney でさえ実際にはまだHaskell (pdf) に切り替えていません、私の知る限り :-)

于 2009-10-05T11:03:16.867 に答える
1

「C」はあまりにも明白な答えでしょうか?

于 2011-03-17T18:03:04.017 に答える
0

プロジェクトに最適な環境は、タスクを可能な限り最速で実行できる環境です。これ(特に3Dグラフィックスの場合)にはライブラリが含まれます。

タスクによっては、いくつかのマイナーなdirectxハッキングで逃げることができます。次に、.NETとslimdxを使用できます。管理対象言語は、プログラミングが高速でデバッグが容易になる傾向があります。

おそらく、本当に優れた3Dエンジンが必要ですか?Ogre3DまたはIrrlichtを試してください。商用グレードの品質が必要です(Ogre3Dがそれを提供していると主張する人もいるかもしれません)-CryengineまたはUnrealを選択してください。Ogre3DとIrrlichtでは、.NETも使用できますが、ポートは常に最新であるとは限らず、プラグインはC++バージョンほど簡単には含まれていません。Cryengine / Unrealengineの場合、私が推測する本当の選択肢はありません。

もっとポータブルにする必要がありますか?救助のためのOpenGL-ラッパー( SDLなど)が必要になる場合があります。

GUIも必要ですか?wxWidgetsQTが可能かもしれません。

あなたはすでにツールチェーンを持っていますか?ライブラリはファイル形式を処理できる必要があります。

あなたは図書館を書きたいですか?世界のほとんどがC/C ++ライブラリを使用できるため、C /C++が解決策になる可能性があります。おそらくCOMを使用して?

私が言及しなかったプロジェクト/ライブラリはまだたくさんあり(XNA、Boostなど)、3Dグラフィックスを表示するだけでなく、他のニーズもあるかもしれません(入力、サウンド)。 、ネットワーク、AI、データベース、GUI、...)

要約すると、プログラミング言語は目標を達成するためのツールです。それは、目前のタスクのコンテキストで見る必要があります。タスクには独自のニーズがあり、これらのニーズによって言語が選択される場合があります(たとえば、プログラミングに時間がかかる機能を取得するには特定のライブラリが必要であり、言語Xでのみライブラリにアクセスできます)。

1つでほぼすべてが必要な場合:C ++ / CLIを試してください(構文を簡単にするために、おそらくC#と組み合わせて)。

于 2009-10-05T11:23:35.860 に答える
0

あなたの探求において独立した言語を見落とさないでください。Ionic WindSoftwareのEmergenceBASICには、DirectX 9エンジンが組み込まれており、OOPをサポートし、Cライブラリと簡単にインターフェイスできます。

http://www.ionicwind.com

ジェームズ。

于 2009-04-22T07:59:19.580 に答える
0

Objective-C は要件 (オプションの GC を備えた最新バージョン) に適しているように見えますが、私の好みではあまりにも動的で Smalltalk に似ています。

于 2008-09-16T17:20:38.960 に答える
0

XNAはあなたの最善の策だと思います。.NET フレームワークでサポートされているため、Game Studio で設定を変更するだけで、Windows または Xbox 360 プラットフォーム用にビルドできます。さらに良いことに、すべてのツールは無料です。

XNA を使用する場合は、クイックスタート ガイドXNA クイックスタート ガイドを使用して簡単に開始できます。

これまでのところ、私にとってやりがいのある楽しい経験であり、C++ のメモリ管理からの良い休憩になりました。

于 2008-09-16T17:21:11.827 に答える
0

良い質問。「タイプしすぎ」については、言及されているように、C++0x はそのほとんどに対処しているようです。

auto it = lotOfThingys.begin()) // ... *ML VS2010beta のように型を推測します。これは既に実装されています。

メモリ管理に関しては - 効率のために - とにかく、ガベージ コレクションの有無にかかわらず (つまり、メモリ プールを作成し、割り当てられたオブジェクトを再利用する)、メモリ割り当てを適切に追跡する必要があります。収集されたかどうかは問題ではありません。メモリが断片化しないようにするには、gc() も明示的に呼び出す必要があります。一貫した方法でメモリを管理することは、どこでも重要です。RAII - C++ のキラー機能 もう 1 つ - メモリは 1 つのリソースに過ぎず、GC を使用して他のリソースを追跡する必要があるため、RIAA.

とにかく、C# は多くの点で優れた代替手段です。私はそれが非常に優れた言語だと思います。特に、関数型スタイルのコードを記述できる機能 (かわいいラムダ -> 構文、map/select 'LINQ' 構文など) があるため、並列コードを書く可能性; あなた(またはあなたの同僚)がそれを必要とするとき、それはまだ「標準の中括弧」です。

于 2009-12-23T10:14:34.590 に答える
0

ターゲットが PC の場合は、C# を試すか、 Luaを C++ アプリに埋め込んで「高レベル」のスクリプトを実行できると思います。ただし、ターゲットがコンソールの場合は、独自のメモリを管理する必要があります!

于 2008-09-16T16:46:12.457 に答える
0

エイダを見ることができます。ガベージコレクタはありませんが、高い信頼性が求められるリアルタイムシステムでよく使われます。つまり、3D アプリケーションのデバッグ時間が短縮されます。

また、 Haskellを見ることもできます。関数型パラダイムを知らない場合、この言語は奇妙に見えるかもしれませんが、少し時間をかける価値があります。Tim Sweeney (EPIC Inc) は、この言語を C++ の代替として検討しています。

于 2011-03-17T13:31:00.470 に答える
0

ガベージ コレクションは必須です (必要に応じてその使用を回避する機能と同様)。

ガベージ コレクターを一時的に無効にすることはできません。その場合、決定論的なガベージコレクターが必要になります。しかし、そのような野獣にはパフォーマンス ヒットも伴います。BEA JRockit は非常に優れているので、Java に固執する必要があります。

あなたの例についてコメントするだけです。typedef はあなたの友達です...

typedef std::vector<Thingy> Thingys;
Thingys::const_iterator it = lotsOfThingys.begin()
于 2008-09-16T19:01:52.133 に答える
0

Delphi/Pascal オブジェクトといくつかの例をご覧ください: http://www.delphigamer.comまたはhttp://glscene.cjb.net/

于 2010-06-18T16:59:42.787 に答える