Neden çoğu Linux programı C dilinde yazılmıştır?


30

Neden çoğu Linux programı C dilinde yazılmıştır? Neden daha yeni olan C ++ ile yazılmıyorlar?


14
C++daha yeni C, ama bu biraz alakasız. Onlar farklı diller.
Mat

6
Muhtemelen bunu StackOverflow veya Programmers'ta (konunun gerçekten güzel bir şekilde ele alındığı ) sormalısınız .
rozcietrzewiacz

4
@Mat Tamamen doğru değil, çünkü C ++ C'nin bir süpersetidir. C de programlayabilir ve bir C ++ derleyicisi ile derleyebilirsiniz. Derlenecek ve beklendiği gibi çalışacaktır.
polemon

8
@polemon: bu yanlış, uyumsuzluklar var. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Yanıtlar:


37

Bununla ilgili birçok tartışma oldu. Esas olarak, sebep felsefidir. C sistem gelişimi için basit bir dil olarak icat edildi (çok fazla uygulama geliştirme değil). C ++ birçok tartışma vardır, ancak bir çok yaklaşık vardır değil C ++ ve C yapışmasını

Sonunda, bu tarihsel bir konudur. Çoğu uygulama maddesi C dilinde yazılmıştır, çünkü çoğu Çekirdek maddesi C dilinde yazılmıştır. Ve o zamandan beri çoğu madde C dilinde yazılmıştır, insanlar orijinal dilleri kullanma eğilimindedir.

Bu noktada birileri "Tamam, öyleyse çekirdek neden C dilinde yazılmış ve C ++ 'a taşınmıyor?" Diye sorabilir. . Bu bir süre önce kerneltrap üzerinde tartışıldı . Bu konudan alıntılanabilecek güzel bir açıklama yoshi314'ün verdiği bir cevaptır (doğrudan alıntı yapmak):

çünkü hemen hemen her c ++ uygulamasının çalışması için ayrı bir c ++ standart kütüphanesine ihtiyacı vardır. bu yüzden onu çekirdeğe taşımak zorunda kalacaklar ve her yere fazladan bir ek yük bekleyeceklerdi.

c ++ daha karmaşık bir dildir ve bu, derleyiciden ondan daha karmaşık bir kod oluşturduğu anlamına gelir. bu nedenle, bir sorunun kod hatası yerine derleyici hatasından kaynaklandığını bulmak c.

Ayrıca c dili daha fazla barebone ve tahmin edilmesi kolay olan meclis temsilini takip etmek daha kolay.

c ++ daha çok yönlüdür, ancak c düşük seviyeli veya gömülü şeyler için daha uygundur.


Öte yandan, "Linux programlarının çoğu" oldukça yanıltıcıdır. Grafik uygulamalara bir göz atın. Python, özellikle Linux'taki GUI ortamlarında gittikçe daha fazla zemin kaplıyor. Windows ve .NET ile olanlarla ilgili.


3
Ek olarak C, stabil ABI'ye sahiptir ve kendi dillerinde FFI yoluyla diğer dillere kolayca takılabilirken, C ++ 'in insan tarafından okunabilir ABI'sı yoktur ve g ++' nun ABI'de değişiklikleri vardır. Bu nedenle kütüphaneler C ++ yerine C dilinde yazılma eğilimindeydi. Çünkü projede bir dilin olmasını istediğiniz gibi programlar kütüphaneyle birlikte de verildi. (En azından bu Gnome ile bir hikaye).
Maciej Piechotka

@ MaciejPiechotka Bütün bunlar doğrudur ve hoş bir tartışmadır, ancak c'nin her platformda işleri yapmanın "açık" bir yolu olması dışında, tanımlanmış bir ABI'si yoktur . Bundan sonra lideri takip edin.
dmckee

@dmckee: Standart hale getirmediğini belirtmedim ancak her platformdaki C API nadiren değişen bazı basit kurallara uyuyor (az veya az yönetim dahil) - bu da% 100 doğru olmasa bile bu amaç için yararlı oluyor.
Maciej Piechotka

2
Günümüzde, şunu da düşünebilirsiniz ... * C'de yapabileceğiniz her şeyi aynı şekilde C ++ 'da da yapabilirsiniz, ayrıca "harici C" düşünün ... ... * derleyici daha karmaşık kod yapmaz. daha karmaşık bir kod yazmazsınız ... * C ++ ile aynı barebone karakterlerini yazabilirsiniz ... * C ++ kitaplıklarını C'den bağlayabilir ve kullanabilirsiniz. Sonunda bu oldukça tarihi bir konudur.
Zrin

7

Aşağıdaki e-postayı Linus Torvalds'dan okuduktan sonra linux'un yaratıcısı. Yukarıdaki cevabın yanlış olduğunu düşünmeden edemiyorum. C ++ programcılarının iyi sistem programcıları olmadığını düşünüyor . Ve C ++ 'daki ekstra özelliklerin genellikle kısa vadede getirdikleri faydalara kıyasla uzun vadede daha fazla soruna neden olması. Birisi onunla aynı fikirde olmasa da, linux işletim sistemi üzerindeki etkisinin fazla abartılması zor.

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


Kahretsin, bu zararlı oldu
AFP_555
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.