Tại sao hầu hết các chương trình Linux được viết bằng C?


30

Tại sao hầu hết các chương trình Linux được viết bằng C? Tại sao chúng không được viết bằng C ++, cái mới hơn?


14
C++là mới hơn C, nhưng đó là một chút không liên quan. Chúng là những ngôn ngữ khác nhau.
Mat

6
Bạn có thể nên hỏi điều này tại StackOverflow hoặc Lập trình viên (nơi chủ đề đã thực sự được bao phủ một cách độc đáo ).
rozcietrzewiacz

4
@Mat Vâng, điều đó không hoàn toàn chính xác, vì C ++ là siêu bộ của C. Bạn có thể lập trình trong C và biên dịch nó với trình biên dịch C ++. Nó sẽ biên dịch và làm việc như mong đợi.
Polemon

8
@polemon: không chính xác, có sự không tương thích. vi.wikipedia.org/wiki/Compabilities_of_C_and_C%2B%2B
Mat

Câu trả lời:


37

Đã có nhiều cuộc thảo luận về điều này. Chủ yếu, lý do là một triết lý. C được phát minh như một ngôn ngữ đơn giản để phát triển hệ thống (không phát triển ứng dụng quá nhiều). Có nhiều đối số để sử dụng C ++, nhưng có nhiều như vậy cho không sử dụng C ++ và dính vào C.

Cuối cùng, đó là một vấn đề lịch sử. Hầu hết các công cụ ứng dụng được viết bằng C, bởi vì hầu hết các công cụ Kernel được viết bằng C. Và kể từ đó, hầu hết các công cụ được viết bằng C, mọi người có xu hướng sử dụng các ngôn ngữ gốc.

Tại thời điểm này, ai đó có thể hỏi "OK, vậy tại sao kernel được viết bằng C và không được chuyển sang C ++?" . Điều này đã được thảo luận trên kerneltrap một thời gian trước đây. Một lời giải thích hay có thể được trích dẫn từ chủ đề này là phản hồi của yoshi314 (trích dẫn trực tiếp):

đó là bởi vì gần như mọi ứng dụng c ++ đều cần một thư viện chuẩn c ++ riêng để hoạt động. vì vậy họ sẽ phải chuyển nó sang kernel và mong đợi thêm chi phí ở mọi nơi.

c ++ là ngôn ngữ phức tạp hơn và điều đó có nghĩa là trình biên dịch tạo mã phức tạp hơn từ nó. do đó, việc phát hiện ra rằng một vấn đề bắt nguồn từ lỗi trình biên dịch, thay vì lỗi mã dễ dàng hơn trong c.

Ngoài ra, ngôn ngữ c có nhiều barebone hơn và việc theo dõi đại diện lắp ráp của nó dễ dàng hơn, điều này thường dễ dự đoán.

c ++ linh hoạt hơn, nhưng c phù hợp hơn với các công cụ lowlevel hoặc nhúng.


Mặt khác, "hầu hết các chương trình Linux" là khá sai lệch. Hãy xem các ứng dụng đồ họa. Python ngày càng có cơ sở hơn, đặc biệt là trong môi trường GUI trên Linux. Về điều tương tự đang xảy ra với Windows và .NET.


3
Ngoài ra, C có ABI ổn định và có thể dễ dàng cắm vào các ngôn ngữ khác thông qua FFI bản địa của họ trong khi C ++ không có ABI có thể đọc được của con người và g ++ có những thay đổi trong ABI. Do đó, các thư viện có xu hướng được viết bằng C thay vì C ++. Bởi vì bạn muốn có một ngôn ngữ trong dự án nên các chương trình đi kèm với thư viện. (Ít nhất đó là một câu chuyện với Gnome).
Maciej Piechotka

@MaciejPiechotka Tất cả điều này là đúng và đó là một cuộc thảo luận tốt, nhưng c không có ABI xác định , ngoại trừ việc thường có một cách "rõ ràng" để làm việc mọi thứ trên mỗi nền tảng. Sau đó, nó đi theo người lãnh đạo.
dmckee

@dmckee: Tôi chưa nói rằng nó đã được chuẩn hóa nhưng API C trên mỗi nền tảng tuân theo các quy tắc đơn giản nhất định (bao gồm cả không hoặc xáo trộn tối thiểu) mà hiếm khi thay đổi - điều này hữu ích cho mục đích ngay cả khi không chính xác 100%.
Maciej Piechotka

2
Ngày nay, bạn cũng có thể xem xét rằng ... * mọi thứ bạn có thể làm trong C bạn cũng có thể làm trong C ++ theo cách tương tự, hãy nghĩ "extern C" ... * trình biên dịch sẽ không tạo mã phức tạp hơn nếu bạn không viết mã phức tạp hơn ... * bạn có thể viết cùng một nội dung barebone trong C ++ ... * bạn có thể liên kết và sử dụng các thư viện C ++ từ C. Cuối cùng, đây là một vấn đề khá lịch sử.
Zrin

7

Sau khi đọc email sau đây từ Linus Torvalds, người tạo ra linux. Tôi không thể nghĩ rằng câu trả lời ở trên là không chính xác. Ông dường như nghĩ rằng lập trình viên C ++ không phải là lập trình viên hệ thống tốt . Và rằng các tính năng bổ sung trong C ++ thường gây ra nhiều vấn đề hơn trong dài hạn so với lợi ích mà chúng mang lại trong thời gian ngắn. Mặc dù người ta có thể không đồng ý với anh ta, nhưng thật khó để nói quá tầm ảnh hưởng của anh ta đối với hệ điều hành linux.

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


Chết tiệt, điều đó có hại
AFP_555
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.