ネイティブC ++からC ++ \ CLIへのシフトを推奨しますか? [複製]
質問
この質問にはすでに回答があります:
私はここ数年、ネイティブC ++プログラマーとして働いています。今、私たちはゼロから新しいプロジェクトを始めています。プラットフォームに依存しないコードを失うという犠牲を払ってC ++ \ CLIに移行することについてのあなたの考えは何ですか。 C ++ \ CLIに移行することで得られる特別な利点はありますか?
解決
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]ガベージコレクション&のため、C ++ / CLIを検討していますか?活用できるすべての便利な.NETクラスはありますか?その場合は、単にc#に切り替えないでください。 C ++ / CLIは移行技術であり、そのようなことにリソースを投資しないことが最善です。 c#はかなり成熟して使用可能になっています。
個人的には、C ++に固執します;)。
あなたに何か利益はありますか?別のOSに切り替えることができなくなる可能性があります。
.NETアプリと統合しない限り、気にしないでください。 STL / CLRのパフォーマンスは本当にひどいので、確かにSTL / CLRは使用しないでください。
.NETクラスライブラリを使用するようにそのスイッチを切り替えることは魅力的ですが、代替手段もあります。これを行うと、コードをそれほど簡単に移植できなくなります。
OSSの台頭も増加しているようですので、今はクロスプラットフォームのライブラリとツールを使用して調査する時期かもしれません。 Linuxアプリは、Windowsよりもはるかに簡単に展開できます(完全に構成されたOSを出荷することによって!)。Linuxクライアントを展開すると(無料である場合)、ROIが大幅に向上します。
私がビジネスマンであれば、少なくともWindows専用ではなく、LinuxまたはMacに展開する機能を求めています。戦略的には、5年後に世界がMicrosoftにとどまるとは言いたくありません。
C ++ / CLIに移行する主な利点は、.NETライブラリとフレームワーク自体(ガベージコレクションなど)にアクセスできることです。ただし、C ++ / CLIが存在する主な理由は、既存のC ++コードの移植を容易にして.NETフレームワークで実行できるようにすることです。新しいプロジェクトではC#を使用することをお勧めします。
既存のC ++コードを.NETフレームワークと混合して使用する必要がある場合は、C ++ / CLIを使用するのが理にかなっていますが、一般的にはC#から始める必要があります。
.NETに新しいプロジェクトで広範囲に使用する必要があるものがある場合(おそらく、よりシンプルなGUIデザインなど)、C#を使用します。そうでない場合は、ネイティブC ++を使用してください。そうすることで何かを失うとは思わない。
これら2つの記事をご覧ください:
今までにあなたは 私はC ++ / CLIがそうであると確信しています 「C ++の拡張機能セット」も (多くの面で、実際には C ++のサブセット)、または関連もありません C ++が他のどの言語よりも優れている セミコロンと中括弧。 さらに、C ++ / CLIは間違いなく Windows指向のプログラミング言語。 それは間違いなく言語ではありません Solaris 10サーバーまたはNokiaモバイル 電話は喜んで走ります。何をする C ++と関係がありますか?
C ++ / CLRを使用する主な欠点の1つは、コードが不明瞭にならない場合、IP(知的財産)が失われる可能性があることです。一般に、他のメンバーがここで行った声明に同意します。 MS .net vmに依存しない移植可能なコードが必要な場合は、ネイティブC / C ++が最適です。