Стандартный источник имплементации библиотеки, у которого не было названий uglified

0

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

Является ли углефикация осуществлением какой-либо пост-обработки исходного кода перед его включением в стандартную библиотеку? Если да, то что происходит с исходным кодом? Существуют ли какие-либо хранилища исходного кода C++ стандартной библиотеки?

Мне интересно посмотреть на C++ 11 и вскоре C++ 14 особенности в частности.

Я не могу представить, что поддерживать код в этой форме было бы очень весело....

РЕДАКТИРОВАТЬ:

Там предложение, чтобы избавиться от этого процесса здесь.

Теги:
std

1 ответ

6
Лучший ответ

При изучении из стандартных реализаций библиотек, прежде всего, обратите внимание, что стандартная библиотека должна подчиняться определенным жестким ограничениям, которые не применяются к коду, написанному обычными пользователями. Кроме того, некоторые из операций, выполняемых стандартными библиотеками C++, несколько эзотеричны, и я был бы обеспокоен, если бы они когда-либо использовались обычным пользовательским кодом (если в вашей компании имеется команда низкоуровневых библиотек, они могут делать некоторые подобные вещи, хоть). В частности, по ограничениям, которые стандартные библиотеки должны соблюдать, это то, что ни одно из используемых имен не конфликтует с любыми именами, используемыми где-либо пользователями. Поскольку пользователи могут определять смешные макросы, стандартная библиотека должна использовать имена, зарезервированные для стандартной библиотеки в видимых пользователем контекстах, например, файлы заголовков:

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

То, что вы специально не хотите копировать из стандартной библиотеки C++, - это именование включенных охранников: они обычно начинаются с одного или двух символов подчеркивания и всех символов верхнего регистра. Пользователям не разрешается использовать какой-либо из этих идентификаторов, если только им не разрешено их использовать (например, вы можете использовать __FILE__ и __LINE__ но вам не разрешено, например, писать _FOOBAR любой точке вашей программы, где его можно было бы расширить макросом ( то есть, я думаю, вы можете написать "_FOOBAR").

Чтобы ответить на ваш реальный вопрос: все стандартные реализации библиотеки C++, о которых я знаю (libstd C++, lib C++, Dinkumware, RougeWave и мои собственные) написаны с использованием "углеродистых" имен и нет конвертации программ их в эту форму. В принципе, любая программа должна иметь дело с множеством исключений, что не совсем возможно. Я думаю, что стандартные разработчики библиотеки C++ просто привыкают к смешным именам. Для моей реализации я приложил все усилия, чтобы назвать все с помощью общего префикса, чтобы углификацию можно было отменить с помощью простого сценария sed но я не придерживался этого шаблона повсюду.

  • 0
    Было бы хорошо, если бы был сценарий sed для некоторых других реализаций. Поддерживаете ли вы коммерческое внедрение или собственное?
  • 1
    Проблема в том, что он не поддерживается: CXXRT Однако, он мой, хотя не все в этой базе кода сделано мной (только те части, которые меня интересовали, в частности локали и IOStreams).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню