可能性のある重複:
最新の「C++ルネサンス」とはどういう意味ですか?
最近、C++ルネサンスについてよく耳にします。それは何ですか?
C++は現在ルネサンスを受けています。つまり、定義上、言語、コンパイラ、および構成ツールは進化し、ハードウェアとソフトウェアのドメイン全体でネイティブの開発者の効率、生産性、および創造性を最大化する状態に融合しています。
C++は、主に新石器時代(98,03)で更新されたため、多くの改善が必要であることに同意します。本当に私を悩ませているのはビルド設定です。 RSSリーダーやピアノなど、C++とXAMLで記述されたいくつかのメトロスタイルアプリを紹介しました。
C++はこの種のアプリにとってはやり過ぎであり、利点がバッテリー電源であることがわかる唯一のケースだと感じていますが、それは本当ですか? C#およびC++はネイティブであるWinRTを呼び出し、C#は実行時のオーバーヘッドがごくわずかです。
誰かがWindows 8でC++を使用するケーススタディまたはハードデータを提供できますか?
私はそれが現状であると思います(ゲーム、サーバー、OS、データベース、PhotoshopのようなアプリはC++であり、他のクライアントアプリは.Netを実行します)。ルネサンスは単なるマーケティングのスローガンです。
すべての上級プログラマー/アーキテクトは Herb SutterのC++ and Beyond 2011でのプレゼンテーション を見る必要があると思います。
基本的に、彼は.NETとJavaは確かに生産性を向上させると言います。しかし生産性はすべてではありません。バッテリーの電力とパフォーマンスはハンドヘルドデバイスにとってますます重要になっています。ビッグデータサーバーファームの場合、処理を2000コアではなく1000コアに絞ることができる場合、余分なプログラミング時間で失うお金よりも、エネルギーとメンテナンスのコストを節約できます。
したがって、小規模システムと大規模システムの両方で、生産性がすべてではなく、最も重要な要素でさえありません。処理能力とバッテリー能力が低下すると、C++が勝利します。
新しいC++標準は、パフォーマンスを犠牲にすることなく、生産性を向上させます。それはバランスをさらにシフトさせます。
C++は、主に新石器時代(99)で更新されたため、多くの改善が必要であることに同意します。
C++は99年に更新されることはありませんでした。最初のC++標準は98でした。そして2003年には次の標準が追加されました。そして、新しい標準が今年登場しました。それはまさに新石器時代ではありません。さらに重要なことに、C++が98年よりずっと前から持っていたプログラミング手法は、相対的に言えば、ジェネリックや関数型APIのような.NET言語にしか取り入れられていないことは注目に値します。 C++には、ジェネリックがC#に存在するよりもはるかに長いテンプレートがあり、ジェネリックはテンプレートほど強力ではありません。間違いなく、数十年後のキャッチアップを果たしているのはC#です。
C++はこの種のアプリにとってはやり過ぎだと感じています
やりすぎ?一部の人々は主観的な理由でC++を好むかもしれないという考え(あなたが興味があれば私はそれを数十にあげることができます)に加えて、消費者のコンピューターで実行するために100MBのインストールを必要としないという事実は、たとえば、またはC#よりも多くのプラットフォームで動作します。
また、C#の実行時のオーバーヘッドは小さくありません。全然。実際、アプリが小さいほど、より大きい CLRの読み込みに費やされる時間の割合です。
私の知る限りでは、根本的な問題は、MicrosoftにはWinDivとDevDivの2つの部門があるということです。
WinDivは煩わしくなく、C++を別の言語にまとめることを強いられていると感じています。最初は、Win32 APIを使用したCでしたが、現在は、技術的にコンパイルされているという意味でのみC++ APIであるMetro APIを使用したC#です。 C++コンパイラによるもので、C++デザインとの共通点はほとんどありません。さらに、WinDivはそれらの誤りから学習しません。たとえば、新しいMetro APIであっても、MetroコントロールとDirectXレンダリングを混在させることはできません。前世代のネイティブコントロールで空域の問題が発生した後に修正したようなもののようです。
一方、DevDivは実際に彼らが実行しているwtfを知っているようです。たとえば、Visual Studio 2010の同時実行ランタイムとvNextのC++ AMPを参照してくださいawesomeです。彼らはまた、いくつかのかなり甘いツールを生成します-vNextでのC++のIDE改善は非常に優れており、残念ながらAMPは大きな問題です。つまり、新しいC++ 11機能がほとんどないことを意味します。
問題は、WinDivがlot DevDivよりも多くのコンテンツ(ソケットやUIライブラリなど)を生成することです。したがって、C++のルネッサンスがあります。それは、残念ながら小さなDevDivライブラリチームがWinDivのものに貼り付けたものにのみ適用されます。
C++では、サーバー側アプリケーションの重要性が増し始めています。プロセッサを効率的に使用することで、数百万のサーバーコストを節約できます。アプリの実行速度が7倍遅い場合は、サーバーの7倍、冷却コストの7倍、床面積の7倍などを購入する必要があります。このため、Facebookは一部のC++の使用を開始しました。 Googleは多くの言語を使用していますが、その中心はC++です。大規模な負荷が予想される場合、最初からネイティブ実装を使用すると、作業がはるかに簡単になります。
ガベージコレクションは開発を容易にするものだと人々は考えているようです。私の経験ではそうではありません。特に、コードが外部リソースを保持している場合はそうです。デストラクタクリーンアップのC++モデルは、Javaモデルよりもクリーンでモダンです。
これを考慮してくださいJava疑似コード:
public void someMethod()
{
FileObj f = null;
try
{
f = new File("/somePath/myFile.txt");
String str = f.read();
System.out.println(str);
}
catch(CustomException ce) { /*la */ throw ce; }
catch(PathNotFoundException pe) { /*la */ throw pe; }
catch(Exception e) { /*la */ throw e; }
finally
{
try { if(f !=null) f.close(); }
catch(Exception e) { /*la */ throw e; }
}
}
C++では、それほど膨張することなく、同じくらい安全なものを作成できます。上記の疑似コードのすべての安全性を備えた1行のコード。
void someFunction()
{
FileObj f("/somePath/myFile.txt");
string str = f.read();
cout << str;
//the file is magically closed even if an exception occurs during f.read();
}
編集:pusedo-codeメソッドを「main」から「someMethod」に変更します。
編集:Java疑似コードで例外を再スローして、C++と同等にする。
編集:ファイル名をFileObjに変更して、擬似コードが実際のJavaライブラリと混同されないようにします。
もちろん、これはマーケティングのスローガンですが、Microsoftが(再び)新しいプラットフォームでファーストクラスの市民としてネイティブコードをサポートすることを約束していることを示しています。
個人的に興味があるかどうか、それは別の質問です。他の言語を好んでそれがうまく機能する場合は、「C++ルネサンス」を無視してください。
また、C++は移植可能です。 C++アプリをWindowsで作成して、Mac/Linux/Android/iOSに移動することもできます。これはおそらく、MSが関心を持っている角度ではありません。
Windowsが町で唯一のゲームだったとき、C#は安全に使用できました。
他にもJava/Pythonなどの代替手段があります。それらにはすべてランタイムが付属しているため、新しい環境への移植には少し時間がかかります。これらの新しいプラットフォームがすべて登場するので、ネイティブの方が安全です。
また、C++(およびC)は、複数のベンダーからの複数のコンパイラーを備えた唯一のものです。そのため、誰も規則を変更することはありません-OracleとJava、MSとC#など。
したがって、アプリを作成していて、それを別のプラットフォームに移動したい場合は、C++が非常に安全な選択肢です。
誰かがWindows 8でC++を使用するケーススタディまたはハードデータを提供できますか?
まあ、OSはC++で書かれています。
簡単な答えは、頭の半分の誰もが、競合するアプリよりも10倍遅く動作し、バッテリーを多く消費する商用アプリの設計を望んでいないということです。