なぜ最新の動的言語よりも重いGUIアプリを構築するのにC ++が好まれているのですか?[閉まっている]


46

重いGUIコンテンツを含むアプリのほとんどは、通常C ++で開発されています。ほとんどのゲーム/ブラウザはC ++でコーディングされています。

最新の動的言語でより良いGUIアプリを開発することはできませんか?私はjavaが素晴らしい選択ではないことを知っています。しかし、ネイティブにCで構築されているpythonのような言語はどうでしょうか?最新の言語は祖先よりも優れているはずではありませんか?なぜ最新の言語よりも古いC ++を優先する必要があるのですか?

また、GUIの処理速度を向上させるために、C ++で責任を負うのは何ですか?一方、他の最新の言語に欠けているのは何ですか?


22
Javaが「動的」言語であると考えると、この文脈でその言葉が何を意味するのかについて深く混乱しています。
マイクバランチャック

15
@マイク・バランザック:それは長い話です。基本的に、最初にスタンフォード大学で研究プロジェクトがあり、後にサンリサーチでセルフと呼ばれました。Selfは、Smalltalkファミリーのプログラミング言語であり、Smalltalkよりもシンプルで、強力で、表現力に富み、最も重要なのは動的です。これは、デスクトップアプリケーション、サーバー、オペレーティングシステム、デバイスドライバーなど(すべてのSmalltalk方言がそうであるように)でシステム全体を開発するプログラミング言語として設計されたため、非常に高速でなければなりませんでした。だから、自己のチームは新しい...の全体の束を発明
イェルクWミッターク

15
...最適化技術、および自己VMは(1992年に、さらに第二世代に)1987年に出てきたとき、それはだった速いです。他のSmalltalk VMよりも高速でした。自己のコード例の多くに同梱システム、およびそれらの例の一つでもセルフで書かれたSmalltalkの通訳だった、とその速く、他のSmalltalk VMを超えました。当時のSelfは、多くのC ++実装よりも高速であり、Cとの競争力さえありました。それはだった速いです。しかし、Sunは...彼らはので、彼らは、オブジェクト指向プログラミング言語または高速VMの必要性を持っていなかったことを決めた
イェルクWミッターク

15
...基本的に、資金を枯渇させることにより、Selfプロジェクトをstar死させました。Self VMエンジニアがフラストレーションからSunを除外したとき、彼らはLongView(Smalltalkのオプションの静的型システム、StrongTalkと呼ばれるほとんどの製品の名前でより一般的に知られている)と呼ばれるSmalltalkスタートアップによってすぐにquicklyられました。LongViewは、Smalltalkの静的タイピングを販売することは決してできないことを知っていたため、地球上で最速のSmalltalkを販売し、StrongTalkを一種のトロイの木馬のようなプレイのパッケージに含めることを考えました。彼らはまた、そのクールのどれも...実現
イェルクWミッターク

