На каком языке написаны стандартные библиотеки C и C ++? - PullRequest
21 голосов
/ 08 июля 2011

C и C ++ сами по себе не могут делать ничего, им нужны библиотеки для работы. Так как же были созданы библиотеки? Язык ассемблера?

Ответы [ 7 ]

51 голосов
/ 08 июля 2011

Библиотеки C и C ++ почти всегда написаны на C и C ++, как и компиляторы C и C ++.На самом деле, многие компиляторы даже используются для компиляции!

Как это возможно?Ну, очевидно, первый компилятор C не мог быть изначально разработан на C. Однако, если компилятор C существует, его можно использовать для компиляции другого компилятора.И как разрабатывается компилятор, так и исходный код.Можно развивать как бок о бок.Поскольку большинство компиляторов являются усовершенствованиями своих предшественников, они часто используются для компиляции лучших версий самих себя!

Однако, что касается библиотеки, это легко: C может действительно что-то делать.Хотя некоторые низкоуровневые подпрограммы могут быть написаны на ассемблере, подавляющее большинство может быть написано на C или C ++.

11 голосов
/ 08 июля 2011

Почему бы вам не взглянуть на реализацию этих языков с открытым исходным кодом и выяснить это?

Вам могут пригодиться эти ссылки:

6 голосов
/ 08 июля 2011

Стандартные библиотеки, как правило, написаны на C и C ++, с использованием минимального кода сборки для взаимодействия с функциональными возможностями, предоставляемыми операционной системой, и большинство операционных систем написаны на C, а также представляют собой смесь сборок для Горстка вещей, которые нельзя сделать непосредственно в C.

Более конкретный пример ...

Для GNU / Linux написаны стандартные библиотеки и C и C ++. Для различных вещей, которые требуют использования ядра, в конечном счете вызывается syscall , который обеспечивает небольшой кусочек кода сборки, необходимый для перехода в ядро, где код написан на смеси C и Сборка ручки вызова.

5 голосов
/ 08 июля 2011

Они написаны на языке хоста по той простой причине, что им необходимо взаимодействовать с операционной системой для выполнения операций, которые они не могут выполнять самостоятельно, они будут делать это с помощью API, предоставляемого операционной системой.

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

4 голосов
/ 08 июля 2011

Здесь есть небольшое недоразумение: компилятор отвечает за перевод C или C ++ (или чего-либо еще) в машинный код.Сами библиотеки могут быть написаны на C, с этим проблем нет.Более того, даже сам компилятор может быть написан на C, если существует хотя бы один компилятор C для его компиляции.(Большая шутка в том, что для «правильной» установки gcc в linux вам нужен gcc для компиляции из исходного кода.)

Вы могли бы спросить «о чем был написан первый компилятор C», возможно.

4 голосов
/ 08 июля 2011

В типичном случае стандартная библиотека C написана в основном на C, а стандартная библиотека C ++ - в основном на C ++.

Чтобы дать конкретные цифры, стандартная библиотека Microsoft имеет ~ 1050 файлов C и C ++,и 37 файлов на ассемблере.Просто взглянув на них, я бы сказал, что по крайней мере половина этих сборочных файлов может быть написана также на C или C ++;они на ассемблере ради оптимизации, а не по необходимости.

2 голосов
/ 08 июля 2011

Большинство компиляторов для C и C ++ написаны на C и C ++. Это возможно из-за начальной загрузки компилятора . Есть связанный вопрос Stackoverflow по теме:

Начальная загрузка компилятора: почему?

Кроме того, вам может понравиться «1009 * Отражение доверия» Кена Томпсона . В этой статье Томпсон рассказывает о трудностях, присущих доверию скомпилированному коду.

...