Чому більшість програм 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, оскільки більшість матеріалів у kernel написано на C. І оскільки тоді більшість матеріалів було написано на С, люди прагнуть використовувати оригінальні мови.

У цей момент хтось може запитати "Добре, так чому ядро написано на C, а не перенесено на C ++?" . Про це обговорювалося в ядрі пастки деякий час тому. Одне приємне пояснення, яке можна цитувати з цієї теми, - це відповідь yoshi314 (цитуючи безпосередньо):

це тому, що майже кожному додатку c ++ для роботи потрібна окрема стандартна бібліотека c ++. тож їм доведеться перенести його до ядра і очікувати додаткових накладних витрат скрізь.

c ++ є більш складною мовою, і це означає, що компілятор створює з неї більш складний код. через це виявити, що проблема випливає з помилки компілятора, а не помилка коду легше в c.

Також мова c є більш босоніжною, і її легше дотримуватися її складання, що часто передбачити.

c ++ є більш універсальним, але c більше підходить для низького рівня або вбудованих речей.


З іншого боку, "більшість програм Linux" є досить оманливими. Погляньте на графічні програми. Python отримує все більше місця, особливо в середовищі GUI в Linux. Приблизно те саме, що відбувається з Windows і .NET.


3
Крім того, C мають стабільний ABI і їх можна легко підключити до інших мов через їх рідну FFI, тоді як C ++ не має читабельних для людини ABI, а g ++ змінився в ABI. Тому бібліотеки, як правило, записуються на C, а не на C ++. Тому що ви хочете мати одну мову в проекті, так і програми, що входять до бібліотеки. (Принаймні, це була історія з Гном).
Maciej Piechotka

@MaciejPiechotka Все це правда, і це приємна дискусія, але c не має визначеного ABI , за винятком того, що часто існує "очевидний" спосіб роботи над кожною платформою. Після цього слід за лідером.
dmckee

@dmckee: Я не заявляв, що він стандартизував, але C API на кожній платформі дотримується певних простих правил (включаючи відсутність або мінімальне керування), які рідко змінюються - що робить його корисним для цілей, навіть якщо не на 100% правильних.
Maciej Piechotka

2
Сьогодні ви також можете врахувати, що ... * все, що ви можете зробити в C, ви також можете зробити в C ++ приблизно так само, подумайте також "зовнішній C" ... * компілятор не складе більш складний код, якщо Ви не пишете більш складного коду ... * Ви можете писати ті самі речі безхребкової кістки в C ++ ... * Ви можете зв’язати та використовувати бібліотеки C ++ від C. Зрештою, це досить історична проблема.
Зрін

7

Прочитавши наступне повідомлення від Лінуса Торвальда, творця Linux. Я не можу не думати, що відповідь, наведена вище, є невірною. Він, здається, вважає, що програмісти на C ++ не є хорошими системними програмістами. І що додаткові можливості в C ++ часто спричиняють більше проблем у довгостроковій перспективі порівняно з вигодами, які вони приносять за короткий термін. Хоча хтось може погодитися з ним, важко перебільшувати вплив, який він мав на операційну систему Linux.

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


Чорт, це було шкідливо
AFP_555
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.