最新のC ++はC#に取って代わりますか?Microsoftは開発者にC ++の採用を促していますか?[閉まっている]


91

最近のC ++の人気と、C#または他のCライクな言語からC ++への移行についての話を聞きます。

私はC ++ 11の機能について知っていますが、特にC#からC ++に移行した開発者からのあなたの経験を聞きたいです。

さらに重要なこととして、Microsoftは開発者にC ++の使用を促していますか?はいの場合、なぜですか?


16
C ++はC#よりも確立されており、簡単に移植できるため、C ++は常に広く使用されている言語だと思います。C#に取って代わるとは思わない。Windowsベースのビジネスアプリケーションの場合、C#は、簡単に入手できる言語として、依然として大きな需要があります。C ++が実際に消えることはありませんでした。最近、ちょっとした復活がありました。
KChaloux

2
しないことを願っています。JavaとC#は開発者にとって恩恵であり、まだ進化しています。
ジェシーC.スライサー

4
C ++とC#はどちらも単なるツールです。特定のジョブに最適なツールを選択してください。たとえば、クロスプラットフォームコードを作成する場合は、C ++を使用できます。.NETランタイムのインストールを必要としない小さなアプリが必要な場合は、C ++(CRTが静的にリンクされている)を使用できます。RAD方式でWindows用のGUIツールを開発する場合は、C#とWinFormsを使用できます。など
Mr.C64

6
それはいい質問です、言い換える必要があるかもしれません。それは別の言語Aと言語Bではありません。むしろ、Microsoftの立場、具体的にはそれが変わった理由、そして彼らがどこへ行くのかということです。移動します。そして、この場合、はい、彼らは間違いなく影響しています。
DXM

9
みなさん市民としてください。無礼は許されません。
maple_shaft

回答:


95

はい、あなたの疑いは正しいです。Microsoftは、C ++を復活させて人気を高めようとしています。

私は今それを見つけることができませんが、少し前にマイクロソフトの大物の1人によるプレゼンテーションを見て、すべてが開発者向けで、Windows 8、特にWinRT(.NETフレームワークの代替品) Win32 APIとして)。

彼は、さまざまな圧力が特定の時間に人気のあるテクノロジーにどのように影響しているかを説明したタイムラインを持っています。したがって、最初は人々が速度を求めていたため、すべてC / C ++(2つの異なる言語)でコーディングされていました。ハードウェアが高速になると、実行速度から開発速度に焦点が移り、より高レベルの言語がはるかに一般的になりました。

ただし、現在はモバイルおよびARMベースのコンピューター(Windows 8はARM用にコンパイルされた最初のWindowsリリース)に焦点が当てられており、多くの人がより人気があり、一部はデスクトップを完全に置き換えると考えています。(少なくともMicrosoftの目には)焦点はC ++に戻っています。これは、現在、バッテリ寿命を重視しているためです。より高いレベルのコード=より多くの指示=より多くのジュースが必要です。

このC ++への移行をサポートするために、彼らはWinRTと呼ばれるまったく新しいWindows 8プログラミングAPIを導入しました(最後に確認しましたが、それはとにかく名前でした)。このAPIは、提供する機能の範囲で.NET Frameworkのテーマに従いますが、HTML 5 / Javascriptアプリを作成したい人のために、C ++(COMインターフェイス経由)、C#、またはJavascriptでコーディングしている人なら誰でも利用できます。また、XAML(最新のUIフレームワークであるWPFで使用されるテクノロジー)をC ++でも利用できるようにしています。

だから私にとって、この種のことは、MicrosoftのC ++に以前よりも確実に重点が置かれていることを示しています。

更新#1:

