質問

特定のシナリオで使用することが望ましい言語が常にありました。迅速なプロトタイプ開発には、VB6が当然の選択でした。 VB6は、シンプルなデスクトップユーザーインターフェイスと、標準的で複雑でないデータベースインタラクション要件を持つプロジェクトで選択されました。低レベルのルーチンを使用してデバイスドライバーを開発する場合は、おそらくCまたはVisual C ++に依存しています。 ASPは、Webインターフェイスの開発のための標準的な選択肢でした。すべての言語には特定の「ドメイン」または「専門化」があり、大雑把に言えば。

.NETフレームワークでは、すべての言語が相互運用可能であり、おそらく一貫性があります。異なる言語のモジュールをすべて一緒に使用したプロジェクトを作成できますが、最終的にはすべて同様に処理されます(すべてILにコンパイルされます)。

これは、以前の区別が存在しなくなったことを意味しますか?その差別化は必ずしも悪いものではなく、設計によるものであり、制約によるものではありませんでした。 .NETフレームワークとさまざまな言語の処理により、明らかにそれはいくらか減少します。

役に立ちましたか?

解決

言語の違いは残ります。言語をアセンブリコードにコンパイルしてもMSILにコンパイルしても、MSILの抽象化レベルがアセンブリの抽象化レベルよりも高い場合を除き、実際には違いはありません。

以前、電気自動車や自動車が登場する前は、DLLで明示的にラップせずに(そして注意を払って)、PascalまたはDelphiアプリケーションでC生成の.objファイルを単純に使用することはできませんでした。呼び出しメソッドとパラメーターシーケンスおよびパラメーターの互換性)、または別の実行可能ファイルへの呼び出し。

他のヒント

違いはまだ存在します。たとえば、VB.NETは現在、C#(C#4.0を除く)よりも優れた方法でIDispatchレイトバインディングをサポートしており、VB.NETには他の.NET言語と比較してXMLを操作するための便利なツールとなるコードとインラインのXMLリテラルがあります。 C ++は、C ++ / CLIバリアントを使用しても、.NETにあまり適さない傾向がありますが、ネイティブプログラミング(いつものように)およびマネージコードとアンマネージコード間の相互運用層を提供するには優れています。

すべての言語の構文にはニュアンスがあり、特定の概念を簡単に表現できます。それらがすべてILに煮詰められたとしても、それらがすべてアセンブリに煮詰められたときと以前と同じです。コンパイル先のプラットフォームに関係なく、実行しようとしているタスクに最適な構文の言語を選択します。

いいえ、フレームワークの機能は言語機能と同じではありません。 .Netが言語の区別を削除したと言うことは、アセンブリコードが言語の区別を削除したというようなものです。

言語にはまださまざまな機能がありますが、一部の言語の構文はいくつかの問題を解決するのに適しています。

どちらかといえば、言語間の区別を強調した可能性があると思います。正確に 相互運用性が高いからです。現在、焦点は言語にあります。

同じ基本サービスと基本クラスが利用可能であるという事実は、フレームワークが言語と提携しているものではなく、言語が提供するものに基づいて、言語について賢明な決定を下せることを意味します。

たとえば、レイトバウンドCOMを使用する場合、(しぶしぶ)VBを選択するかもしれません(またはC#4.0を待つかもしれません)。いくつかの特定の財務/シミュレーション作業については、F#について真剣に考えるかもしれません。通常のビジネスプログラミングの場合、私が自由に選択できるのはC#です。

ただし、さまざまなブロックに適した言語に基づいてこれらの選択を行い、完成したアプリをさまざまな言語のさまざまなdllから組み合わせることもできます。以前は、 x の言語を使用して残りのコードと相互運用させるために、持っているため、コードの一部と戦わなければならなかったかもしれません。

それは、質問が出されるコンテキストに本当に依存すると思います。

顧客が使用するライブラリを開発しているとしましょう。このアセンブリを CLSCompliant 属性でマークします。これは、コンパイラがCLRによって保証されている機能を使用するように強制し、言語固有の機能を使用するとコンパイルに失敗することを意味します。

CLS準拠ライブラリが検討されている場合、.NETは言語間の区別を削除します。すべての.NET言語はCLSに準拠している必要があるため、すべての.NET言語を等しくサポートすることが保証されます。

今、VB .NETでライブラリを作成していて、メソッドのオーバーロードではなくオプションのパラメーターを使用することにしたとします。この場合、オプションパラメータはCLSに準拠していないため、.NETは言語間の区別を強調しています(ただし、C#は明らかに.NET 4.0でサポートしていますが)。不可能またはせいぜい使いにくい。各言語にはCLSに準拠していない機能がいくつかあります。これらの機能を使用すると、一部の.NET言語のユーザーがライブラリを使用しにくくなる可能性があります。

だから、それはトリックの質問のように感じます。 CLS準拠のコードを記述している場合、.NET言語間の構文の違いのみがあります。そうでない場合は、一部の.NET言語で使用できないメソッドを作成できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top