2

これはばかげた質問かもしれませんが、ポータブルとマシン非依存の間で混乱しています。Java、c#.net とは: ポータブルまたはマシンに依存しない?

4

4 に答える 4

3

マシンの独立性

マシン非依存性とは、実行するマシンに関係なく実行できるソフトウェアの概念を指します。マシン依存ソフトウェアの一部は、特定のアーキテクチャに固有のアセンブリ命令など、使用するために書かれたものである可能性があります。たとえば、SIMD 命令などの特別なプロセッサ命令に依存するインライン アセンブリを使用して C++ アプリケーションを作成する場合、特定のマシン要件があるため、そのソフトウェアはマシンに依存します。その特定の必要な SIMD 命令セット。

対照的に、C# と Java は、仮想マシンによって実行されるバイトコードにコンパイルされます。仮想マシンは、そのバイトコードを受け取り、プロセッサ上で直接ネイティブ コードとして実行します。この場合、仮想マシンはマシンに依存します。これは、仮想マシンが作成された特定のハードウェア (たとえば、32 ビット Intel プロセッサのみ、または ARM スマートフォンなど) に対して実行されるためです。ただし、仮想マシン上で実行される Java および C# アプリケーションは、基盤となるプラットフォームに変換する仮想マシンが存在する限り、基盤となるプラットフォームが何であるかを気にしないため、マシンに依存しません。その抽象化レイヤーである仮想マシンは、アプリケーションを基盤となるハードウェアから分離するのに役立ちます。これが、これらのアプリケーションがマシンに依存しない理由です。.

携帯性

移植性は、独立しているが関連する概念であり、多くの可能性をカバーする広い用語です。ソフトウェアの一部は、ビルドして実行できる場合、または複数のプラットフォームで単純に実行できる場合にのみ、移植可能です。これは、マシンに依存しないソフトウェアは本質的に移植可能であることを意味します。

移植性には、ハードウェアの移植性とソフトウェアの移植性という 2 つの側面があります。Mono などの .NET 実装を当面無視し、純粋に Microsoft の .NET 実装に焦点を当てると、.NET ランタイムをサポートする任意のハードウェアで実行できるため、.NET はハードウェア ポータブルであると言っても過言ではありません。 Windows および Windows 系のオペレーティング システムで利用できますが、特にソフトウェアの移植性は高くないと言っても過言ではありません。Mono がないと、Mac OS X または Linux では実行できません。対照的に、Java は、Windows、OS X、Linux などの複数のオペレーティング システムで実行できるため、ハードウェア ポータブルおよびソフトウェア ポータブルの両方であると言えます。つまり、ソフトウェア ポータブルであり、ARM などのさまざまなハードウェア アーキテクチャで実行できるため、ハードウェア ポータブルです。 、

最後に、言語の移植性の問題もあります。多くの人は、Windows 用にコンパイルされた C++ アプリケーションは Linux でネイティブに実行されませんが、同じソース コード セットを Linux と Windows の両方で変更なしでコンパイルできるように C++ コードを記述することは可能であると主張します。つまり、これはつまり、そのままコンパイルするだけで、同じアプリケーションを別のオペレーティング システムに移植できます。この点で、コンパイルされた C++ アプリケーションは移植可能ではありませんが、C++ アプリケーションのソース コードは移植可能であると言えます。これは、C を含む他の多くの言語にも当てはまります。

免責事項

これはやや単純化された説明であり、これらのルールを破る多くのエッジ ケースがあり、非常に複雑で主観的な問題になります。たとえば、Java ネイティブ インターフェイスを使用する場合、マシンに依存する Java アプリケーションを作成することが可能です。

于 2013-05-14T14:00:28.910 に答える
1

ポータブルとは、インストールせずにこのプログラムを実行できることを意味します。

マシンに依存しないということは、同じコードを異なる OS で実行できることを意味します。

この質問も役に立ちます。

于 2013-05-14T13:16:26.090 に答える
1

PORTABLE と Machine Independent の違いは何ですか?

これに対する本当の答えはありません。それは、「ポータブル」および「マシンに依存しない」の定義を受け入れることを選択したかによって異なります。(同意できる定義を 2 つ選んで比較することはできますが、それは客観的ではないと思います。)


Java、c#.net とは: ポータブルまたはマシンに依存しない?

Java と C# は移植性がなく、マシンに依存しないと主張することもできます。

  • Java または C# プログラムは、JVM または CLR 実装、およびそれぞれの標準ライブラリの「準拠」実装を備えたプラットフォームでのみ実行されます。したがって、言語はマシンに依存しません (文字通りの意味で)。

  • Java/C# の異なる実装で異なる動作をする Java (そして確かに C#) プログラムの例はたくさんあります。ランタイム ライブラリやホスト オペレーティング システムの違いが原因である場合があります。プログラマー側の無効な仮定が原因である場合もあります。ただ、Java/C#ソフトは移植作業が必要な場合が多いのがポイントです。したがって、それらは移植性がありません (文字通りの意味で)。

于 2013-05-14T13:45:21.207 に答える