Язык Ада является отражением текущего состояния в области исследования и развития языков программирования. Он является результатом коллективной попытки создания общего языка для широкомасштабного программирования и систем реального времени [2]. Разработка этого языка, субсидированная правительством и министерством обороны США, началась в 1974 г. с рассмотрения требований, предъявляемых к новому языку. В исследованиях и создании предварительных проектов на конкурсной основе принимало участие большое число профессиональных разработчиков. Результатом явилась окончательная форма языка, которая сейчас начинает внедряться в различные вычислительные системы.
Наиболее отличительной чертой языка Ада по сравнению с его наиболее широко использующимися предшественниками является акцент, сделанный на различие спецификации и реализации программных единиц. Язык Ада использует семантические компоненты, позволяющие группам программистов создавать и управлять большими системами и программами с минимумом затрат. Язык Ада будет принят в качестве национального и международного стандартного языка, поскольку он создавался с целью повышения программной переносимости в связи с наличием четких машинно-независимых логических конструкций и машинно-зависимых представлений данных.
Программа на языке Ада состоит из набора пакетов и одной главной подпрограммы (т. е. начальной или "стартовой" задачи), которая активизирует эти пакеты. Структурное представление программы в виде набора программных единиц имеет преимущество в том, что по мере возрастания программных единиц программист в большей степени сохраняет для себя общее представление о работе программы в целом (как последовательности действий), поскольку число возможных взаимоотношений между шагами задания и данными ограничено благодаря использованию пакетов. Пакеты ограничивают операции, которые могут быть выполнены над индивидуальными объектами типа "данные", благодаря закону (своего рода алгебре), установленному для каждого из пакетов.
Можно сказать, что пакет может быть единым супервизором над созданием и использованием объектов некоторого заданного типа. Таким образом, у пользователя имеется гарантия того, что все единицы данного типа будут обработаны соответствующим образом, т, е. целостность "содержимого" каждого объекта будет поддерживаться надлежащим образом, о чем пользователю не следует заботиться, так как ответственность за это целиком лежит на пакете. Программирование по такому принципу позволяет пользователю, выполняющему над пакетом некоторую операцию, сфокусировать свое внимание только на объекте типа "данные" или же только на отдельных его частях. Язык Ада позволяет программисту определять неограниченное число типов объектов типа "данные" и назначать создание и использование отдельных объектов типа "данные" за соответствующими четко выраженными менеджерами типа.
В действительности мы только слегка коснулись "дисциплинарных преимуществ" пакетов, используемых в языке Ада. В более общем случае пакеты могут включать в свою спецификацию не только набор значимых операций над несколькими (одним или более) объектами типа "данные", но и содержать описания, определяющие тип таких объектов (определения типа).
Использование языка Ада для подсистем и прикладных задач заманчиво не только из-за возможности работы с пакетами. В частности, привлекательной является также возможность декомпозиции программы на группы взаимосвязанных задач (процессов). Эта идея первоначально рассматривается в первой главе и подробно разбирается в гл. 3 и 5. Задачи в языке Ада могут создаваться (и прерываться) как статически, так и динамически. Они позволяют организовывать выполнение задач на конкурентной основе (абстрактной или фактической), что достигается параллельной или конвейерной организацией задач. Задачи могут быть использованы для синхронизации других задач и для распределения работы между другими задачами. Представление системы в виде набора задач на языке Ада обеспечивает более ясное понимание ее работы, а также более быстрое функционирование (хотя выполнение задач на конкурентной основе возможно только при наличии в системе нескольких доступных процессоров).
Язык Ада поддерживает объектно-базированное программирование, что и послужило причиной выбора его в качестве основного языка программирования для i432. Что более важно, программы, написанные на языке Ада, могут рассматриваться как естественное расширение операционной системы и аппаратной поддержки. В такой системе, следовательно, нет присущего обычным операционным системам различия между "системными программами" и "программами пользователя". По этой причине со следующей главы мы приступим к детальному изучению системы i432, делая больший акцент не на аппаратной организации операционной системы, а на самом языке Ада.
Надо сказать, что пользователям не запрещается программировать на каких-либо других, резко отличающихся от языка Ада, языках, например на языке ЛИСП или Кобол. В самом деле, естественно ожидать, что приспосабливая систему i432, разработчики системных программ, отдельные независимые поставщики программных продуктов и сотрудники университетов будут разрабатывать для удовлетворения своих собственных интересов свои языковые обрабатывающие системы, как это происходит и в случае любых других систем общего назначения.
Завершая наше предисловие, отметим, что язык Ада находится в значительной связи с архитектурой i432:
Наше предисловие получилось довольно большим, а плотность изложения, возможно, довольно высокой для того, чтобы усвоить весь материал после первого прочтения. По мере изучения следующих глав читателям предлагается перечитывать соответствующие части этой книги.