15
...自己VMがした最適化は、自己に特にどのような方法であったが、ほとんどすべてのオブジェクト指向言語(あるいは単に任意の言語に適用されたすべての)。そのため、Self VMエンジニアは、Animmorphic VMと呼ばれるSmalltalk VMで作業するようになりました。ここでも、Animorphic VMだった疑いの余地なくコードベースは15年かそこらでは触れられていないにもかかわらず、実際には、高速で(まだある、それはまだ、現代の高性能Smalltalks、JVMのと.NETと競合することができ、特にあなたが取る場合それは... 20 MEGと486sのために設計されたため、アカウントには、それよりもはるかに少ないリソースを使用していること
イェルクWミッターク

回答:


58

私は、C ++ GUIアプリ(主にWindows用)を作成する人々の1人です。Qtでは、正確に言えば。私の理由:

  • 私はC ++が好きです。私はフリーランサーであり、通常はツールを選択できます(幸運です!)
  • マネージ環境では、アンマネージコードを使用する必要がある場合に苦労するかもしれません(C#での長蛇のWinAPI宣言、だれでも)。
  • より簡単に展開できる依存関係が少ない
  • すべてをさらに制御します。
  • RAII(対GC)。また、で割り当てたnewとしてdeleteも、スマートポインターまたはQObject階層を使用するため、明示的に何かを割り当てることはほとんどありません。
  • C ++は最近非常にエキサイティングです。コンパイラが新しい標準を完全にサポートするのを待ちきれません。
  • 速度(リストの最後でのみ。GUI自体にとってそれほど重要ではないことはわかっています、C ++プログラムはランタイム、バイトコードJITコンパイル、および同様の技術が追加するオーバーヘッドの影響を受けないためより高速になる傾向があります。プログラム。)

ご覧のとおり、これらはほとんど個人的な好みです。私の仕事が楽しいことは重要だと思いますが、C ++はそれを提供してくれます。


11
個人的な好みを除いて、ここでは+1スピードが間違いなく一番の理由です。しかし、「C ++は最近非常にエキサイティングです」が好きです。@TamásSzeleiではなく、質問者に対処するために:確かに、新しいアイデア、パラダイム、テクノロジー、製品を使用してコンピューティングの変更をすばやく行いますが、最新かつ最高のものは美徳ではありません。C ++はしばらく前から存在しており、古くなっているわけではなく、新しい技術と比較して長い実績があります。元のStroustrupのテキスト(発明者の本)は多忙ですが、他の人によって素晴らしい本がいくつかあります-たとえば、oreilly.comをチェックしてください。
therobyouknow

1
@Tarnas私は「常により速くなる」とは少し狭量/権威があると思いますが、下票を正当化するのに十分ではありません...-
マックス

2
逸話的なサポートとして:私は、C ++とJavaScriptを使用して、Windows上でかなりのサイズのGUIを作成するために、さまざまなプロジェクトに携わってきました。また、C ++およびJavaScriptのさまざまなゲームコンソールプロジェクトにも参加しました。どちらの場合も、JavaScriptの速度とメモリの問題が大幅に増加しました。
ロボット

2
パーティーに遅れましたが、「少ない/簡単にデプロイ可能な依存関係」について詳しく説明できますか?
weberc2 14年

2
私はC ++を20年以上使用しています。11、14、17以降、多くの新しい優れた機能が追加されています。スクリプト言語としてほとんどC ++を使用できますが、高速のメリットを享受できます。BIGデータを扱うときは、C ++を使用する必要があります。これは、他の言語では10〜1000ほど遅くなるためです。
ケミン周

32

速度が重要だからです。

  • ゲームは、パフォーマンスが重要なコアタスクにC ++を使用します。柔軟性が重要なタスクのスクリプト作成に動的言語を使用します。

  • デスクトップGUIアプリ:たとえば、Visual Studioは、ネイティブC ++ではなく.NETで記述されています。IDE自体は多くのパフォーマンス重視のタスクを実行する必要がないため、IDEで非常にうまく機能するようです。(コンパイラ、リンカ、およびその他のツールは、必ずしも.NETで記述されているわけではありません-wawaがコメントで指摘しているように、一部は(たとえばVB.NET)のように見えます)

  • ブラウザも高速である必要があります。結局のところ、それらは一種のセカンダリOSです。一方、Mozillaフレームワークはjavascriptに大きく依存しているように見えるため、Firefoxの大部分は実際にjavascriptで「記述」されていると言えます。

要約すると、C ++は必ずしも優先されるとは言えませんが、パフォーマンスのボトルネックがある場合は、金属に近づいてからC ++(まあ、C)に会う必要があります。1つの言語であるC ++ですべてを実行する方が簡単な場合もあります。


1
+1ベストアンサー:C ++を使用する最大の理由として、純粋に速度に関係しています。Microsoft自身でさえ、C#がC#やVisual Basicと比較してパフォーマンスに最適であると認めています-Visual Studioページでそれらを参照してください。非常に近い秒は移植性です-Qtなどのクロスプラットフォームライブラリを使用する場合。主観的というよりも客観的だからです。
-therobyouknow

2
2番目のポイントは完全に真実ではありません。VB.NETコンパイラはVB.NETで記述され、F#コンパイラはF#で記述されています。C#コンパイラはそうではありませんが、プロジェクトRoslynについてリリースされたものから、C#コンパイラはC#で書き直されていると思います。
ウェズリーワイザー

5
Visual Studio GUI(クロム)は(vs2010から)c#とWPFで記述されています。ソリューションエクスプローラー、ビルドシステム、コードブラウザー、およびツールボックスは、winformsを使用してc#/ c ++で記述されています。コンパイラはc ++で書かれています。
マーティンベケット

ほとんどのデスクトップアプリでは、レンダリングエンジンとレイアウトエンジン(つまり、ビュー)のみが高速である必要があります。とにかくモデルはあまり時間を費やさない傾向があり、コントローラーはユーザーが何かをするのを待つだけでほとんどの時間を費やします(信頼性が高くても1秒に10回クリックできるユーザーはほとんどいません)。
ドナルドフェローズ

@MartinBa:C#とVB(Roslyn)の現在のコンパイラはC#で書かれていることに注意してください。
jmoreno

17

C ++で記述されたGUIアプリケーションは、レガシーの理由により一般的に行われます。Python(QtまたはGtkを使用)は、Windowsアプリケーションで作業する場合のC#と同様に、GUIアプリケーションに非常に適しています。何か新しいことを始めるときは、行うべき配管作業がないため、どちらもC ++よりも非常に好まれます。


5
+1既存のコードは重要です。新しいプログラムを開発するとき、最初から完全に開始することはまれです

7
QtでC ++を使用するよりも、QtでPythonを使用する方が望ましい方法はありますか?今日新しいプロジェクトを開始する場合、GUIにはC ++を使用します。理由:a)私が知っていること、b)それは仕事をうまくやる。C ++がしばらく前からあったからといって、それが「時代遅れ」になっているわけではありません。
TZHX

