На каком языке написаны стандартные библиотеки C и c++?

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

7 ответов


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

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

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


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

вы можете найти эти ссылки полезными:


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

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

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


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

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


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

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


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

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


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

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

кроме того, вам может понравиться Ken Thompson's размышления о доверии доверие. В этой статье Томпсон говорит о трудностях, присущих доверительному скомпилированному коду.