Mengapa sebagian besar program Linux ditulis dalam bahasa C?


30

Mengapa sebagian besar program Linux ditulis dalam bahasa C? Mengapa tidak ditulis dengan C ++, yang lebih baru?


14
C++lebih baru dari C, tapi itu agak tidak relevan. Mereka adalah bahasa yang berbeda.
Mat

6
Anda mungkin harus menanyakan ini di StackOverflow atau Programmer (di mana topik sebenarnya sudah dibahas dengan baik ).
rozcietrzewiacz

4
@ Mat Yah, itu tidak sepenuhnya benar, karena C ++ adalah superset dari C. Anda dapat memprogram dalam C dan mengompilasinya dengan kompiler C ++. Ini akan dikompilasi dan berfungsi seperti yang diharapkan.
polemon

8
@polemon: itu tidak benar, ada yang tidak kompatibel. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Jawaban:


37

Sudah banyak diskusi tentang ini. Terutama, alasannya adalah alasan filosofis. C diciptakan sebagai bahasa sederhana untuk pengembangan sistem (tidak begitu banyak pengembangan aplikasi). Ada banyak argumen untuk menggunakan C ++, tetapi ada sekitar banyak untuk tidak menggunakan C ++ dan menempel C.

Pada akhirnya, ini adalah masalah sejarah. Sebagian besar aplikasi ditulis dalam bahasa C, karena sebagian besar Kernel ditulis dalam bahasa C. Dan sejak saat itu kebanyakan aplikasi ditulis dalam bahasa C, orang cenderung menggunakan bahasa aslinya.

Pada titik ini, seseorang mungkin bertanya "OK, jadi mengapa kernel ditulis dalam C dan tidak porting ke C ++?" . Ini sudah dibahas di kerneltrap beberapa waktu lalu. Satu penjelasan bagus yang dapat dikutip dari utas ini adalah tanggapan oleh yoshi314 (mengutip langsung):

itu karena hampir setiap aplikasi c ++ memerlukan pustaka c ++ standar yang terpisah untuk beroperasi. jadi mereka harus mem-port-nya ke kernel, dan mengharapkan overhead tambahan di mana-mana.

c ++ adalah bahasa yang lebih kompleks dan itu berarti kompiler membuat kode yang lebih kompleks darinya. karena itu, menemukan bahwa masalah berasal dari bug kompiler, daripada kesalahan kode lebih mudah di c.

juga c bahasa lebih barebone, dan lebih mudah untuk mengikuti representasi majelisnya, yang seringkali mudah diprediksi.

c ++ lebih fleksibel, tetapi c lebih cocok untuk hal-hal tingkat rendah atau tertanam.


Di sisi lain, "sebagian besar program Linux" cukup menyesatkan. Lihatlah aplikasi grafis. Python mendapatkan semakin banyak tanah terutama di lingkungan GUI di Linux. Tentang hal yang sama yang terjadi dengan Windows dan .NET.


3
Selain itu, C memiliki ABI yang stabil dan dapat dengan mudah dicolokkan ke bahasa lain melalui FFI asli mereka sementara C ++ tidak memiliki ABI yang dapat dibaca manusia dan g ++ memiliki perubahan dalam ABI. Oleh karena itu perpustakaan cenderung ditulis dalam C daripada C ++. Karena Anda ingin memiliki satu bahasa dalam proyek, begitu pula program yang dibundel dengan perpustakaan. (Setidaknya itu adalah cerita dengan Gnome).
Maciej Piechotka

@MaciejPiechotka Semua ini benar, dan ini adalah diskusi yang bagus, tetapi c tidak memiliki ABI yang jelas , kecuali bahwa seringkali ada cara "jelas" untuk mengerjakan sesuatu di setiap platform. Setelah itu ikuti pemimpinnya.
dmckee

@ dmckee: Saya belum menyatakan telah distandarisasi tetapi C API pada setiap platform mengikuti aturan sederhana tertentu (termasuk tidak ada atau mangling minimal) yang jarang berubah - yang membuatnya berguna untuk tujuan bahkan jika tidak 100% benar.
Maciej Piechotka

2
Saat ini, Anda juga dapat mempertimbangkan bahwa ... * semua yang dapat Anda lakukan di C Anda juga dapat melakukannya di C ++ dengan cara yang hampir sama, pikirkan juga "extern C" ... * kompiler tidak akan membuat kode yang lebih rumit jika Anda tidak menulis kode yang lebih rumit ... * Anda dapat menulis hal-hal barebone yang sama di C ++ ... * Anda dapat menautkan dan menggunakan perpustakaan C ++ dari C. Pada akhirnya ini adalah masalah yang cukup historis.
Zrin

7

Setelah membaca email berikut dari Linus Torvalds pencipta linux. Saya tidak tahan untuk berpikir bahwa jawaban di atas salah. Dia tampaknya berpikir bahwa programmer C ++ bukan programmer sistem yang baik . Dan bahwa fitur tambahan dalam C ++ sering menyebabkan lebih banyak masalah dalam jangka panjang dibandingkan dengan manfaat yang mereka bawa dalam jangka pendek. Walaupun orang mungkin tidak setuju dengannya, sulit untuk melebih-lebihkan pengaruh yang dimilikinya terhadap sistem operasi linux.

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


Sial, itu berbahaya
AFP_555
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.