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