6

.NET は、言語に依存しないプラットフォームです。

しかし、それはプラットフォームに依存しませんか? どのように ?

編集:.NET 4.0 は、プラットフォームの独立性を考慮して開発されていると聞きました。もしそうなら、それがJavaを引き継ぐことを願っています!

編集: 答えは、Windows プラットフォームの .NET や Java の Mono など、「プラットフォーム」を定義する方法によって異なります。

しかし、問題は、OS に依存しない一般的な開発プラットフォームがないことです。

OS の非依存性はプラットフォームの非依存性に関連していますか?

4

15 に答える 15

19

「プラットフォーム」をどのように定義するかが問題です。

たとえば、.NET はプラットフォームが .NET である限りプラットフォーム非依存であり、プラットフォームが Java である限り Java はプラットフォーム非依存です。つまり、.NET (および Java)、部分的には、それ自体がプラットフォーム (CLR、JVM) です。特定の物理プラットフォームで利用可能なそのプラットフォームの実装がある限り、はい、コンパイルされたコードをその上で個別に実行できます。

結局のところ、「プラットフォームの独立性」は、「一度書けば、どこでも実行できる」のと同じように、マーケティングです。しかし実際には、現在、.NET よりもはるかに具体的なプラットフォームで使用できる JVM 実装があります (ただし、Mono プロジェクトなどのイニシアチブはそれを変更することを目指しています)。

于 2010-09-07T08:05:43.797 に答える
10

この質問に答えるには、最初に CLI と .NET を明確に区別する必要があると思います。

  • CLI ( Common Language Infrastructureの略) は標準であり、ほとんどプラットフォームに依存しないように設計されています。ここで、プラットフォームとは、オペレーティング システムを含む、基盤となるコンピューター アーキテクチャを指します。

    標準では、すべてのアーキテクチャに実装できない特定のものが必要になる可能性がありますが (組み込みシステムなど、非常に限られたプラットフォームを考えています)、これらはおそらくエッジ ケースと見なすことができます。

  • .NETは、Microsoft の主要な CLI 実装であり、Windows システムでのみ実行されます。したがって、.NET はプラットフォームに依存しません。

    更新 (2015 年 8 月) : 2014 年末に、Microsoft は、.NET Framework の一部 (特にサーバー側アプリケーションに関連する部分) を段階的にオープンソース化する計画を発表しました。その結果が、.NET Foundationによる.NET Coreです。

  • .NET Coreは、CLI のクロスプラットフォーム実装を意図しています。

  • Monoも CLI の実装ですが、Linux や Windows などのさまざまなプラットフォームで動作するように設計されています。Mono は、.NET よりも明らかにプラットフォームに依存しません。


次に、コンパイラの出力のバイナリ互換性の問題があります。CLI 標準では、アセンブリに使用するファイル形式 (PE 実行可能ファイルの形式) と中間コード言語 (CIL と呼ばれる) が定義されているため、VB.NET、C#、およびその他の言語で記述されたコンポーネントをソース コードに自由に混在させることができます。CILにコンパイルされています。

その意味で、CLI (およびそれに準拠する .NET などのすべての実装) は言語に依存しません。

興味深いことに、Microsoft の .NET コンパイラを使用して何かをコンパイルできます。また、標準で規定されている一般的なアセンブリ ファイル形式により、Mono プロジェクトでアセンブリを使用できます (その逆も可能です)。この意味で、.NETコンパイラ ツールチェーンはプラットフォームに依存しないと見なすことができますが、.NET自体はそうではありません。.NET Framework には、Windows を対象とした標準ライブラリも含まれていることに注意してください (たとえば、WPF を考えてみてください)。

于 2010-09-12T10:01:30.340 に答える
5

ウィキから取得:

  • いいえ。DotNet はプラットフォームに依存しません。
  • Microsoft .NET は Windows でネイティブに動作します。ただし、オープン ソースの実装である Mono を使用すると、オープン ソース システムで実行できます。ただし、すべての .NET クラスをサポートしているわけではないため、そこで何かが完全に実行されるとは思わないでください。
  • ご存知のように、.NET には C# - CSC VB - VBC などのさまざまなコンパイラがあります。コードがコンパイルされると、独立した MSIL コードに変換されます。この MSIL コードは CLR に移動され、この CLR はプラットフォームに依存します。つまり、Unix プラットフォームの場合は Unix タイプの CLR が必要です。Windows の場合も同じように、.NET コードはプラットフォームに依存しないと言えます。
于 2010-09-07T07:55:25.517 に答える
3

質問の意味がわかりませんが、.NETアプリケーションがどのOSでも実行できるかどうかを知りたい場合は、答えはノーです。

