誰かが Linux カーネルを gcc 以外のコンパイラでコンパイルできたのではないかと思います。または、誰かが試したことがある場合は?質問はばかげているか学術的なように思えるかもしれませんが、次の質問への回答を考えたときに浮かびました。
一部の操作の原子性は、CPU アーキテクチャだけでなく、使用するコンパイラにも依存しているようです。では、Linux の世界には gcc 以外のコンパイラが存在するのだろうか。
誰かが Linux カーネルを gcc 以外のコンパイラでコンパイルできたのではないかと思います。または、誰かが試したことがある場合は?質問はばかげているか学術的なように思えるかもしれませんが、次の質問への回答を考えたときに浮かびました。
一部の操作の原子性は、CPU アーキテクチャだけでなく、使用するコンパイラにも依存しているようです。では、Linux の世界には gcc 以外のコンパイラが存在するのだろうか。
Linux は一部のgcc 拡張機能に明示的に依存しているため、他のコンパイラは必要な拡張機能と互換性がある必要があります。
もちろん、別のコンパイラ ベンダー/開発者が gcc の拡張機能を追跡することは不可能ではないため、これは「いいえ」ではありません。検索に役立つデータ ポイントにすぎません。
LLVM開発者は、これをclangでコンパイルしようとしています。clang を使用して Linux カーネルをコンパイルする際のメタバグには、より詳細な情報があります (そのメタバグの依存関係ツリーは、ほとんど残っていないように見えることを示しています)。
うん。私はこれをやった。[cfe-dev] Clang が動作する Linux カーネルを構築する (SMP、ネットワークおよび X、セルフ ホストを使用して RL5 を起動) を参照してください。
IBM のコンパイラーは Linux の一部のバージョンより前にそれを行うことができましたが、現在のことはわかりませんし、IBM がカーネルを指示どおりに最適化したかどうかもわかりません。私が知っているのは、彼らがそれを構築したということだけです。
Linux はセルフホスティング (独自の libc を使用) であり、最初から gcc (および gcc クロスコンパイラ) で開発されているため、他のものを使用するのはばかげています。
GNUは基本的に上記の本を書き、それを拡張したので、主に、プリプロセッサマクロと指示された最適化でうまく遊ぶことが最大の障害であると思います(ガスからの逸脱にさえなりません)。さらに、Linux は gcc で動作するように最適化を調整しています。インラインを使用し、実際にコンパイラーに同意させることは、別の課題です。
Linus は、GCC を &*#$ ホールと呼んだ最初の人であり、これにより、より優れたコンパイラが作成されます。
これが、GNU/Linux に関する大きな議論がある理由です。
何年も前に、カーネルを g++でコンパイルすることは実際に可能でした。私が覚えている限りでは、動機の一部は C++ がより強力な型チェックを持っていたためであり、必ずしも g++ を使用してオブジェクト ファイルを生成する必要はありませんでした。しかし、Neil Butterworth が指摘したように、Linus は特に C++ が好きではなく、これが再び可能になる可能性はゼロです。
私はちょうど今、MIPS アーキテクチャ用に Open64 を使用して Linux カーネルをコンパイルする作業を行っています。また、他の何人かは、Open64 を X86 アーキテクチャ用にビルドできるようにする作業を行っています。これで、カーネルは部分的に実行できるようになりましたが、まだ実行失敗エラーが発生しています。
しかし、アトミックな問題については、少なくとも私は思いつきませんでした。そして、それが本当に問題だとは思いません。理由は次のとおりです。
Linux カーネルはすでにソース コードのコレクションであり、GCC で正常にビルドできます。したがって、ビルドできないか、ビルドされたカーネルの実行が失敗する場合は、コンパイラの問題だけです。
コンパイラが Linux カーネルを正常にビルドしたい場合は、GNU C 拡張に従う必要があります。この拡張は、アトミック操作とは何かを明確に説明するため、そのようなコンパイルでは、この拡張に従ってコードを生成するだけで済みます。
EKOPath 4 Compiler、今はありません。しかし、おそらくいくつかのマイナーなパッチが適用されています
私の非技術的な推測: Linux カーネルは現在 ( 2009 年)、GNU コンパイラー以外のコンパイラーgccでコンパイルできません。
これは、Richard Stallman が、 LinuxはGNU/Linuxと呼ばれるべきだと確信を持って言っているのを聞いたことに基づいています。なぜなら、カーネルは「オペレーティング システムのほんの一部」だからです。カーネルが GNU に依存していない場合 (たとえば、大量の組み込みデバイスが GNU ソフトウェアなしで Linux OS を実行している場合) は、これを言ってください。
私が言ったように、ただの推測です、私が間違っていたら教えてください...