2
@TZHX:「それは私が知っていることです」は実行可能な議論です。それが与えられない場合、メモリ管理の面倒を見る必要がなくなり、パフォーマンスが大幅に向上します。また、単一のプロジェクトであってもPythonを学習する労力を相殺する可能性があります。Pythonを使用するもう1つの理由は、クロスプラットフォームであることです。C++では、注意して特別な対策を講じる必要がありますが、Pythonは正常に機能する可能性があります。
-tdammers

4
C ++を知っている人に、C ++でQtの代わりにPyQtを使用する利点はありません。
ベンジャミン

13
C ++も正常に機能する可能性があります。Pythonでは、ユーザーがどのバージョンのpythonをインストールしたか、またはバンドルすることを心配する必要があります。愚かなエラーを犯さない限り、「メモリの面倒を見る」ことはそれほど多くありません。多くの人が「メモリ管理」をC ++を使用する際の大きな障害として与えていると思いますが、実際にどれほどの違いが生じるかはわかりません。
TZHX

16

.NETなどの群衆がいくつのパフォーマンステストを実行しても、ベンチマークでどれだけ近づいても、最終的にはC ++アプリが最上位に表示されるためです。コールドブートで高速で、より高速で、改善できる方法がたくさんあります。

.NETが進むべき道であるというプロジェクトの開始段階で多くの証拠を聞いたことがありますが、一度選択されると、それらは常に重苦しいものになりました。

また、最近のC ++は、特にQtやWTLなどのフレームワークでは、非常に安全で使いやすいです。


2
+1:「また、最近のC ++は、特にQtのようなフレームワークでは、非常に安全で使いやすいです...」私は完全に同意します。 )ネイティブコードにコンパイルされている、(2)合理的な機能セット(OOP、テンプレート)がある、(3)Qtのような非常に優れたフレームワークがある。これは、言語がかなり大きく、習得するのが難しいという事実を補います。言語の適切なサブセットといくつかの優れたライブラリを習得すると、それで本当に生産的になります。
ジョルジオ

10

ほとんどのゲームエンジンはC ++でコーディングされています。また、ブラウザエンジンの多くはC ++でコーディングされています。ただし、ブラウザのGUIは、いくつかの軽量スクリプト(JavaScript、Python)を使用してコーディングされることがよくあります。Source Engineの顕著な例外を除き、ほとんどのゲームエンジンはスクリプト言語(LuaやPythonなど)も使用します。[参照用:Luaスクリプトゲームのリスト ]

Qtのような人気のあるC ++ GUIライブラリも使用してください。現在のバージョン(4.7)では、GUIにQMLを使用しています。QMLは基本的にQtバインディングを備えたJavaScriptです。

したがって、実際にはC ++ 動的言語は存在せず、混在しています。


