ここ数年、ネイティブ C++ プログラマーとして働いています。今、私たちはゼロから新しいプロジェクトを始めています。では、プラットフォームに依存しないコードを犠牲にして C++\CLI に移行することについてどうお考えですか。C++\CLI に移行することで得られる特別な利点はありますか?
8 に答える
C++、C#、および .NET での私の経験に基づいて、次のことをお勧めします。
- .NET を使用する場合は、C# を使用してください。
- .NET が必要ない場合は、従来の C++ を使用してください。
- 従来の C++ と .NET コードを橋渡しする必要がある場合は、C++/CLI を使用してください。.NET 呼び出し C++ クラスと C++ 呼び出し .NET クラスの両方で動作します。
必要がなければ C++/CLI を使うだけでは意味がありません。
切り替える前に考慮すべきいくつかの質問:
[1] Windowsにこだわって大丈夫ですか? 他の OS 用の .NET クローンがありますが、アプリは単に透過的に実行されるわけではありません。あなたが必要としないかもしれない複雑さ。
[2] ガベージ コレクションのサポートのためだけに切り替えを検討していますか? その場合は、いくつかの C++ ガベージ コレクター ライブラリを使用できます。また、std::shared_ptr を活用する方法がわかれば、ガベージ コレクターの必要性を感じなくなるかもしれません。必要のないオーバーヘッド。
[3] ガベージ コレクションと活用できるすべての便利な .NET クラスのために、C++/CLI を検討していますか? もしそうなら、C# に切り替えてみませんか。C++/CLI は過渡的なテクノロジであり、そのようなものにリソースを投資しないことが最善です。c# はかなり成熟し、使いやすくなっています。
個人的には、C++ に固執します ;)。
あなたに何かメリットはありますか?別の OS に切り替えることができなくなる可能性があります。
C++/CLI に移行する主な利点は、.NET ライブラリとフレームワーク自体 (ガベージ コレクションなど) にアクセスできることです。ただし、私が知る限り、C++/CLI が存在する主な理由は、既存の C++ コードを簡単に移植して .NET フレームワークで実行できるようにするためです。新しいプロジェクトでは、C# を使用することをお勧めします。
既存の C++ コードを .NET フレームワークと混合して使用する必要がある場合は、C++/CLI を使用するのが理にかなっていますが、一般的には C# から始める必要があります。
新しいプロジェクトで広範囲に使用する必要があるものが .NET にある場合 (より単純な GUI 設計など)、C# を使用します。そうでない場合は、ネイティブ C++ を使用してください。そうすることで損をすることはないと思います。
.NET アプリと統合する場合を除き、気にする必要はありません。STL/CLR のパフォーマンスは本当にひどいので、絶対に使用しないでください。
そのスイッチを切り替えて .NET クラス ライブラリを使用したくなりますが、別の方法があります。これを行うと、コードを簡単に移植できなくなります。
また、OSS の台頭が増加しているようにも見えるので、今こそクロスプラットフォームのライブラリとツールを使用して調査する時期かもしれません。Linux アプリは Windows アプリよりもはるかに簡単に展開でき (完全に構成された OS を出荷することで!)、Linux クライアントを展開すると (無料であるため) ROI が大幅に向上します。
もし私がビジネスマンだったら、少なくとも Windows だけではなく、Linux や Mac に展開できる機能を探しているでしょう。戦略的に言えば、世界が 5 年後も Microsoft にとどまっているとは言いたくありません。
次の 2 つの記事をご覧ください。
C++/CLI は「C++ の拡張機能のセット」ではなく (多くの点で実際には C++ のサブセットです)、セミコロンを使用する他のどの言語よりも C++ に関連していないことを確信していると思います。と中括弧。さらに、C++/CLI は間違いなく Windows 指向のプログラミング言語です。Solaris 10 サーバーや Nokia 携帯電話が喜んで実行できる言語ではないことは間違いありません。C++ と何の関係があるのでしょうか?
C++/CLR を使用する主な欠点の 1 つは、コードが十分に隠されていないと IP (知的財産) が失われる可能性があることです。一般的に、私はここで他のメンバーが行った声明に同意します. MS .net vm に依存しない移植可能なコードが必要な場合は、ネイティブ C/C++ が最適です。