Руководство по Ada (Ada 2022)
1.1.3 Соответствие реализации
Требования к реализации
Соответствующая реализация должна:
- Переводить и правильно выполнять законные программы, написанные на Ada, при условии, что они не превышают емкость реализации;
- Определять все программы или программные модули, которые превышают емкость реализации (или генерировать соответствующее исключение во время выполнения);
- Определять все программы или программные модули, содержащие ошибки, обнаружение которых требуется этим Руководством;
- Обеспечивать все определенные языком библиотечные модули, необходимые этим Руководством;
- Не содержать изменений, кроме тех, которые явно разрешены этим Руководством, или тех, которые невозможно или непрактично избежать, учитывая среду выполнения реализации;
- Указывать все такие изменения способом, предписанным этим Руководством.
Внешнее воздействие выполнения программы Ada определяется в терминах её взаимодействия с внешней средой. Следующее определено как внешние взаимодействия:
- Любое взаимодействие с внешним файлом (см. A.7);
- Выполнение определенных команд_кода (см. 13.8); то, какие команд_кода вызывают внешние взаимодействия, определяется реализацией.
- Любой вызов импортируемой подпрограммы (см. Приложение B), включая любые передаваемые ей параметры;
- Любой возвращаемый результат или распространяемое исключение от основной подпрограммы (см. 10.2) или экспортируемой подпрограммы (см. Приложение B) внешнему вызывающему субъекту;
- Любое чтение или обновление атомарного или переменного объекта (см. C.6);
- Значения импортируемых и экспортируемых объектов (см. Приложение B) на момент любого другого взаимодействия с внешней средой.
Соответствующая реализация этого Руководства должна генерировать для выполнения заданной программы Ada набор взаимодействий с внешней средой, порядок и временные характеристики которых согласуются с определениями и требованиями этого Руководства для семантики данной программы.
Реализация, соответствующая этому Руководству, должна поддерживать каждую необходимую возможность основного языка, как указано. Кроме того, реализация, соответствующая этому Руководству, может соответствовать одному или нескольким приложениям специальных потребностей (или ни одному). Соответствие приложению специальных потребностей означает, что каждая необходимая функция приложения должна быть предоставлена, как указано.
Реализация, соответствующая этому Руководству, может предоставлять дополнительные аспекты, атрибуты, библиотечные модули и директивы. Однако она не должна предоставлять никаких аспектов, атрибутов, библиотечных модулей или директив, имеющих такое же имя, как аспект, атрибут, библиотечный модуль или директива (соответственно) в приложении специальных потребностей, если предоставляемая конструкция не указана в приложении специальных потребностей или имеет меньше возможностей, чем требуется приложением. Программа, которая пытается использовать неподдерживаемую функцию приложения, должна быть идентифицирована реализацией до времени выполнения или должна сгенерировать исключение во время выполнения.
Для реализации, соответствующей этому Руководству, реализация предопределенного языком модуля должна соответствовать всем пост-условиям, инвариантам типа и значениям начальных условий, указанным для модуля в этом документе (см. 11.4.2).
Требования к документации
Определенные аспекты семантики определяются как определяемые реализацией или неопределенные. В таких случаях набор возможных эффектов указан, и реализация может выбрать любой эффект в этом наборе. Реализации должны документировать свое поведение в ситуациях, определяемых реализацией, но документация не требуется для неопределенных ситуаций. Характеристики, определяемые реализацией, суммированы в M.2.
Реализация может выбрать документирование поведения, определяемого реализацией, либо документировав то, что происходит в целом, либо предоставив некоторый механизм для определения того, что происходит в конкретном случае.
Рекомендации по реализации
Если реализация обнаруживает использование недопустимой функции приложения специальных потребностей во время выполнения, она должна генерировать Program_Error, если это возможно.
Если реализация хочет предоставить расширения, определяемые реализацией, к функциональности предопределенного языком библиотечного модуля, она обычно должна это сделать, добавив подмодули к библиотечному модулю.
ПРИМЕЧАНИЕ. Вышеуказанные требования подразумевают, что реализация, соответствующая этому Руководству, может поддерживать некоторые возможности, необходимые приложением специальных потребностей, не поддерживая все необходимые возможности.