これに対して「いい答え」のバッジを受け取ったので、多分私は戻ってきて、a)いくつかのことを明確にし、b)事実確認警察を幸せにするべきだと思ったそれは何年も続きます。

  1. WinRTは.NETフレームワークに代わるものではありませんが、MS Windows開発者が現在持っているもう1つの代替手段であり、MSはその方向に進むように人々を強く推進しています。通常のデスクトップアプリでも活用できるはずですが、WinRTは主にModern UIアプリを対象としていたようです(これが100%正確でない場合は炎を保持してください)。そうは言っても、MSは人々がa)最新のUIアプリを作成し、b)WinRTの使用を開始するよう強く求めています。

  2. C ++は、C#やpythonなどの高レベル言語を決して置き換えません。これらの言語がC ++を決して置き換えないように。これはおそらくOPの質問の中で最も議論の余地のある部分だった。しかし、それはすべてバランスについてであり、事実は次のとおりです。

    • C ++コミュニティ(MSが大部分を占める)は、C ++を低電力デバイスの優れた言語として位置付けるための強力なカムバックを推進しています。あなたが私を信じないなら、去年始まった「GoingNative」シリーズの講演を検索してください。
    • マイクロソフトからのあらゆる努力と影響により、C ++の使用は間違いなく増加しますが、C#は何かを落とす可能性があります。これがMSが推進していることであり、上記のコメントで述べたように、MSがアイデアの背後に資本を置くと、業界の大部分をシフトします。「どんな業界で、私はいつもLinuxを使っている」と主張する人から返事をもらえるでしょう。それに対して、私の唯一の返事は、目を覚まします!はい、他のOSもありますが、デスクトップ市場の大部分は、現時点では消費者とビジネスの両方がWindowsであり、時間の価値を最大化することを望んでいる深刻な開発者は、デスクトップ市場のそのチャンクをターゲットにしないことは非常に愚かです。

結論として、はい、MSはC ++の復活を推し進めているため、その人気が高まる可能性が高いです。いいえ、C ++がC#を置き換えることはありません。

アップデート#2:

理由はわかりませんが、技術コミュニティは、現実が灰色の色合いでいっぱいの場合、非常に絶対的な黒/白の用語で物事を見る傾向があります。これは、この投稿に追加されたいくつかの新しいコメントへの応答です。

  1. .NETフレームワークはすぐに(またはこれまでに)なくなることはありません。90年代以降のWindowsにあったほぼすべてのテクノロジーは、まだ何らかの形または方法で存在しています。したがって、.NETフレームワークに非常にアタッチされているものについては、a)それが消えることを心配しないでください。

  2. WinRTは、これまでWin32および.NETフレームワークAPIによって提供されていた多くの機能を再実装します。その機能が必要な人は、WinRT、.NETフレームワークを使用するか、Win32 APIを継続するか(どちらも死んでいない)を選択できます。現在、WinRTがWebアプリケーションの簡単な作成をサポートしていない場合、将来それらをサポートする可能性が非常に高くなります。

マイクロソフトが発表した立場は、WinRTは大きなフレームワークであり、Microsoftがクリーンな状態で開始し、Win32 APIおよび.NETフレームワーク自体で学んだ教訓を使用してAPIを構築する機会を与えたということです。私はそのビデオを探してみましたが、まだ見つかりませんが、スピーカーが言及したことの1つは、.NETフレームワークの特定の領域がより良い/シンプル/クリーナーと定義されていて、WinRTが同じ機能を公開していることですその新しいクリーナーインターフェイス。


7
「なぜC ++なのか」というタイトルのC ++以降でのハーブサッターの講演でしたか チャンネル9にはビデオがありますが、現時点ではアクセスに問題がありますが、おそらくRedmondが巨大なストリーミングイベントをホストしているためです。ロジックは理にかなっていますが、これらの種類のステートメントは、MicrosoftおよびMicrosoftの製品を使用してソフトウェアを開発する他の人にとって大きな戦略的変化を表すため、実際にいくつかの参照でバックアップする必要があります。
ロバートハーベイ

13
WinRTは.NETの代替ではありません。事実を確認してください。
陶酔

4
@Euphoric:言い換えれば、.NETフレームワークはWin32 APIの代わりにはなりませんでした。同時に、C#が登場したとき、多くの人が切り替えて、Cスタイルの関数呼び出しをWindows DLLにすることをすべて忘れていました。MSは今、同じスイッチを求めています。そのため、.NETフレームワークはWinRTの内部に存在し続け、.NETフレームワークを引き続き使用できることを確認しますが、MSは人々に新しいフレームワークへの切り替えを求めています。
DXM

21
@gbjbaanb-これは100%偽です。最初のすべての.NETは、常にWin32ライブラリの非常に素晴らしいラッパーでした。次に、Full.NETプロファイルと「WinRT」.NETプロファイルの間にわずかな違いしかありません。大きな違いは、10〜15年前に実装が不十分だった多くのものが削除され、より良いデザインのコードに置き換えられたことです。Win32ライブラリをすべて削除するまで、.NETはそのままです。あなたのコメントは、.NETおよびC#言語自体に関して完全かつ完全な知識不足を示しています。
ラムハウンド

