2

C ++のみを使用して完全なC++標準ライブラリ(もちろんSTLを含みますが、自己完結型で、内部依存関係のみ)を作成することは可能ですか?コンテナーと<cstdlib>機能は、s、ビットシフト、forループ、その他のバイトの凝ったものの観点から実行可能だと思いcharますが、例外のようなもので、そもそも依存関係がなければ難しいようstd::coutstd::cin思えます。(C汚染を回避するために)アセンブリで完全に実装された一連のOS機能が利用可能であるとしましょう。

コンパイラは、クラスや仮想関数からテンプレートや関数のオーバーロードまで、すべてを理解していると思います。これらは言語レベルのものであり、ライブラリIMHOにはありません。

これが以前に尋ねられた、または些細な愚かな質問である場合は、私を許してください。私はここでC<->C ++戦争を始めようとしているのではなく、標準ライブラリなどの獣を実装することの限界を理解しようとしているだけです...

ありがとう!

4

4 に答える 4

6

C で書かれたものはほとんどすべて C++ でかなり簡単に書き直すことができるため、アセンブリ コードが必要かどうかを尋ねると、答えは通常いいえです。

組み込みプログラミングについて話している場合を除き、オペレーティング システムには必要なファイルと I/O 機能がすべてシステム コールを通じて (現在では) C 形式で提供されています。ライブラリは、おそらくextern "C"{ ... }宣言を通じてそれらを呼び出す必要があります。オペレーティング システムの関数は C++ ライブラリの一部とは見なされず、通常、C++ 標準で定義されているものと完全に一致するわけではありません。

C++ 標準ライブラリを実装するには、言語自体に精通し、使用する OS 呼び出しを理解し、使用するアルゴリズムを持っている必要があります。その時点で、ソフトウェアを作成するのは比較的単純な問題です。

于 2010-12-06T15:03:04.843 に答える
3

まず、C、C++、D のいずれであっても問題ありません。最後にコンパイル可能なプログラミング言語を使用すると、(ほとんどの場合) 同じアセンブリ オブジェクト ファイルが得られます。

次に、STL は C++ で書かれているため、C やその他の言語で C++ ライブラリを作成することはできません (まあ、可能ですが、合理的な解決策について話していると思います)。テンプレートを強く使用しているため、C で STL コンテナーを実装することはできません。

GCC は、例外に対して asm で非常に優れた出力を生成するようになりました。C++ ABI について読むことをお勧めします (興味がある場合)。

C++ コンパイラは、最近では非常に優れた C++ 固有の機能をすべて理解します。非常に高度なコード分析と最適化のおかげで、高速な実行可能ファイルを生成できます (最初の段落を参照)。

あなたの質問に少なくとも部分的に答えたことを願っています。

于 2010-12-06T15:08:14.053 に答える
1

アセンブリが必要な C++ の部分は、例外処理だけです。必要なレジスタとスタック管理を処理するライブラリが存在する場合、C++ で実行できる可能性があると思います。

もちろん、これらのライブラリにはアセンブリが含まれます。レジスタを直接管理する方法は他にありません。

于 2010-12-06T17:00:13.420 に答える
1

#includeSTL は、 ed ヘッダー ファイルに大きく依存しています。それらはほとんどC++でなければなりません。

これらのヘッダー ファイルのいずれにも含まれていないものは、理論上は C、Ada、Assembly、または選択した他のシステム プログラミング言語で実装できます。ただし、少なくとも最上位レイヤーを C++ にしない場合は、おそらく 2 つのインターフェイスを維持する必要があります。

于 2010-12-06T15:03:54.560 に答える