.NET Frameworkは、Windowsなどの一部のオペレーティングシステムのみを対象としています。Linux上のMonoなど、他のプラットフォームでは他のプロジェクトを利用できます。

于 2010-09-07T07:51:50.193 に答える
2

「モノ」と呼ばれるクロスプラットフォームの実装があります。Microsoftからの元の.NETリリースはWindowsのみです。

モノラルプロジェクトの詳細:http://en.wikipedia.org/wiki/Mono_Project

于 2010-09-07T07:52:55.000 に答える
2

DotNet はプラットフォームに依存しないか、部分的に独立している可能性がありますが、Java は JVM (Java 仮想マシン) により完全にプラットフォームに依存しません。Javaの独立性を理解するための最良の例は、「車」の電子レンジ、洗濯機、またはJVM(Java仮想マシン)がインストールされている場合はいずれかのコンピューターでJavaプログラムを実行できます。Java バイトコードは独立しており、Mac、Windows、Unix を問わず使用できます。

于 2014-08-20T06:10:12.257 に答える
1

Linuxにはいくつかの.net実装があり、おそらく他のシステムでもコンパイルされるでしょう。
それはモノと呼ばれています。

于 2010-09-07T07:52:09.337 に答える
1

Monoは .NET のクロス プラットフォーム実装ですが、Microsoft によってサポートされておらず、いくつかの機能がありません。

于 2010-09-07T07:51:17.513 に答える
1

.Net は、.Net 2.0 を使用している限り、MacOSX と Linux で正常に動作します。LINQ、C# 3.0 などのいくつかの新しい機能も実装されています。ファイル パス、ファイルのアクセス許可などは、異なるプラットフォームで 100% 同様に機能しないことを考慮する必要があります。

私がMonoについて話していることを忘れていました。

于 2010-09-07T08:08:53.577 に答える
0

.NET プログラミング言語のコンパイル中に、ソース コードは、プラットフォームまたはプロセッサ固有のオブジェクト コードではなく、CIL コードに変換されます。CIL は、Windows 上の .NET ランタイムやクロスプラットフォームの Mono ランタイムなど、共通言語インフラストラクチャをサポートする任意の環境で実行できる、CPU およびプラットフォームに依存しない命令セットです。理論的には、これにより、プラットフォームや CPU の種類ごとに個別のバイナリを配布する必要がなくなります。CIL コードは実行時に安全性が検証され、ネイティブにコンパイルされたバイナリよりも優れたセキュリティと信頼性を提供します。実行プロセスは次のようになります。ソース コードは、CPU のアセンブリ言語に相当する CLI の Common Intermediate Language に変換されます。次に、CIL がバイトコードにアセンブルされ、.NET アセンブリが作成されます。.NET アセンブリの実行時に、そのバイトコードはランタイムの JIT コンパイラを介して渡され、ネイティブ コードが生成されます。(事前コンパイルでは、実行時にこの手順が省略されます。) ネイティブ コードは、コンピューターのプロセッサによって実行されます。ただし、Microsoft は .NET で実行されるいくつかの改善を行いました。これは特に Windows 用に収集され、Mono (Linux ベースの対応物) ははるかに遅れています。

于 2010-09-07T10:57:24.713 に答える
0

ご存じのように、.NET はフレームワーク 4.0 を使用していました。そのため、記述されたコード (ソース コード) はバイト コードに変換されます。その変換は、MSIL (Microsoft Intermediate Language) を通じて行われます。MSIL は、ソース コードを実行コードにコンパイルする特別な種類のコンパイラです。どのプラットフォームが実行またはサポートされているか。したがって、MSIL .NET 言語の使用により、クロス プラットフォーム言語になります。

于 2014-06-04T04:19:29.490 に答える
0

.NET は、OS の複数のバージョン/フレーバーで実行できるため、プラットフォームに依存しません (例: MONO は、多くの一般的なオペレーティング システムでさまざまな .Net フレームワーク バージョンを実行します。http://mono-project.com/Compatibility を参照してください) 。

于 2010-09-07T11:42:58.927 に答える
0

.NET はプラットフォーム依存です。コードが記述されると、プラットフォームに依存しない Microsoft Intermediate Language (MSIL) コードにコンパイルされますが、半分コンパイルされたコードであり、共通言語ランタイム (CLR) によってデバイス固有のコードに変換されます。プラットフォームに依存します (MSIL は CLR を介して JIT に送信されます。実行時に、すべてのメモリ割り当ては JIT によって行われます)。

于 2014-05-12T16:18:22.403 に答える