Unix кодируется в C или C++ или обоих?

Много системных вызовов в перегрузке использования Unix и переменных по умолчанию. Это понятие отсутствует в C, таким образом, Unix кодируется в C++ также право?

6
задан Jonathan Leffler 7 March 2010 в 03:57
поделиться

7 ответов

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 ++.

16
ответ дан 8 December 2019 в 02:24
поделиться

Довольно много прямого C на всем пути вниз...

Все основные версии Unix используют полностью прямой C для ядра. (Ну, в Mac OS X есть немного C++ в одном интерфейсе.)

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

Теперь, с пакетами, это совсем другая история...

12
ответ дан 8 December 2019 в 02:24
поделиться

Системы UNIX обычно кодируются на чистом C, и по некоторым причинам большинству разработчиков UNIX также не нравится C ++.

0
ответ дан 8 December 2019 в 02:24
поделиться

Когда вы говорите о ядрах для 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++, я думаю, что это в основном традиция, личные предпочтения и то, к чему люди привыкли. Как человек, хорошо владеющий обоими языками, я сам считаю это довольно глупым.

5
ответ дан 8 December 2019 в 02:24
поделиться

Определенно C - попробуйте man syscall или man -s2 read - это даст вам интерфейс библиотеки C, никакого C++ в поле зрения.

1
ответ дан 8 December 2019 в 02:24
поделиться

Несколько ядер ОС были написаны на C ++. Я считаю, что ядро ​​ Chorus (например) написано (почти?) Исключительно на C ++ (это что-то вроде Mach: микроядро, которое используется почти исключительно через эмулятор UNIX, работающий как сервер пользовательского режима).

На C ++ было еще несколько полуэкспериментальных систем. Один из сравнительно недавних - Hybrid. Более старый был размещен на comp.sources.misc ( в четырех последовательных сообщениях ) лет назад - я почти уверен, что это ' Чтобы его скомпилировать с текущим компилятором C ++, потребуется немало усилий. Он работает на виртуальной машине и включает исходный код для эмуляции оборудования.

1
ответ дан 8 December 2019 в 02:24
поделиться

Я не знаю, о каких системных вызовах вы говорите, но держу пари, что большинство операционных систем UNIX-ee написаны на прямом C. Вероятно, для системных вызовов есть только оболочки C ++.

3
ответ дан 8 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: