重いGUIコンテンツを含むほとんどのアプリは通常C++で開発されていることがわかります。ほとんどのゲーム/ブラウザはC++でコーディングされています。
最新の動的言語を使用して、より優れたGUIアプリを開発できませんか?私は知っていますJavaは良い選択ではないでしょう。しかしpythonのような言語はネイティブでC上に構築されていますか?最新の言語は彼らの祖先よりも優れているのですか?なぜ私たちはまだ最新の言語よりも古いC++を好む必要があるのですか?
そして、知りたいのですが、GUIの処理速度を向上させるためにC++で何が責任があるのでしょうか。一方、他の最新の言語に欠けているものは何ですか?
私はC++ GUIアプリ(主にWindows用)を書く人の1人です。正確には、Qtでは。私の理由:
new
を割り当てても、スマートポインターまたはdelete
階層を使用しているため、明示的にQObject
を明示的に使用することはほとんどありません。ご覧のとおり、これらは主に個人的な好みです。私の仕事が楽しいことは重要であり、C++はそれを提供してくれます。
スピードが重要だからです。
ゲームパフォーマンスが重要なコアタスクにはC++を使用します。柔軟性が重要なスクリプトタスクに動的言語を使用します。
デスクトップGUIアプリ:たとえば、Visual StudioはネイティブC++ではなく.NETで記述されています。 IDE自体は、パフォーマンスを重視する多くのタスクを実行する必要がないため、IDEで非常にうまく機能するようです。コンパイラ、リンカ、およびその他のツールは必ずしも.NETで記述されているとは限りません。 -ワワがコメントで指摘しているように、いくつかはそうであるように見えます(例えばVB.NET))
ブラウザも高速である必要があります。結局、それらは一種のセカンダリOSです。一方、MozillaフレームワークはJavaScriptに大きく依存しているように見えるため、Firefoxの大部分は実際にはJavaScriptで「記述」されていると主張できます。
要約すると、C++が必ずしも推奨であるとは言えませんが、パフォーマンスのボトルネックがある場合は、金属に近づかなければならず、C++に出会う必要があります(まあ、C)。 C++ですべてを行う方が簡単な場合もあります-1つの言語です。
C++で記述されているGUIアプリは、レガシーな理由により、一般的にそうされています。 Python(QtまたはGtkを使用)は、Windowsアプリケーションで作業している場合のC#と同様に、GUIアプリケーションで非常に実行可能です。何か新しいものを開始するときは、very実行する必要のある配管作業がないため、C++よりもはるかに好ましい。
.NETなどの群衆が示すパフォーマンステストの数に関係なく、ベンチマークでどれほど近づいても、結局、C++アプリが最上位に出てきます。コールドブートの方が高速で、より高速で、改善できる方法が多くあります。
プロジェクトの開始段階で、.NETが進むべきであるという多くの証拠を聞いたことがありますが、いったんそれが選択されると、それらは常に重いクラッジになりました。
また、最近のC++は、特にQtやWTLのようなフレームワークで、非常に安全で使いやすいです。
ほとんどのゲームエンジンはC++でコーディングされています。また、多くのブラウザーエンジンがC++でコーディングされています。ただし、ブラウザのGUIは、軽量のスクリプト(JavaScript、Python)を使用してコーディングされることがよくあります。ソースエンジンを除いて、ほとんどのゲームエンジンはスクリプト言語(LuaやPythonなど)も使用しています。 [参照用: Luaスクリプトゲームのリスト ]
Qtのような人気のあるC++ GUIライブラリも利用できます。現在のバージョン(4.7)では、GUIにQMLを使用します。 QMLは基本的に、Qtバインディングを備えたJavaScriptです。
したがって、実際にはC++vs動的言語はなく、混在しています。
最初の理由は:(古い)習慣
2番目の理由:仮想マシン、インストールが必要なインタープリターなどの信頼性が低下します。
また、C++でコードを開発するための優れたIDEがまだいくつかあります。
その理由は、発生するすべてをより詳細に制御できるためです。 C#でフォトショップを作成する場合、一部のタスクで深刻なパフォーマンスの問題が発生します。より細かい制御が可能な下位レベルの言語では、ショートカットを使用して、より集中的なものに必要な場所を最適化できます。もちろんこれは、.NETのC++ではなく、アンマネージコードでC++を使用していることを前提としています。
簡単な例については here を参照してください。
C++は静的に型付けされています。これにより、コンパイラーに抽象化を与えられたプラットフォームで利用可能なシステムプロセスに適合させることにより、コード実行を事前に最適化できます。これまで、動的言語には、システムリソースへのアクセスを遅くする追加のソフトウェアレイヤー(=インタープリター)が必要です。
与えられた理由のほとんどは技術的または「テーブルの上」です...ここにビジネス上の理由または「テーブルの下」があります:
コンパイル済みコードの配布ソースコードの配布。 c/c ++で開発する場合、バイナリを配布します。最新の言語で開発している場合は、ソースを配布します。株主や投資家に答えなければならない経営者に難読化のアイデアを売り込むのは難しいので、気にしないでください。
愚かなユーザー:少なくとも管理者の頭の中では。彼らはまだ、ユーザーが「setup.exe」をダブルクリックすることがほとんどできないと認識しています。セットアップの一部としてインタープリターのインストールを含めると、それらは左右に首を振るでしょう。
古い開発者:経験のあるほとんどの人は長い間存在し、自分自身を更新し続けていません。新しい言語を知らないため、新しい言語ではなくC++でプログラミングします。
問題の範囲をGUIから競争力のあることが期待されるソフトウェアに拡張します。 C++は、処理能力、インストールされたランタイム、フレームワークなどに関係するため、ターゲットプラットフォームに課税しません。したがって、管理された/解釈された言語で記述された同様のソリューションよりも限られた顧客ハードウェアで動作します。成功した商用ソフトウェアの場合、開発コスト(C++の場合は潜在的に高くなります)は販売数によって償却されます。
さらに、C++は通常、システムAPI(GUIなど)への直接アクセスを提供します。これにより、使用率を最適化し、類似のソリューションとの差別化を図ることができます。
その多くはGUIツールキットのAPIに関係していると思います。それらのすべてはC/C++ APIを持っていますが、すべてが(たとえば)Python=バインディングを持っているわけではありません。また、ツールキット自体がC++を念頭に置いて作成されている場合があるため、サポートがある場合でも他の言語の場合、それらはサポートしません完全にサポートしません(たとえば、Python Tuple
を引数としてサポートしません)。
あなたは例としてブラウザとゲームに言及しています。これらはどちらもパフォーマンスが非常に重要なアプリケーションであるため、速度を上げるために低レベル言語で使用することは理にかなっています。
他の多くのアプリケーションはパフォーマンスの制限が少なく、他の言語で簡単に作成できます。特にC#はよく使われているようです。 (そして、Obj-C、しかしそれは私が推測する高レベルとして実際には適格ではありません。C++よりも優れています。)
ただし、最新のプログラミング言語用のフレームワークがある程度不足しています。たとえば、実際には、Python用の実行可能なネイティブGUIライブラリはありません。もちろん、PyQtまたはPyGtkを使用できますが、これらはうまく機能しますが、結局のところ、これはCコードとのやり取りだけです。繰り返しになりますが、C#(およびおそらくObj-C)は例外のようで、MacRubyまたはIronPythonがそのゲームを変える可能性があります。
C++またはJavaを置き換える言語の場合、これらの言語で独自の強みを発揮する以外に、これらの言語で非常に見逃されていることを実行する必要があります。また、これらの言語には莫大な投資が行われています。これは、多くのプラットフォームに標準のC++ライブラリがあり、ブラウザー、ゲーム、およびそのようなプログラムがすぐに使用できることを意味します。ですから、ある程度の慣性があるはずです。言語は、他のソフトウェアとは異なり、ゆっくりと離陸する傾向があります。
見てみると、Anaconda(RedHatのインストーラプログラム)は10年ほど前からあり、Pythonで書かれています。Pythonはこれではありませんでしたアナコンダが新しいときに人気がありました。
GoogleのGo(golang.org)は急速に進化しています。コンパイラはまだブートストラップされていません。その人気が高まるには、ライブラリが安定し、コンパイラをブートストラップする必要があり、より多くの人々がそれを使用する必要があります。 Google以外の制作プログラムの1つがGoで書かれていると聞いたことがありますが、1年余りの間にまだダウンタイムがなかったと報告されています。