[引用が必要]。多くのゲームでスクリプト言語を使用してユーザーを拡張できることは知っていますが、私が知る限り、リリースバイナリ機能のためにスクリプト言語を使用しているゲームはあまり多くありません。
ProdigySim

1
@ProdigySim:いくつかのことを知っています。私の頭上にあるWorld of Warcraft(Lua + XML)、Naughty DogのUnchartedシリーズ(Lisp)、Unrealシリーズ(UnrealScript)、TorqueおよびUnityエンジンに基づくゲーム、Dungeon Siege、NeverWinter Nightsなど。データ駆動型ゲームが標準になりつつあり、スクリプトホストが(すべてではないにしても)ほとんどのUI機能とゲームの状態を上から下に引き継ぎます。
-greyfade

@ProdigySim:通常のユーザーから隠されていても、内部でスクリプトエンジンを使用しないという意味ではありません。基本的に、ゲーム開発者には2つのオプションがあります。モデル用に独自のスクリプト言語を作成するか、汎用のスクリプト言語を使用します。Luaは一般にリアルタイムシステムに適しているため、ゲームに特に適しています。
バルテック

ソースエンジンはSquirrelスクリプト言語を使用します。
cubuspl42

6

最初の理由は次のとおりです。(古い)習慣

2番目の理由:仮想マシンの信頼性の低下、インストールが必要なインタープリターなど。

また、C ++でコードを開発するための優れたIDEがまだいくつかあります。


1
まだ優れたIDE」..私はVisual StudioとEclipseが最先端であり、かなり長い間存在していると主張します。
-JBRウィルキンソン

@JBRWilkinson:私は他の言語にもそれらがないとは言わなかった。
ロアルト

6

その理由は、発生するすべてをより詳細に制御できるからです。C#でphotoshopを作成する場合、一部のタスクで深刻なパフォーマンスの問題が発生します。より制御しやすい低レベル言語では、ショートカットを作成し、より激しいものに必要な場所を最適化できます。もちろん、これは、.NETのC ++ではなく、アンマネージコードでC ++を使用していることを前提としています。

簡単な例については、こちらをご覧ください。


2
基本的にPhotoshopのサブセットであるAdobe Lightroomは、Luaで記述されています。
ヨルグWミットタグ

4
@Jörg:残りはC ++です。実際、それはおそらく利用可能な最良の組み合わせであり、C ++が基盤で、Luaが残りです(低レベルの場合はC ++よりもCを好むと思います)。
ハビエル

2
@Javier:ええ、Lightroomは基本的にPhotoshop(おそらくMMX / SSEアセンブリでほとんど書かれている)とSQLite3(移植性のために先史時代のANSI Cで書かれている)の画像操作アルゴリズムで、Luaと接着されています。また、アドビは完全にLuaで独自のLua IDEを開発しました。使用しているグラフィックツールキットを知っている人はいますか?AFAIR Photoshopは、ほとんどすべての最新のツールキットよりも前のものであるため、おそらく自家製のものですか?
ヨルグWミットタグ

4
違反はありませんが、ANSI Cが先史時代だと思うなら、あなたは間違ったコードサンプルを読んでいました
Javier

6

C ++は静的に型付けされます。これにより、特定のプラットフォームで使用可能なシステムプロセスに抽象化をコンパイラーで適合させることにより、コード実行を事前に最適化できます。これまで、動的言語には、システムリソースへのアクセスを遅くする追加のソフトウェアレイヤー(=インタープリター)が必要です。


4

指定された理由のほとんどは技術的または「テーブルの上」です...ここにビジネス上の理由または「テーブルの下」があります:

コンパイル済みコードの配布とソースコードの配布。c / c ++で開発する場合、バイナリを配布します。最新の言語のいずれかで開発している場合は、ソースを配布します。難読化者のアイデアを、株主/投資家に答えなければならない経営者に販売することは難しいので、気にしないでください。

愚かなユーザー:少なくとも経営陣の頭の中では。ユーザーは「setup.exe」をほとんどダブルクリックできないと感じています。セットアップの一部としてインタープリターのインストールを含めると、彼らは左右に頭を振るでしょう。

古い開発者:経験のある人のほとんどは長い間存在しており、自分自身を更新し続けていません。彼らは新しい言語を知らないので、新しい言語ではなくC ++でプログラムします。


