Страницы

Поиск по вопросам

среда, 10 октября 2018 г.

std один namespace на всю стандартную библиотеку

Почему std один namespace на всю стандартную библиотеку? Почему, например, не сделали для алгоритмов отдельный std::algorithm?


Ответ

Изначально пространства имён создавались для разрешения конфликтов. Пространство имён — это не декорация кода, не атрибут, не метка и даже не путь к файлу. Пространство имён — это в первую очередь цельное объединение кода, в котором не предполагается конфликтов. Также пространства имён используются для того, чтобы избежать засорения списка доступных сущностей в коде (важно при использовании автодополнения кода).
Джависты изуродовали пространства имён, у них папки — это пространства имён, а файлы — классы. В результате библиотеки обрастают глубокими иерархиями пространств имён, и даже базовое использование библиотеки может требовать десяток пространств. PHP-шники пошли по пути Java, причём изначально возможности включения пространств имён были ограничены, да и сейчас не лучшие. Результатом всего этого является абсолютная необходимость использовать сложные IDE, иначе невозможно запомнить, где какой класс находится.
Что же в C++? В C++ стандартная библиотека достаточно минималистичная, а доступные в конкретном файле классы и функции зависят от включаемых заголовочных файлов, поэтому проблемы засорения списка доступных имён нет. Кроме того, C++ создавался во времена, когда сильно умных IDE не было, поэтому приходилось помнить, что где находится. Засорять память пространствами имён в дополнение к заголовочным файлам — излишне.
В целом, пока библиотека не натыкается на конфликты, и не возникает других причин использовать дополнительные пространства имён, достаточно только одного пространства. Для сравнения, в boost каждая библиотека в своём пространстве, потому что библиотеки существуют по отдельности, возможны конфликты как между библиотеками, так и со стандартной библиотекой.

Комментариев нет:

Отправить комментарий