オープンソース プロジェクトが大騒ぎしているにもかかわらず、移植可能なコードを作成できるようにする強力な標準がまだ存在しないのはなぜですか (またはC/C++
ないという意味Java
ですC#
)。
のようなサードパーティのライブラリもありますApache Portable Runtime
。
7 に答える
はい、標準はありませんが、Qtやboostなどのライブラリを使用すると、クロスプラットフォーム開発を行う際の作業がはるかに簡単になります。
wxwidgets は、ほとんどのウィンドウ マネージャーのネイティブ GUI ウィジェットの優れた抽象化レイヤーです。
クロスプラットフォーム開発を容易にするライブラリはたくさんありますが、すべてのプラットフォーム用の完全なラッパーを作成すると、最終的には小さくて高度にカスタマイズされているか、大規模で完全にばかげています。
論理的な結論として、オペレーティング システムのすべての側面に対する完全なラッパーは、完全な仮想ランタイムになります。独自のプログラミング言語を作成することもできます。
ADAPTIVE Communication Environment (ACE)は優れたオブジェクト指向フレームワークであり、スレッド、ソケット、ミューテックスなどのすべての低レベル OS 機能にクロスプラットフォーム サポートを提供します。これは、膨大な数のコンパイラとオペレーティング システムで実行されます。
言語としての C および C++ は標準言語です。コーディング時にルールに厳密に従う場合 (つまり、ベンダー固有の拡張機能を使用しないことを意味します)、コードは移植可能であり、任意の OS 上の最新のコンパイラでコンパイルできるはずです。
ただし、C および C++ には Java や C# のような GUI ライブラリはありませんが、ポータブル GUI アプリケーションを作成できる無料または商用の GUI ライブラリがいくつか存在します。
最も人気があるのはQt (商用) とwxWidgets (FOSS)だと思います。ウィキペディアによると、他にもたくさんあります。
ブーストもありますが、GUI ライブラリではありませんが、ブーストは C++ の STL を非常によく補完します。実際、ブースト ライブラリのいくつかは、次の C++ 標準に追加される予定です。
誰もが同意する単一のライブラリがない主な理由は、すべての人の要件が異なるためだと思います。システム ライブラリをラップする場合は、ラッパーを巨大にして作業を不可能にしたい場合を除き、ユース ケースがどうなるかについていくつかの仮定を立てる必要があることがよくあります。それが、単一の共通のクロスプラットフォーム ランタイムがない主な理由かもしれないと思います。
GUI の場合、各プラットフォームには独自の UI 規則があるため、すべてに適合する 1 つの GUI をコーディングすることはできません。
GCCとMSVC++の両方でクリーンにコンパイルされることを確認すれば、他の場所に移植するのに少し余分な労力がかかります。