Данная связь не предполагает, что компилятор поддерживает любые свойства языка Ада, которые являются зависящими от реализации, но подразумевает, что компилятор будет способен поддерживать декларации, входящие в связывание GKS/Ада. Не делается никаких предположений относительно машинного представления предопределенных типов чисел в Аде.
Данная связь предполагает, что прикладной программист будет применять имя файла ошибок и идентификатор связи, которые будут иметь формат, приемлемый для реализации Ады.
В данной связи не делается предположения относительно формата строки, определяющей имя файла ошибок или идентификатор связи для устройства или метафайла.
3.1. Условия соответствия стандарту
Данная связь включает правила, определенные в стандарте ГОСТ 27817 (ИСО 7942) со следующими дополнительными требованиями, специально заданными для реализации ЯГС в языке Ада.
Для определения соответствия или несоответствия реализации данному связыванию установлены следующие критерии:
а) реализация ЯГС в Аде соответствует уровню ЯГС, если она точно выполняет декларации для данного уровня ЯГС и более низких уровней, определенных данным связыванием;
б) семантика реализации должна соответствовать стандарту ЯГС с модификациями и расширениями для Ады, установленными в данном документе;
в) модуль, соответствующий реализуемому уровню ЯГС, должен быть доступен в виде блока библиотеки Ады с именем, определенным в данном документе.
3.2. Включение в язык
3.2.1. Отображение функций
Все функции ЯГС отображаются в процедуры Ады. Отображение использует "один-в-один" соответствие между функциями ЯГС и процедурами Ады, исключая функции ЯГС "Узнать текущий атрибут примитива" и "Узнать индивидуальный атрибут". Они связаны с отдельной процедурой Ады для каждого из запрашиваемых атрибутов; атрибуты связываются с одной записью.
3.2.2. Реализация и зависимость от компьютера
Существует ряд зависимостей от реализаций и компьютера, связанных с компилятором Ады и используемыми процедурами системы. Это будет влиять на переносимость прикладных программ и их использование ЯГС. Прикладному программисту следует придерживаться принятой практики обеспечения переносимости программ на языке Ада, чтобы избежать возникновения проблем при переносе прикладного программного обеспечения на другую систему. К зависимостям от реализаций относятся управление памятью и процессором.
3.2.3. Обработка ошибок
Справочные функции используют параметры индикаторов для возврата ошибок и не порождают прерываний. В языке Ада прикладная программа должна гарантировать, что индикаторы ошибок проверяются до попыток обращения к другим параметрам, так как некоторые реализации Ады не порождают прерываний, если обнаружено неопределенное значение.
Требования ЯГС по обработке ошибок можно выразить следующим образом.
1. По умолчанию процедура, названная ERROR_HANDLING, будет обеспечивать простую регистрацию ошибок вызовом ERROR_LOGGING. Она вызывается из функций ЯГС, обнаруживших ошибку.
2. Процедура ERROR_HANDLING может быть заменена пользователем на другую.
Процедура ERROR_HANDLING задается, как библиотечная подпрограмма:
with GKS_TYPES;
use GKS_TYPES;
procedure ERROR_HANDLING (ERROR_INDICATOR
: in ERROR_NUMBER; | |||
GKS_FUNCTION : in STRING; | |||
ERROR_FILE : in STRING | |||
: =DEFAULT_ERROR_FILE); |
Процедура ERROR_HANDLING определяется как библиотечная процедура и не декларируется внутри пакета ЯГС.
Данная связь определяет два различных тела для этой программы; каждое должно быть представлено реализацией. Тело по умолчанию - это одна из требуемых ЯГС семантических конструкций. Это просто вызов ERROR_LOGGING и возврат. Функция ЯГС должна быть написана так, чтобы она не поддерживала GKS_ERROR (это требование реализации). Таким образом, в соответствии с правилами языка Ада прерывание распространяется назад к прикладной программе, вызвавшей функцию GKS, в которой обнаружилась ошибка.
Смысл пользовательской замены тела, применяемого по умолчанию, на версию, порождающую прерывание, зависит от менеджера библиотеки Ады. Некоторые реализации поддерживают множество версий тела с одной спецификацией или допускают применение иерархических библиотек с разделением общих блоков. В других реализациях может оказаться необходимым дублировать библиотеку семантических конструкций для каждой версий ERROR HALDING.