6
言うまでもなく、Webアプリケーションの場合、.NETは素晴らしいです。これが「置き換え」であった場合、Webアプリケーションではなくデスクトップアプリケーション用になります。
ジョージストッカー

22

いいえ、Windows 8は、仕事を遂行する(または知る)ために必要な言語を使用することについてすべてです。JavaScript、.Net言語(C#)およびC / C ++はすべて等しくサポートされています。

置き換えられるものはなく、いずれにしても最終的には開発者に任されます。ただし、WinRTが簡単にするバッテリー寿命の向上が求められています。

例外は、特にWindows Phone 8でC ++がより多くのサポートを得ているゲームで、マネージド言語にはネイティブサポートがありません(別名xna)。


1
+1マイクロソフトは、Windows 8をスマートフォンおよびタブレット市場で採用することを切望しています。Apple 、Microsoftの合計よりもiPhoneだけでより多くの収益を上げています。1つの障害は、確立されたプラットフォームと比較して、Windows Phone /タブレット用のアプリが非常に少ないことです。そこで、彼らは誰でも好きな言語でアプリを作成できるようにしたいと考えています。C#、C ++、またはJavaScript。
MarkJ

Windows Phone 7からネイティブC / C ++サポートを廃止することにした理由はわかりません。その日以来、windows + windows mobileは、当社の90%の主要プラットフォームから10%の重要性にシフトしました。10%は、最高の開発ツール(ビジュアルスタジオ)によるものです。それ以外の場合は、Windowsデスクトップでも製品を製造しません。
パベルP

1
私はあなたがそこに言っているかわからないんだけど@Pavel ...
ダニエル・リトル・

@Pavel-WinPhone7からネイティブコードを削除し、WinPhone8からマネージコードを削除しました。すぐにプラットフォームを再訪するか、はるかに大きな市場シェアを獲得するまで/無視することができます。
gbjbaanb

19

私はC ++ 11の機能について知っていますが、あなたの経験を聞きたいです

汎用プログラミングでは、人々がC#よりもC ++(または1990年以降の[php以外]の代替案)よりもC ++を好むという考えは笑えます。C ++ 11はいくつかの優れた欠落ビットを追加しますが、それでも犬に足を釘付けしています。

C ++には優れたニッチがあり、コンパイラサポートが制限されている一部のプラットフォームでは依然として最適なオプションです。しかし、いや、現代のC ++は、おそらく時代遅れで壊れたC ++を除いて、どこにも置き換わるものではありません。


31
あなたが書いているものを読んでください。あなたは、C#を介した汎用プログラミングにC ++を使用することは笑える断言しています。これはあなたが信じている事実ですか、それとも単にあなた自身の誇張された意見ですか?
zxcdw

38
@zxcdw-100の一般的なプログラミングの問題がある場合、C#またはJavaまたはPythonまたはScalaを使用することでバグを少なくして、それらのうち〜90個をより速く、より良く処理できます...そしてそれは寛大です。これは、私が知っているほとんどすべてのプロのプログラマーの共通の視点です。C ++を主要言語として使用している人でさえも。
Telastyn

33
@zxcdw:私は筋金入りのC ++開発者です。私は15年以上C ++をやっており、主にC ++を必要とするバックエンドアプリに取り組んでいます。私は、STL全体とBoostの半分を超えました。私のチームをがっかりさせることに、テンプレートメタプログラミングを導入する価値のあるいくつかの場所で導入しました。私が作ろうとしているのは、C ++が大好きで、C ++で作業しているということです。そうは言っても、私はTelastynに同意します。C++が提供するものを必要としない一般的な問題がある場合は、C#またはPythonを選択します。それらは高レベルの言語であり、あなたは単にそれらの中でより速く物事を成し遂げます。この真少なくとも勝利の開発者のための
DXM

5
@MadKeithV-OSX、iOS、Androidで実行されているC#アプリで作業していなかった場合、そのクロスプラットフォームの議論にもう少し重みを付けることができます。それを無視しても、クロスプラットフォームが大きな懸念事項である場合、私がリストした非C#言語はほとんどの場合C ++よりも優れたオプションです。C ++ 11はこれらのオプションを押しのけるために多くをしていません。
Telastyn

14
ハンマーしか持っていない場合、すべてが釘のように見えます。C ++ 11の改善は、C#や他の同様の、しかしより多くのプラットフォームに依存しない言語の広範な影響を減らすことはなく、むしろその船を浮かせ続けるでしょう。C ++ 11の最大のセールスポイントは、システムの奥深くを駆け巡るシステムのエンドツーエンド言語でありながら、高次の抽象化をいじくり回す機会を提供することです。
JustinC

2

DXMの書き込み:

そのため、(少なくともMicrosoftの目には)焦点はC ++に戻っています。これは、現在、バッテリの寿命を重視しているためです。より高いレベルのコード=より多くの指示=より多くのジュースが必要です。

この言葉によると、JavaをGoogleのAndroidの主要言語/フレームワークとして選択するのは間違いでした。そうではありませんでした。高いレベルの言語とは、通常、物事をより速く行うことを意味し、これはマイクロソフトとグーグルにとって最も重要なことだと思います。プラットフォームに対してより良いアプリケーションが作成されるほど、OSプロデューサーの利益は高くなります。

一方、Windows用のソフトウェアはまだC ++で作成されているため、これらの開発者にC#/ JavaScript /他のものに切り替えるように勧めるのは正気ではありません。マイクロソフトは、可能な限り多くの開発者にWin8アプリを開発する可能性を提供することに注力しているため、Win8開発スタックでC ++とJavaScriptをサポートすることにしました。


5
Javaは間違いでした。生のパフォーマンスが必要な場合(そして頻繁に必要な場合)、C / C ++で記述します。開発者の生産性が必要な場合は、PythonやPHP、Ruby、JSなどの高レベル言語が必要です。Java(およびC#)は、最高のパフォーマンスも最高の生産性も得られない中間的なシステムです。現状では、C ++はそれほど悪くはありません-自分が何をしているのかがわかれば、C ++から良い生産性を得ることができます。
gbjbaanb

8
@gbjbaanb私はあなたのコメントについて複雑な気持ちを持っています:数年前、JavaとC#を同じ抽象レベルに置くことは理にかなっていましたが、.NETの新しいバージョンでのLINQ、ラムダ式、非同期プログラミング機能の導入はC#をより高いレベルに移動しました(JavaはJDK8の関数型プログラミングの不足に追いつく予定ですが、それはまだ早期アクセス段階にあります)。
コードスパークル

2
@gbjbaanb幸いなことに、WCFは.NETのごく一部にすぎず、C#言語に適用することを一般化することは無効です。.NET 3以降、実際に新しい機能を使用しましたか?VSはそれほど優れた開発環境ではないため(実際、ReSharperがないと本当に迷惑です)。したがって、このサイト(およびSEネットワーク全体)がC#で構築されていることを考えると、コメントは少し不正確に思えます。
コードスパークル

1
@rotman自分の答えで他の人の答えに返信しないでください。回答は、元の質問にのみ対応する必要があります:)
Andres F.

6
@gbjbaanb:それは、最高のパフォーマンスも最高の生産性もあなたに与えない中間のシステムが間違いであるという証拠のない主張であったと言うでしょう。パフォーマンスと生産性の両方が重要であることを考えると、最適なソリューションは2つをバランスさせるものであり、JavaやC#のような中間選択は多くのユースケースにとって優れた選択肢です。
Carson63000

2

C ++にはまだヘッダーファイル、柔軟なプリプロセッサー(#define)などがあります。一部の人々は、これらの機能を「悪」または「管理が難しい」と考えています。

一方、C#はメタデータを使用するため、ヘッダーファイルを作成および管理する必要はありません。

MicrosoftがC ++に機能を追加することについて:不思議な問題ではありません。

すべてのC ++コンパイラは、C ++ 11機能などの機能を追加しています。gccもです。


7
C ++について悪いと言えるのがヘッダーファイルだけである場合、その点を間接的に証明しています。重大なC#の問題、移植性、非決定性、ランタイムオーバーヘッド、プロプライエタリなどのホスト全体をリストできます。
user80554712

1
適切なジョブに適切なツールを使用します。C ++は、さまざまなアンマネージコードのパフォーマンスがメダルプロジェクトに低レベルである必要があるため、Intelなどの企業で優れていますが、すべての企業が行うWebサイト/ Webサービスが必要な場合は、C ++で幸運を祈ります!
トムステッカー

1

それは私だけかもしれませんが、C ++よりもはるかに単純なCの使用法を見ています。

C ++がプレーンC全体を飲み込んだという事実は、誰が何を使用しているのかを推測するのを難しくしています。

しかし、C ++よりもはるかに多くのCオープンソースプロジェクトがあります。

私の考えでは、メタルスピードに近い必要がある場合はCを使用します。合理的なパフォーマンスで柔軟性と管理性が必要な場合は、C#またはJavaを使用します。クリーンな設計をすばやく行うには、Python、Scala、Groovy、またはいくつかの完全に機能する言語を使用します。


2
いいえ、あなたはここで間違っていると思います。C ++は、例外を無効にした場合、何をしているのかを知っている限り、Cと同じくらい金属に近くなります。問題はABIです。C ++では、状況はまだ解決する必要があり、彼らはそれに取り組んでいます。これが完了すると、実際にはC ++の方がエラーチェックが優れており、スーパーセットであるため、C ++の代わりにCを使用することはあまり魅力的ではないと思います。
ゲルマンディアゴ14

0

c ++はc#を置き換えていません。C ++言語が使用されている場所を見てみましょう。高性能、ミドルウェアライブラリの作成、低レベルアクセス、およびリソースに制約のあるデバイスのコードの作成が必要な場合に使用されます。これらの一部にはc#を使用できますが、これらにはc ++の方が適しています。Microsoftによるc ++の推進は、モバイル分野への大きな推進と密接に関連しています。次のWebアプリをC ++で作成するように求められることはありません。しかし、Qtでは、生産性の議論をc ++に対して行うことはできません。しかし、多くの人はQtに慣れていないと思います。


C ++は、まだ非垂直の商用Windowsソフトウェア開発で頻繁に使用されています。
ビットツイダー

1
C ++は、ソフトウェアの作成に使用できる最もプロフェッショナルなツールのようなものです。ただし、優れたコードは非常に無料であり、下位互換性のためにいくつかの癖があるため、優れたコードを作成するスキルが必要です。実際には、スクリプトを除くあらゆる種類のソフトウェアに適していると思います。問題は学習曲線です。最新のライブラリでは、生産性においても非常に有能です。そして、アプリが成功した場合、それを移植する必要があると思います。C / C ++コードベースを使用すると、移植が容易になります。コンパイラの可用性が向上します。C ++で記述されたソフトウェアのリストは無限大です:アマゾン、グーグル、Dropboxの、電気通信、ゲーム、Facebookの...
ヘルマン・Diago

-4

いいえ、すべての非Direct3D Windows Phone 8アプリ C#で開発する必要があるため、C ++でC#を置き換えることはできません。C ++またはHTML5 / Javascriptを使用するだけでは、アプリケーションを開発してwp8アプリストアに公開することはできません。また、Microsoftがこの制限を解除しない限り、C ++は何も置き換えません。その結果、WP8向けに開発する人はほとんどいないと確信しています。貧しいノキア、もう一度負けた。

マイクロソフト開発センターからの抜粋は次のとおりです。

Windows Phone 8は、WindowsストアアプリでサポートされているC ++コードビハインドアプリモデルでのXAML UIをサポートしていません。

さらに別の:

これは、C ++とXAMLを使用してWindows PHone 8でアプリを開発できないことを意味しますか?C#+ XAMLの使用に制限されていますか?

それは正しいです。XAMLはC#でのみ使用できます。C ++プロジェクトは、C#プロジェクトで使用されるWinRTコンポーネントに使用できます。

マイクロソフトのMVPでさえ、この噂はマイクロソフト自身による意図的な誤報であると主張しています。

MicrosoftがWinRTとWindows Phone 8で行っていることは気に入っていますが、問題の完全な真実を知ってしまえばユーザーをいらいらさせてしまうので、それを売り過ぎないことを望みます。

そして、この意図的な誤ったマーケティングは人々の数ヶ月を無駄にします:

Metroアプリですべてのネイティブコードのルートをたどる前に、この1か月前を知っていれば良かったと思います。


1
リンクには、WP8開発にC ++を使用できることが記載されており、C#を必要とするのはXAMLのみです。さらに、Direct3DはC ++でのみサポートされています。
リー

@ Lee、WP8用のC#を使用せずに、Direct3D以外のアプリを開発できますか?
Özgür
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.