Чтение C++ исходного кода, очевидно, может быть хорошим способом обучения и просто интересно, когда его функция, о которой вы очень мало знаете. Что касается стандартного источника библиотеки, это сложно из-за угасания имен.
Является ли углефикация осуществлением какой-либо пост-обработки исходного кода перед его включением в стандартную библиотеку? Если да, то что происходит с исходным кодом? Существуют ли какие-либо хранилища исходного кода C++ стандартной библиотеки?
Мне интересно посмотреть на C++ 11 и вскоре C++ 14 особенности в частности.
Я не могу представить, что поддерживать код в этой форме было бы очень весело....
РЕДАКТИРОВАТЬ:
Там предложение, чтобы избавиться от этого процесса здесь.
При изучении из стандартных реализаций библиотек, прежде всего, обратите внимание, что стандартная библиотека должна подчиняться определенным жестким ограничениям, которые не применяются к коду, написанному обычными пользователями. Кроме того, некоторые из операций, выполняемых стандартными библиотеками C++, несколько эзотеричны, и я был бы обеспокоен, если бы они когда-либо использовались обычным пользовательским кодом (если в вашей компании имеется команда низкоуровневых библиотек, они могут делать некоторые подобные вещи, хоть). В частности, по ограничениям, которые стандартные библиотеки должны соблюдать, это то, что ни одно из используемых имен не конфликтует с любыми именами, используемыми где-либо пользователями. Поскольку пользователи могут определять смешные макросы, стандартная библиотека должна использовать имена, зарезервированные для стандартной библиотеки в видимых пользователем контекстах, например, файлы заголовков:
То, что вы специально не хотите копировать из стандартной библиотеки C++, - это именование включенных охранников: они обычно начинаются с одного или двух символов подчеркивания и всех символов верхнего регистра. Пользователям не разрешается использовать какой-либо из этих идентификаторов, если только им не разрешено их использовать (например, вы можете использовать __FILE__
и __LINE__
но вам не разрешено, например, писать _FOOBAR
любой точке вашей программы, где его можно было бы расширить макросом ( то есть, я думаю, вы можете написать "_FOOBAR"
).
Чтобы ответить на ваш реальный вопрос: все стандартные реализации библиотеки C++, о которых я знаю (libstd C++, lib C++, Dinkumware, RougeWave и мои собственные) написаны с использованием "углеродистых" имен и нет конвертации программ их в эту форму. В принципе, любая программа должна иметь дело с множеством исключений, что не совсем возможно. Я думаю, что стандартные разработчики библиотеки C++ просто привыкают к смешным именам. Для моей реализации я приложил все усилия, чтобы назвать все с помощью общего префикса, чтобы углификацию можно было отменить с помощью простого сценария sed
но я не придерживался этого шаблона повсюду.
sed
для некоторых других реализаций. Поддерживаете ли вы коммерческое внедрение или собственное?