ほとんどのLinuxプログラムがCで書かれているのはなぜですか?


30

ほとんどのLinuxプログラムがCで書かれているのはなぜですか?なぜ新しいC ++で書かれていないのですか?


14
C++はより新しいですがC、それは少し無関係です。それらは異なる言語です。
マット

6
StackOverflowまたはProgrammersでこれを尋ねる必要があります(実際には、トピックは既に十分に説明されています)。
rozcietrzewiacz

4
@Matさて、C ++はCのスーパーセットであるため、完全に正しいわけではありません。Cでプログラミングし、C ++コンパイラでコンパイルできます。コンパイルされ、期待どおりに動作します。
ポレモン

8
@polemon:それは間違っています、非互換性があります。en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
マット

回答:


37

これについては多くの議論がありました。主に、理由は哲学的なものです。Cは、システム開発用の単純な言語として開発されました(アプリケーション開発ではありません)。C ++を使用するための多くの引数がありますが、せず、Cに固執すること。

最後に、それは歴史的な問題です。ほとんどのアプリケーションはCで記述されています。これは、ほとんどのカーネルがCで記述されているためです。当時、ほとんどのものはCで記述されていたため、人々は元の言語を使用する傾向があります。

この時点で、誰かが「OK、それではなぜカーネルがCで書かれており、C ++に移植されていないのか」と尋ねるかもしれません。。これは少し前にkerneltrapで議論されました。このスレッドから引用できる素晴らしい説明の1つは、yoshi314による応答です(直接引用)。

これは、ほぼすべてのC ++アプリが動作するために個別のC ++標準ライブラリが必要だからです。したがって、彼らはそれをカーネルに移植しなければならず、どこでも余分なオーバーヘッドを期待します。

c ++はより複雑な言語であり、それはコンパイラがより複雑なコードを作成することを意味します。そのため、cではコードエラーよりもコンパイラーのバグに起因する問題を発見する方が簡単です。

また、c言語はよりベアボーンであり、アセンブリ表現に従うのが簡単です。アセンブリ表現はしばしば予測しやすいです。

c ++はより汎用性がありますが、cは低レベルまたは組み込みのものにより適しています。


一方、「ほとんどのLinuxプログラム」は非常に誤解を招くものです。グラフィカルアプリケーションをご覧ください。Pythonは、特にLinux上のGUI環境でますます広まっています。Windowsと.NETで起こっているのと同じことについて。


3
さらに、Cには安定したABIがあり、ネイティブFFIを介して他の言語に簡単にプラグインできますが、C ++には人間が読めるABIがなく、g ++にはABIに変更がありました。したがって、ライブラリはC ++ではなくCで作成される傾向がありました。プロジェクトに1つの言語が必要なため、ライブラリにバンドルされているプログラムもそうでした。(少なくともそれはGnomeの話でした)。
マチェイピエチョトカ

@MaciejPiechotkaこれはすべて真実であり、素晴らしい議論ですが、cには定義済みのABIがありません。ただし、各プラットフォームで物事を処理するための「明白な」方法がしばしばあります。その後、リーダーに従います。
dmckee

@dmckee:標準化されているとは言いませんが、各プラットフォームのC APIは、ほとんど変更されない特定の単純なルール(マングリングなしまたは最小限を含む)に従うため、100%正しくなくても目的に役立ちます。
マチェイピエチョトカ

2
最近では、次のことも考慮することができます... * Cでできることはすべて、C ++でもほぼ同じ方法で行うことができます。また、「外部C」と考えてください... *コンパイラは、もっと複雑なコードを書くことはありません... * C ++で同じベアボーンを書くことができます... * CからC ++ライブラリをリンクして使用することができます。最終的にはかなり歴史的な問題です。
ズリン14

7

Linuxの作成者であるLinus Torvaldsからの次のメールを読んだ後。上記の答えが間違っていると思わずにはいられません。彼は、C ++プログラマは優れたシステムプログラマではないと考えているようです。また、C ++の追加機能は、短期的に得られる利点と比較して、長期的にはより多くの問題を引き起こすことがよくあります。彼に反対するかもしれませんが、彼がLinuxオペレーティングシステムに与えた影響を誇張するのは困難です。

http://harmful.cat-v.org/software/c++/linus


くそー、それは有害だった
AFP_555
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.