4

プログラムが OS に依存しないと言うとき、正確には何を意味するのでしょうか? プロセッサが同じであれば、どの OS でも実行できるということですか。

たとえば、OpenGL は OS に依存しないライブラリです。含まれる関数は、特定のプロセッサを想定している必要があります。しかし、OS固有のコード/プログラム/アプリケーションではありませんか?

私が学んだことは次のとおりです。

  1. OS はプロセッサ固有です。

  2. アプリケーション (プログラム/コード/ルーチン/関数/ライブラリ) は OS 固有です。

  3. ソース コードはプレーン テキストです。


  4. コンパイラ (プログラム) は OS 固有ですが、同じ OS を前提として異なるプロセッサ用のソース コードをコンパイルできます。

  5. OpenGL はライブラリです。

したがって、OpenGL は OS/プロセッサ固有でなければなりません。どうすれば OS に依存しませんか?

OSに依存しないのはソースコードです。これは正しいです?

ソースコードが OS に依存しないかどうかを知ることは、どのように役立ちますか?

4

4 に答える 4

6

プログラムが OS に依存しないと言うとき、正確には何を意味するのでしょうか? プロセッサが同じであれば、どの OS でも実行できるということですか。

プログラムが定義済みの動作のみを使用する場合 (未定義、未指定、または実装定義の動作はありません)、プログラムは言語標準 (この場合は C 言語標準) によってコンパイルされ (標準準拠のコンパイラを使用)、すべてのオペレーティング システムで均一に実行されます。システム。

基本的に、C のような言語標準や OpenGL のようなライブラリ標準は、プログラマーが作成および構築できる最小限の想定可能な保証のセットを提供することを理解する必要があります。これらは、コンパイラが標準に準拠しており (ライブラリの場合、実装は標準に準拠しています)、プログラムが未定義の動作領域に足を踏み入れていない限り、変更されません。

openGL は OS/プロセッサー固有でなければなりません。どうすれば OS に依存しませんか?

いいえ。OpenGL はプラットフォームに依存しません。OpenGL の実装(呼び出しを実装するドライバー) は、明らかにプラットフォームおよび GPU 固有です。C標準は、Cコードをコンパイルできるすべての異なるコンパイラ実装であるGCC、MSVC ++などによって実装されているとします。

OSに依存しないのはソースコードです。これは正しいです?

ソース コード (移植性を考慮して作成されている場合) は、そのようなプラットフォームに依存しないエンティティの 1 つにすぎません。ライブラリ (OpenGL など)、フレームワーク (.NET など) などもプラットフォームに依存しません。さらに言えば、ハードウェアでさえ、誰かが仕様を作成し、他の誰かが実装することができます.ARMプロセッサは、ARMによって策定され、Qualcomm、TIなどのOEMによって実装された標準/仕様です.

プロセッサが同じであれば、どの OS でも実行できるということですか。

プログラムの構築にクロスプラットフォームコンポーネントのみを使用する限り、プロセッサとプラットフォーム (OS) はどちらも問題ではありません。移植可能な言語である C を使用しているとします。SDL、ウィンドウの作成、イベントの処理、フレームバッファなどのためのクロスプラットフォーム ライブラリ。クロスプラットフォームのグラフィック ライブラリである OpenGL。これで、プログラムは複数のプラットフォームで実行されますが、それでも最も弱いリンクに依存します。SDL が一部の J2ME のみの電話で実行されない場合、そのプラットフォーム用のライブラリ ディストリビューションがないため、アプリケーションはそのプラットフォームでは実行されません。プラットホーム; ある意味で、すべてが独立しているものはありません。そのため、さまざまなアーキテクチャ、プラットフォーム、コンパイラなどで利用可能なさまざまなライブラリを試してから、ターゲットとするプラットフォームに基づいて必要なものを選択するのが賢明です。

于 2013-10-11T06:01:02.533 に答える
0

それらの1つ:

  1. ソース コードを変更することなく、プログラム フレームワークでサポートされている任意の OS でコンパイルできます。(機械語に直接コンパイルされる C++ などの言語)
  2. プログラムは、インタープリター言語またはプラットフォームに依存しないバイトコードにコンパイルされる言語で記述されており、インタープリターがサポートするプラットフォームであれば、変更なしで実際に実行できます。(Java や Python などの言語)。
  3. アプリケーションは、オペレーティング システム固有の呼び出しを抽象化するある種のクロスプラットフォーム フレームワークに依存しています。フレームワークがサポートするすべての OS で変更なしで実行できます。

言語タグを追加していないため、言語に応じて #1、#2、または #3 のいずれかになります。

- 編集 -

OS はプロセッサ固有です。

いいえ。Linux を参照してください。同じコード ベースをさまざまなアーキテクチャ用にコンパイルできます。通常、OS カーネルは移植可能な言語 (C など) で書かれており、異なる CPU 用に再構築できます。gentoo のようなディストリビューションでは、ソースから OS 全体を再構築することもできます。

アプリケーション (プログラム/コード/ルーチン/関数/ライブラリ) は OS 固有です。

いいえ、java *.jar ファイルのようなアプリケーションは、多かれ少なかれ OS に依存しないようにすることができます。インタープリターがある限り、どこでも実行できます。OS 固有の部分 (Java の場合の Java ランタイム環境など) がありますが、プログラムはこの部分が存在する場所ならどこでも実行されます。

ソース コードはプレーン テキストです。

必ずしもそうではありませんが、ほとんどの場合はそうです。

コンパイラ (プログラム) は OS 固有ですが、同じ OS を前提として異なるプロセッサ用のソース コードをコンパイルできます。

そうではありません。コンパイラを別の OS 用に再構築できるように、(ある程度) 移植可能なコードを使用して記述することは合理的です。OS A で実行中に、OS B 用のコードをコンパイルすることが (場合によっては) 可能です。Linux では、Windows プラットフォーム用のコードをコンパイルできます。

OpenGL はライブラリです。

そうではない。これは、3D グラフィックスを操作するための一連のプログラミング関数を記述した仕様 (API) です。この仕様を実装するライブラリがあります。仕様自体はライブラリではありません。

したがって、OpenGL は OS/プロセッサ固有でなければなりません。

誤った結論。

どうすれば OS に依存しませんか?

基盤となるプラットフォームが標準準拠の OpenGL 実装を備えている限り、プログラムのレンダリング部分は、標準準拠の OpenGL 実装を備えた他のプラットフォームと同じように機能します。それは携帯性です。もちろん、これは理想的な状況ですが、実際にはドライバーのバグなどに遭遇する可能性があります。

于 2013-10-11T05:17:20.753 に答える