Ошибочное понимание разницы между контекстом (scope) и видимостью (visibility) может вызвать трудности у многих программистов, которые знакомятся с языком программирования Ада.
Следует учесть, что понимание этого различия имеет важное значение при использовании Ады для разработки программного обеспечения.
Спецификатор совместности контекста with
помещает соответствующий библиотечный модуль в контекст, однако, ни один ресурс этого модуля не становится непосредственно видимым для клиента.
Это является основным различием от директивы #include семейства языков C
или директивы uses в реализации Паскаль-системы фирмы Borland.
Ада предоставляет множество способов обеспечения непосредственной видимости различных ресурсов, после того как они помещены в контекст.
Разделение контекста и видимости является важным концептом разработки программного обеспечения.
Однако, следует заметить, что этот концепт редко реализовывается в различных языках программирования.
Примечательно также, что идея пространства имен namespace, принятая в C++, подобна концепции контекста и видимости Ады.
Каждая инструкция и/или каждая конструкция языка имеет объемлющий контекст.
Обычно, контекст легко увидеть в исходном тексте, поскольку контекст имеет какую-либо точку входа (описательная часть declare, идентификатор подпрограммы, идентификатор составного типа, идентификатор пакета...) и какую-либо явную точку завершения.
Как правило, явная точка завершения контекста обозначается с помощью соответствующей инструкции end.
Таким образом, как только мы обнаруживаем в исходном тексте какую-либо инструкцию end, мы понимаем, что она является точкой завершения какого-нибудь контекста.
Контекст может быть вложенным.
Например, одна процедура может быть описана внутри другой процедуры.
Несколько иначе выглядит ситуация, когда спецификатор совместности контекста with
помещает в контекст какой-либо библиотечный модуль.
В этом случае в контекст помещаются все ресурсы указанного библиотечного модуля, но при этом, спецификатор with