Почему существует соглашение об объявлении пространства имен / библиотек по умолчанию на любом языке программирования? - PullRequest
6 голосов
/ 17 ноября 2010

Почему ни один язык программирования не загружает библиотеки по умолчанию, такие как stdio.h, iostream.h или using System, чтобы избежать объявления?

Поскольку эти пространства имен / библиотеки требуются в любой программе, почему компиляторы ожидают, что они будут объявлены пользователем.

Существуют ли какие-либо программы без использования пространства имен / заголовков? даже если да, что плохого в загрузке безопасных библиотек по умолчанию?

Я не это имел в виду ... Мне лень писать строку кода, но для компилятора (как по мне) меньше смысла плакать для объявления так называемых default штуковин, заканчивающихся в ошибке компиляции.

Ответы [ 7 ]

4 голосов
/ 17 ноября 2010

Это потому, что - это программы, написанные без стандартных библиотек.Например, существует множество программ на C, работающих на встроенных системах, которые не предоставляют stdio.h, поскольку это не имеет никакого смысла на этих платформах (в C такие среды называются «автономными», в отличие оттем более обычный "хостинг").

2 голосов
/ 17 ноября 2010

Библиотеки «по умолчанию» не «требуются в любой программе», и действительно, во многих случаях они даже недоступны (ядро / драйверы операционной системы, микроконтроллеры и т. Д.).И еще в основном, многие графические программы высокого уровня используют системные графические библиотеки / графические библиотеки вместо стандартных операций ввода-вывода.

1 голос
/ 17 ноября 2010

Многие языки (особенно языки сценариев и языки, которые имеют стандартную среду выполнения как часть языковой спецификации) делают делают это.

Компромисс - удобство по сравнению с разработкой программного обеспеченияблагость.Проблема с открытием пространств имен по умолчанию заключается в том, что на верхнем уровне вы сразу получаете множество имен, которые могут вызвать конфликты и путаницу в именах, загрязнить списки Intellisense / автозаполнения и т. Д.

1 голос
/ 17 ноября 2010

Для stdio.h / iostream (.h): быстрый ответ заключается в том, что в большей части вашего программного обеспечения они не нужны (определенно не оба). Устройства / серверы без головного устройства должны иметь модуль регистрации, а графические интерфейсы не всегда имеют консоль для взаимодействия.

0 голосов
/ 17 ноября 2010

Существует проблема конфликта имен. По мере развития языковых стандартов они предоставляют все больше и больше функций, давая им больше имен. И вероятность того, что имя системы и имя, определенное в пользовательской программе, повышается. Чтобы избежать этого, в модулях определены новые функции, которые не будут включены, если программа не использует их. Поскольку системные библиотеки используют много общих слов в качестве символов (например, open, restricted), проблема серьезна.

Но явное включение модуля - это не только метод предотвращения столкновений. К ним также относятся: использование «стандартного» пространства имен для системных имен (например, C ++, namespace std), резервирование имен и шаблонов имен (например, C, двойные подчеркивания), допустимое переопределение (например, Forth).

0 голосов
/ 17 ноября 2010

Чтобы проконтролировать ответ caf.

Вам необходимо сообщить компилятору об этих заголовках / библиотеках, чтобы вам не приходилось включать в себя то, что вам не нужно.Потому что они не необходимы в каждой программе.Любой программист может написать библиотеку на c или c ++, которая не зависит ни от каких библиотек времени выполнения.Эта способность позволяет писать как можно более компактное программное обеспечение и экономить память / дисковое пространство / время компиляции / время компоновки (выберите то, что вам нужно больше всего).На языках низкого уровня вы должны платить только за то, что вам нужно, и ничего больше.

0 голосов
/ 17 ноября 2010

Потому что библиотеки являются внешним компонентом языка. Если за день все библиотеки (или их часть) меняют заголовки, пространства имён языкового элемента не изменяются. Компилятор проверяет только синтаксис и правила языка программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...