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