.NETアプリケーションをリリースするときにソースコードを配布していると主張します。Visual Studioを見ると、インターフェイスの多くはWPFフォームで設計されています。もちろん、いくつかのポイントは有効です。今日の管理の多くは昨日の開発者でしたが、今日のフレームワークの悪いニュースは、今日のコンピューターの変更のために有効ではないでしょう。
ラムハウンド

多くの経験を持つ多くの人々は、自分自身を最新の状態に保つことで経験を積んでいます。彼らは、ホットだからといって、ホットな新しい言語(1980年代初期のPascalなど)を習得する傾向はありませんが、それらを使用できるか、興味深いアイデア(たとえば、Haskell)がある場合のみです。
デビッドソーンリー

4

この問題の範囲をGUIから競争力があると予想されるソフトウェアに拡大します。C ++は、処理能力、インストールされたランタイム、フレームワークなどに関係するため、ターゲットプラットフォームに税金を課しません。したがって、マネージ/解釈言語で記述された同様のソリューションよりも限られた顧客のハードウェアで動作します。商用ソフトウェアが成功した場合、開発コスト(C ++の場合は潜在的に高い)は販売数で償却されます。

さらに、C ++は通常、システムAPI(GUIなど)への直接アクセスを提供するため、使用率を最適化し、同様のソリューションと差別化する最適な機会を提供します。


3

その多くは、GUIツールキットのAPIに関係していると思います。すべてにC / C ++ APIがありますが、すべてに(たとえば)Pythonバインディングがあるわけではありません。また、ツールキット自体がC ++を念頭に置いて記述されている場合もあるため、他の言語をサポートしていても完全にはサポートしていません(たとえば、Python tupleを引数としてサポートしていません)。


ああ、彼らはそれらを完全にサポートしていません。彼らはそれを望んでいないか、それを実装する時間がないからです。それは不可能だからではありません。
cubuspl42

2

例としてブラウザとゲームに言及しています。これらはどちらもパフォーマンスが非常に重要なアプリケーションであるため、速度を上げるために低レベル言語で使用するのは理にかなっています。

他の多くのアプリケーションはパフォーマンスの制約が少なく、他の言語で簡単に作成できます。特にC#は多く使用されているようです。(そして、Obj-C、しかしそれは私が推測する高レベルとして実際に修飾されません。しかしC ++よりも良いです。)

ただし、最新のプログラミング言語のフレームワークには特定の不足があります。たとえば、実際にはPython用の実行可能なネイティブGUIライブラリはありません。確かに、PyQtまたはPyGtkを使用できますが、それらはうまく機能しますが、最終的には、それはCコードと再びインターフェースするだけです。繰り返しになりますが、C#(およびほぼ間違いなくObj-C)は例外のようであり、MacRubyまたはIronPythonがそのゲームを変える可能性があります。


0

C ++やJavaに取って代わる言語については、独自の強みで実行する以外に、これらの言語で非常に見逃していることをしなければなりません。また、これらの言語には多大な投資が行われています。つまり、多くのプラットフォームに標準のC ++ライブラリがあり、ブラウザ、ゲーム、およびそのようなプログラムがすぐに使用できます。そのため、ある程度の慣性があります。言語は、他のソフトウェアとは異なり、ゆっくりと離陸する傾向があります。

ご覧になると、Anaconda(RedHatのインストーラプログラム)は10年ほど前から存在し、最初からPythonで書かれています。Anacondaが新しいとき、Pythonはそれほど人気が​​ありませんでした。

GoogleのGo(golang.org)は急速に進化しています。コンパイラはまだブートストラップされていません。その人気が離陸するためには、そのライブラリーを安定化する必要があり、コンパイラーをブートストラップする必要があり、より多くの人々がそれを使用する必要があります。Google以外のプロダクションプログラムがGoで記述されており、1年以上の期間でダウンタイムが発生していないと報告されています。


1
実際には、移動中に書かれているWindows用の商用のGoコンパイラがありますので、そこにある行くためのブートストラップコンパイラが。(ただし、まだベータ版です。)
ヨルグWミットタグ

ああ、それから私は連絡が取れなかった。教えてくれてありがとう:)
vpit3833

2
erGoと呼ばれ、Newquist Solutionsと呼ばれる会社によって製造されています。
ヨルグWミットタグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.