ГОСТ 27831-88
(ИСО 8652-87)
Группа П85
ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР
ЯЗЫК ПРОГРАММИРОВАНИЯ АДА
Programming language Ada
ОКСТУ 4002
Дата введения 1989-07-01
ИНФОРМАЦИОННЫЕ ДАННЫЕ
1. ИСПОЛНИТЕЛИ
А.А.Красилов, д-р. техн. наук, проф.; B.M.Курочкин, канд. техн. наук (руководители темы); Ю.Н.Голубев, канд. техн. наук; В.И.Баранов, канд. техн. наук; В.Л.Лейтес, канд. техн. наук; В.А.Хитров; H.E.Богородская; В.П.Чепкасов; Е.П.Фадеева; А.П.Попов; В.В.Лукашев, канд. техн. наук; Н.Л.Жданова; В.Г.Коневских; Л.А.Андрианова; Т.С.Прокофьева; O.E.Косырева; E.E.Полякова; Ю.П.Пузей; E.B.Фадеева; А.Ф.Яблокова; Е.А.Обертынская; И.Ю.Гребенкина; О.Г.Кузьмина; Н.Г.Соболев; Н.М.Блохин; Н.К.Зубанова
2. УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Постановлением Государственного комитета СССР по стандартам от 22.09.88 N 3217
3. ВВЕДЕН ВПЕРВЫЕ
4. Стандарт соответствует международному стандарту ИСО 8652-87
5. ССЫЛОЧНЫЕ НОРМАТИВНО-ТЕХНИЧЕСКИЕ ДОКУМЕНТЫ
Обозначение НТД, на который дана ссылка | Номер раздела, приложения |
2.1, приложение 3 |
Настоящий стандарт устанавливает базовое описание языка программирования АДА, применяемого для разработки программ различного назначения, в том числе работающих в реальном масштабе времени, а также средств компиляции, тестирования и отладки программ.
В процессе принятия решений при проведении испытаний и приемке систем программирования и программ на языке Ада настоящий стандарт является основанием для определения их полного соответствия языку Ада только при наличии и применении систем тестов, согласованных в установленном порядке.
В настоящем стандарте описаны форма представления и семантика программных модулей, написанных на языке Ада. Цель стандарта - повысить надежность и переносимость программ для разнообразных систем обработки данных.
1.1.1. Содержание стандарта
Стандарт определяет:
а) Форму представления программного модуля, написанного на языке Ада.
б) Результаты трансляции и выполнения такого программного модуля.
в) Способ получения Ада-программ из набора программных модулей.
г) Предопределенные программные модули, которые должна обеспечивать согласованная со стандартом реализация (далее - согласованная реализация).
д) Допустимые в рамках стандарта изменения языка и способы их задания.
е) Те нарушения стандарта, которые обязана обнаруживать согласованная реализация, а также результат попытки транслировать или выполнять программный модуль, содержащий такие нарушения.
ж) Те нарушения стандарта, которые согласованная реализация не обязана обнаруживать.
Стандарт не определяет:
з) Средства преобразования программного модуля, написанного на языке Ада, в объектный код, выполняемый процессором.
и) Средства инициализации трансляции, выполнения программных модулей и управления ими.
к) Размер и скорость выполнения объектного кода, а также относительную скорость выполнения различных языковых конструкций.
л) Форму и содержание любых листингов, предусмотренных реализациями, в частности, форму и содержание сообщений об ошибках или предупреждающих сообщений.
м) Результат выполнения программного модуля, содержащего любое нарушение стандарта, которое согласованная реализация не обязана обнаруживать.
н) Предельный для конкретной согласованной реализации размер программы или программного модуля.
Там, где стандарт предписывает, что программный модуль, написанный на языке Ада, имеет точный результат, этот результат является функциональным значением данного программного модуля, и его должны обеспечивать все согласованные реализации. Там, где стандарт допускает неоднозначность результата выполнения программного модуля, под функциональным значением программного модуля в целом понимается множество возможных результатов, и согласованная реализация может обеспечить любой из возможных результатов. Примерами допустимых неоднозначностей являются:
Значения фиксированных и плавающих числовых величин, а также результаты операций над ними;
Порядок выполнения операторов в различных параллельных задачах при отсутствии явной синхронизации.
1.1.2. Согласованность реализации со стандартом
Согласованная реализация должна:
а) Корректно транслировать и выполнять правильные программные модули, написанные на языке Ада, если только их объем находится в допустимых для реализации пределах.
б) Не выполнять программные модули, объем которых больше допускаемого реализацией.
в) Не выполнять программные модули, содержащие ошибки, обнаружение которых предусмотрено стандартом.
г) Включать предусмотренные стандартом предопределенные программные модули.
д) Содержать только те изменения, которые допускает стандарт.
е) Описывать допустимые изменения способом, разрешенным стандартом.
Стандарт содержит четырнадцать глав, четыре обязательных и два справочных приложения.
Каждая глава делится на разделы, которые имеют общую структуру. В каждом разделе вводятся соответствующие понятия, даются все необходимые синтаксические правила и описывается семантика соответствующих конструкций. В конце раздела могут быть даны примеры и примечание.
Примеры предназначены для иллюстрации возможных форм описанных конструкций. Примечание предназначено для пояснения следствий из правил, описанных в данном или других разделах.
Определение стандарта языка программирования Ада предполагает следующее ограничение: материал каждого из перечисленных ниже пунктов носит информативный характер и не является частью определения стандарта языка.
Разд.1.3. Цели и источники разработки.
Разд.1.4. Обзор свойств языка.
Примеры и примечания, приведенные в конце любого раздела.
Каждый раздел, заголовок которого начинается со слов "Пример" или "Примеры".
Язык был разработан исходя из трех противоречивых требований:
- обеспечить надежность и сопровождение программ;
- поддерживать программирование как вид человеческой деятельности;
- обеспечить эффективность программ.
Необходимость в языках, повышающих надежность и упрощающих сопровождение программ, является установленным фактом. В языке Ада предпочтение было отдано удобочитаемости программы по сравнению с легкостью ее написания. Например, правила языка требуют, чтобы все переменные и их типы были явно описаны в программе. Так как тип переменной неизменен, компилятор может гарантировать совместимость операций над переменными со свойствами, присущими объектам этого типа. Более того, чтобы избежать обозначений, которые могут привести к ошибкам, в синтаксисе языка было отдано предпочтение конструкциям, которые ближе к естественному языку. Язык поддерживает раздельную компиляцию программных модулей способом, облегчающим разработку и сопровождение программ и обеспечивающим один и тот же уровень контроля для межмодульных и внутримодульных связей.
Человеческий фактор программирования также повлиял на разработку языка. Прежде всего была сделана попытка ограничить язык настолько, насколько это позволяла широкая область его применения. Язык охватывает всю область применения небольшим числом основных понятий путем систематизации и выявления однородности, а также учитывает требование описания такой семантики, которая совпадает с интуитивным представлением о ней у пользователя.
Как и многие другие виды человеческой деятельности, разработка программ становится все более децентрализованной и разобщенной. Следовательно, одной из центральных идей при разработке языка было обеспечить возможность составлять программу из независимо разработанных компонентов. Концепции пакетов, личных типов и настраиваемых модулей прямо служат этой идее, которая повлияла на многие другие аспекты языка.
При создании любого языка необходим учет проблемы эффективности. Языки, которые требуют сверхсложных компиляторов или приводят к неэффективному использованию памяти и времени выполнения программы, дают неэффективные результаты на всех машинах и для всех программ. Каждая конструкция языка оценивалась с точки зрения современных методов реализации. Отвергались все те конструкции, которые были недостаточно ясными или требовали чрезмерных машинных ресурсов.
Ни одна из указанных выше целей разработки языка не откладывалась на будущее. Все они учитывались одновременно и с самого начала разработки языка.
При разработке любого языка трудность заключается в том, что необходимо определить не только возможности, которыми он должен обладать и которые диктует предполагаемая область применения, но и собственно разработать средства языка, обеспечивающие эти возможности. Такие возможности и требования были учтены при формировании языка.
Другое обстоятельство, существенно упростившее разработку, было следствием приобретенного ранее опыта реализации удачных проектов на базе языка Паскаль, созданного с целями, аналогичными указанным выше. Такими языками являются языки Евклид, Лис, Меса, Модула и Сью. Многие из ключевых идей и синтаксических форм этих языков имеют аналоги в языке Ада. Некоторые существующие языки, такие как Алгол 68 и Симула, а также современные проекты языков Альфард и Клу, также повлияли на разработку языка, хотя и в меньшей степени, чем языки семейства Паскаль.
Ада-программа представляет собой один или несколько программных модулей, которые могут компилироваться раздельно. Программные модули - это подпрограммы (определяющие выполняемый алгоритм), пакеты (определяющие наборы понятий), задачные модули (определяющие параллельные вычисления) или настраиваемые модули (определяющие параметризованные пакеты и подпрограммы). Каждый модуль обычно состоит из двух частей: спецификации, содержащей видимую для других модулей информацию, и тела, содержащего детали реализации, о которых другие модули не обязаны знать.
Это различие между спецификацией и телом, а также возможность компилировать модули раздельно позволяют разрабатывать, записывать и тестировать программу как множество в достаточной степени независимых программных компонентов.
Ада-программа может использовать библиотеку программных модулей общего назначения.
Язык предоставляет средства, с помощью которых отдельные организации могут создавать свои собственные библиотеки. В тексте раздельно компилируемого программного модуля должны быть указаны имена библиотечных модулей, которые ему требуются.
Программные модули. Подпрограмма является основным модулем для представления алгоритма. Существуют два вида подпрограмм: процедуры и функции. Процедура - это средство вызова последовательности действий. Например, она может считывать данные, изменять значения переменных или выводить информацию. Процедура может иметь параметры для управления механизмом передачи информации между процедурой и точкой вызова.
Функция - это средство вызова действий по вычислению значения. Она подобна процедуре, но в результате выполнения еще и возвращает результат.
Пакет - это основной модуль для определения набора логически связанных понятий. Например, пакет может быть использован для определения общей группы данных и типов, набора взаимосвязанных подпрограмм или же множества описаний типов и соответствующих операций. Части пакета могут быть скрыты от пользователя, следовательно, доступ будет разрешен только к тем логическим свойствам, которые описаны в спецификации пакета.
Задачный модуль - это основной модуль для определения задачи, последовательность действий которой может выполняться параллельно с выполнением других задач. Такие задачи могут быть реализованы на многомашинной или многопроцессорной системе, либо чередованием выполнения задач на одном процессоре. Задачный модуль может определить или одну выполняемую задачу или задачный тип, позволяющий создать любое количество подобных задач.
Настраиваемый модуль - это шаблон, по которому можно получить конкретизацию в виде подпрограммы или пакета.
Описания и операторы. Тело программного модуля, как правило, содержит две части: раздел описаний, который определяет логические понятия, используемые в программном модуле, и последовательность операторов, определяющая выполнение этого программного модуля.
Раздел описаний связывает имена с описанными понятиями. Например, имя может обозначать тип, константу, переменную или исключение. Раздел описаний также может вводить имена и параметры других вложенных подпрограмм, пакеты, задачные модули и настраиваемые модули, используемые в программном модуле.
Последовательность операторов описывает последовательность действий, которые должны быть выполнены. Операторы выполняются последовательно (если только оператор возврата, перехода, выхода или возбуждения исключения не вызовет продолжения выполнения с другого места).
Оператор присваивания изменяет значение переменной. Вызов процедуры инициирует выполнение процедуры после сопоставления каждого фактического параметра, заданного в вызове, соответствующему формальному параметру.