Много системных вызовов в перегрузке использования Unix и переменных по умолчанию. Это понятие отсутствует в C, таким образом, Unix кодируется в C++ также право?
Unix был впервые создан в Bell Labs в 1969 году, задолго до появления C ++. (Источник: Unix ), вы можете подтвердить это, прочитав Комментарий Льва к Unix или BSD 4.4-Lite (который аналогичен BSD Net / 2 ), который доступен в tarball или через cvs (из FreeBSD). Или архивы из The Unix Heritage Society , которые относятся к очень старым версиям Bell Labs / AT&T.
Бьярн Страуструп создал C ++ примерно в 1983 году, до этого он работал над « C с классами », согласно History of C ++ . Подтверждено из FAQ Бьярна Страуструпа, а самой ранней датой для C с классами был 1979 год.
Я надеюсь, что это проясняет невозможность идеи, что Unix был основан на C ++. Обратите внимание, что объектно-ориентированные языки существуют с 1960-х годов в Simula 67 , поэтому не путайте объекты и классы с C ++.
Все основные версии Unix используют полностью прямой C для ядра. (Ну, в Mac OS X есть немного C++ в одном интерфейсе.)
Если вы не считаете уровень рабочего стола, то без нескольких исключений, основные библиотеки и утилиты также на C. Единственная основная утилита, которую я могу вспомнить, написанная на C++, это groff
.
Теперь, с пакетами, это совсем другая история...
Системы UNIX обычно кодируются на чистом C, и по некоторым причинам большинству разработчиков UNIX также не нравится C ++.
Когда вы говорите о ядрах для Unix-операционных систем, таких как Linux, Solaris, Mac OS X, NetBSD, FreeBSD и др. - они обычно все на C. И я также не уверен, что вы подразумеваете под перегрузкой или переменными по умолчанию - уж точно не в вызовах ядра.
Я был удивлен, когда DigitalRoss сказал, что в исходниках ядра Mac OS X есть Objective C, поэтому я загрузил MacOS X 10.6.2 версию исходников ядра Darwin xnu, и действительно, там не было Objective C. Однако я был слегка шокирован, обнаружив немного C++.
В любом случае, многие вещи, на которые полагаются программы "пользовательского пространства" (не ядра), такие как виртуальная память, обработка исключений, ввод-вывод устройств и так далее, выполняются ядром. Но ядро не может использовать себя для этих вещей, точно так же, как вы не можете поднять себя в воздух, подхватив руками свои ботинки.
Объектно-ориентированные языки, такие как C++ и Objective C, широко используют именно те вещи, которые ядра не могут делать сами. Вот почему ядра в основном пишутся на C. В случае с тем C++, который я видел в исходниках xnu, я уверен, что он очень, очень тщательно написан, чтобы избежать выполнения вещей, которые небезопасны в ядре.
Что касается написания программ пользовательского пространства на C и C++, я думаю, что это в основном традиция, личные предпочтения и то, к чему люди привыкли. Как человек, хорошо владеющий обоими языками, я сам считаю это довольно глупым.
Определенно C - попробуйте man syscall
или man -s2 read
- это даст вам интерфейс библиотеки C, никакого C++ в поле зрения.
Несколько ядер ОС были написаны на C ++. Я считаю, что ядро Chorus (например) написано (почти?) Исключительно на C ++ (это что-то вроде Mach: микроядро, которое используется почти исключительно через эмулятор UNIX, работающий как сервер пользовательского режима).
На C ++ было еще несколько полуэкспериментальных систем. Один из сравнительно недавних - Hybrid. Более старый был размещен на comp.sources.misc ( в четырех последовательных сообщениях ) лет назад - я почти уверен, что это ' Чтобы его скомпилировать с текущим компилятором C ++, потребуется немало усилий. Он работает на виртуальной машине и включает исходный код для эмуляции оборудования.
Я не знаю, о каких системных вызовах вы говорите, но держу пари, что большинство операционных систем UNIX-ee написаны на прямом C. Вероятно, для системных вызовов есть только оболочки C ++.