0

どの言語が最適かについての一般的な意見を探しています。多くの考慮事項に関して最高です。

私は、c、c++、および Objective-C のかなりのバックグラウンドを持っています。私はこれら3つに非常に満足しています。私はC#をほとんど使用していません。私は 10 年以上にわたってファームウェアとミドルウェアに携わってきましたが、最近はモバイル アプリに移行しています。主に iOS ですが、現在は Windows RT に拡張されています。

私は、会社の Windows ストア (または呼び方によっては Metro) 用のバージョンのアプリを作成しようとしています。数か月前に、C++/CX を使用して概念実証を行いました。それを習得する上でのハードルはほとんどありませんでした (ref クラスの構文、および名前空間の多用) が、それは過去のことであり、現時点では非常に快適に感じています。

私が見つけたいくつかの欠点は、.net の例 (MSDN とプライベートの両方) のほとんどが c# にあり、c++ にあるものは少ないということでした。また、C++ を使用した .net フレームワークに関する質問への回答を得るのは少し難しいように思われました。ほとんどの場合、人々は ac# の回答を投稿し、私はそれを同等の c++ に移植する必要があります。これは簡単な場合もあれば、より難しい場合もあります。

私の質問は次のとおりです。私の時間と私の会社の時間は、C++ を続けるのではなく、C# からやり直す価値があるでしょうか? C# を手に入れる必要がありますが、それが大きな負担になるとは考えていません (実際に楽しみにしています)。いくつかの懸念は次のとおりです。当社は間もなく成長します。c# と MS の特殊な c++/cx を知っているエンジニアを見つけるのは簡単ですか? * 例、記事、およびフォーラムによるヘルプの取得の容易さ。C# がはるかに一般的である場合、それは便利です。* サード パーティ ライブラリ間の互換性 (WinRT コンポーネントはどの主要言語からでも使用できるようです) * C++ に対する C# の利点は? 両方とも、このアプリに必要なものをすべて提供してくれます。少なくとも、私が見ることはできます。C# の落とし穴にはどのようなものがありますか? * c# は、C++/CX と同じ方法で非同期プログラミングに継続/ラムダを使用しますか?

私が考えていない他の長所/短所はありますか?

どう思いますか?また、あなたは何を経験していますか?なぜあなたはあなたの答えを支持しますか?

4

1 に答える 1

1

C# のほうがオンライン サポート (コード例、質問への回答) が充実しており、エンジニアの基盤も強力です。つまり、この特定の状況では、この種の Microsoft API に強く依存するソフトウェア開発についてです。Windows Store は Microsoft の全体的な戦略において非常に重要であり、C# は言語戦略において C++ よりも重要です。したがって、C# は適切に適合します (IMO)。


*編集 (Filip Skakun) 質問を再度開くのは難しいかもしれないので、個別に回答することはできませんが、役立つ可能性のあるこのテキストをすべて入力したので、以下に追加すると思いました:

もちろん、決定するのはあなた次第であり、あなたが何を信じているかによっては、非常に主観的な選択になる可能性があります。メタルと、(少し主観的に) より移植性の高い、既にご存知の C++ です。C++ は、tiobe インデックスに基づく言語のほぼ 2 倍の人気があるため、C++ 開発者を獲得することは、C# 開発者よりも簡単かもしれません。C++/CX は、クロスアセンブリ通信と WinRT ライブラリとの通信にのみ使用する必要があるものですが、それ以外のコーディングは、すべての専門家の推奨事項に基づいて標準 C++ で行う必要があります。また、C++/CX はマネージ言語ではないため、.NET では使用しないことに注意してください。マネージ言語である C++/CLI と構文は非常に似ています。WinRT の良い点は、必要に応じて両方の言語を使用できることです。私はすべての XAML UI、ネットワーク、ビジネス ロジックなどに C# を使用しています。XAML で C# を使用するためのサンプルはたくさんありますが、C++ は WinRT を使用する XAML プラットフォームでのみ使用可能になり、推奨されるようになったため、限られた範囲のものしかありません。一方、DirectX や CPU を集中的に使用するタスクなどの低レベルのタスクについては、C++ を使用します。オープンソースの .NET ラッパーよりも直接 DirectX に関するドキュメントの方が多く、すべてを絞り出したい場合にはパフォーマンスが向上するためです。 CPU の潜在的な電力を使用するか、バッテリーからのエネルギーを最小限に抑えます。XAML で C# を使用するためのサンプルはたくさんありますが、WinRT を使用する XAML プラットフォームでのみ使用可能になり、推奨されるようになったため、C++ のサンプルの範囲は限られています。一方、DirectX や CPU を集中的に使用するタスクなどの低レベルのタスクについては、C++ を使用します。オープンソースの .NET ラッパーよりも直接 DirectX に関するドキュメントの方が多く、すべてを絞り出したい場合にはパフォーマンスが向上するためです。 CPU の潜在的な電力を使用するか、バッテリーからのエネルギーを最小限に抑えます。XAML で C# を使用するためのサンプルはたくさんありますが、WinRT を使用する XAML プラットフォームでのみ使用可能になり、推奨されるようになったため、C++ のサンプルの範囲は限られています。一方、DirectX や CPU を集中的に使用するタスクなどの低レベルのタスクについては、C++ を使用します。オープンソースの .NET ラッパーよりも、直接的な DirectX に関するドキュメントの方が多く、すべてを絞り出したい場合にはパフォーマンスが向上するためです。 CPU の潜在的な電力を使用するか、バッテリーからのエネルギーを最小限に抑えます。

C# は、句読点が少ない C++ よりも少しきれいな言語であり、非同期呼び出しを行う新しい async/await キーワード (Windows 8 アプリで使用する必要があります) がはるかにきれいです。これはマネージ言語でもあるため、ほとんどの場合、メモリが解放されるタイミングやバッファ オーバーランなどを気にする必要はありません。C# コードをデバッグすると、C++ よりも決定論的な結果が得られます (いくつかの C++ コードをデバッグするのに 2 日間費やしましたが、まだ実行していません)。バグを見つけるのにどれだけ進んでいるかわかりません)。デバッグが非常に簡単になるため、レガシー コードの維持も容易になります。

C++ は高速であるため、バッテリーの使用量も少なくて済みます。アプリケーションの起動が速くなり、消費電力が少なくなる可能性があります。すでによく知っている場合は、管理された開発の群衆がアプリを構築するよりも有利な場合があります。ガベージ コレクションを使用しないため、メモリ管理がより決定論的で軽量になり、アニメーションがより滑らかになります。

次に、モチベーション要因もあります。本当に C# を学びたいのであれば、既に知っている言語よりも楽しく、意欲的で生産的な C# を学ぶことができ、別の C++ アプリを書くよりも喜んでより多くの時間を C# の学習に費やすことになるでしょう。

基になる WinRT ライブラリは、使用する言語に関係なく同じですが、.NET ライブラリは .NET コードでのみ使用でき、標準 C++ ライブラリはネイティブ コードでのみ使用できます。

最後に、どのような決定を下したとしても、いつでも両方の言語を混在させることができます。将来コードを保守する人は両方の言語を知る必要がある可能性があり、混合言語プラットフォームは非常に古く、ツールによるサポートがわずかに少ないため、メンテナンスコストが追加される可能性があります (たとえば、マネージド + ネイティブの混合リモートデバッグを行うことはできません)。 )そして潜在的にもっとバグがあります。ただし、前述の理由から、多くの場合、これは非常に良い選択です。

于 2012-12-14T20:31:29.160 に答える