Почему большинство программ для Linux написаны на C?


30

Почему большинство программ для Linux написаны на C? Почему они не написаны на C ++, который новее?


14
C++новее C, но это не имеет значения. Это разные языки.
Мат

6
Вы, вероятно, должны спросить об этом в StackOverflow или Программистах (где эта тема уже была хорошо освещена ).
rozcietrzewiacz

4
@ Mat Ну, это не совсем правильно, так как C ++ является надмножеством C. Вы можете программировать на C и компилировать его с помощью компилятора C ++. Он скомпилируется и будет работать как положено.
Полемон

8
@polemon: это неправильно, есть несовместимости. ru.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Мат

Ответы:


37

Там было много дискуссий по этому поводу. В основном причина философская. C был изобретен как простой язык для разработки системы (не столько разработка приложений). Есть много аргументов в пользу использования C ++, но их примерно столько же, чтобы не использовать C ++ и придерживаться C.

В конце концов, это историческая проблема. Большая часть содержимого приложения написана на C, потому что большая часть содержимого ядра написана на C. И с тех пор большая часть содержимого была написана на C, люди склонны использовать исходные языки.

В этот момент кто-то может спросить: «Хорошо, так почему же ядро написано на C, а не портировано на C ++?» , Это было обсуждено на kerneltrap некоторое время назад. Одно хорошее объяснение, которое можно процитировать из этой ветки, - это ответ yoshi314 (цитирование напрямую):

это потому, что почти каждому приложению c ++ для работы нужна отдельная стандартная библиотека c ++. поэтому им придется перенести его в ядро ​​и ожидать дополнительных затрат везде.

С ++ - более сложный язык, и это означает, что компилятор создает из него более сложный код. из-за этого обнаружение того, что проблема связана с ошибкой компилятора, а не с ошибкой кода, легче в c.

Кроме того, язык c более скромен, и легче следовать его представлению на ассемблере, что часто легко предсказать.

C ++ более универсален, но c больше подходит для низкоуровневых или встроенных вещей.


С другой стороны, «большинство программ для Linux» вводит в заблуждение. Посмотрите на графические приложения. Python становится все более и более популярным, особенно в средах с графическим интерфейсом в Linux Примерно то же самое, что происходит с Windows и .NET.


3
Кроме того, C имеет стабильный ABI и может быть легко подключен к другим языкам через их собственный FFI, в то время как C ++ не имеет удобочитаемого ABI, а g ++ имел изменения в ABI. Поэтому библиотеки, как правило, пишутся на C, а не на C ++. Потому что вы хотите иметь один язык в проекте, так же как и программы, связанные с библиотекой. (По крайней мере, это была история с Gnome).
Мацей Пехотка

@MaciejPiechotka Все это правда, и это хорошее обсуждение, но c не имеет определенного ABI , за исключением того, что часто существует «очевидный» способ работать на каждой платформе. После этого следуйте за лидером.
dmckee

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

2
В настоящее время вы также можете учитывать, что ... * все, что вы можете делать в C, вы также можете делать в C ++ почти таким же образом, думайте также "extern 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.