Математика

Физика

Химия

Биология

Техника и    технологии

Язык программирования Ада- В. М. Курочкина
Язык программирования Ада (предварительное 1 описание)/Пер. с англ. В. М. Курочкина и Д. Б. Подшивалова. — М.: Финансы и статистика, 1981. —190 с.
55 к.
Описанный в книге новый алгоритмический универсальный язык программирования Ада — экономный и долговременный язык программирования, соединяющий практически все основные возможности ряда наиболее совершенных языков (Алгол-68, ПЛ/1, Паскаль и др.). Он учитывает также наметившиеся тенденции дальнейшего развития языков программирования. Благодаря своим свойствам, характеру поддержки язык Ада, несомненно, получит очень широкое распространение
Для специалистов, занимающихся программированием.
СОДЕРЖАНИЕ
Предисловие к русскому изданию ,,,.,.,,,.,.,!! 5
Предисловие , , .,..,...,...........It 9
1. Введение , , , .,,.,.,,.......... til 10
1.1. Принципы разработки , , ,•,.,,....... 10
1.2. Обзор свойств языка , ,,,.,.,,....... 11
1.3. Источники........, , ,......... 15
1.4. Синтаксические правила . , .,,,,,,,.,... 16
2. Лексика , , , , ,................Ill 17
2.1. Множество символов ..,....,,•.,.... 17
2.2. Лексемы и соглашение о пробелах , , ,....... 18
2.3. Идентификаторы................. 19
2.4. Числа...................... 19
2.5 Строки символов , ,............... 20
2.6. Примечания . , ................. 21
2.7. Указания.................... 21
2.8. Зарезервированные слова ...... ,.,,.... 22
3. Описания и типы......,.,.,.......... 22
3.1. Описания..................... 22
3.2. Описания объектов , , ,,,,,,........ 23
3.3. Описание типов и подтипов........, , , . . 24
3.4. Определение производного типа ,........., 26
3.5. Скалярные типы................ . 27
3.6. Регулярные типы . . .,.,,,,........ 32
3.7. Комбинированные типы , ,............. 36
3.8. Ссылочные типы . ................. 39
4. Имена, переменные, выражения , i , , ,...... . . . . 41
4.1. Имена.........., ..........I 41
4.2. Константы......., ,........... 44
4.3 Переменные . ,................. 44
4.4. Выражения.................... 45
4.5. Операции и вычисление выражений ........, 46
4.6. Квалификация выражений.............. 51
4.7. Генераторы.................... 53
4.8. Статические выражения............> . 53
5. Операторы ,,......., ,............I 54
5.1. Оператор присваивания .it............ 55
5.2. Вызов подпрограммы . , ,............. 56
5.3. Оператор возврата . ,............... 59
5.4. Условный оператор ,............... 60
5.5. Оператор варианта ,......,........ . 61
5.6. Оператор цикла . ,,....>.......... 62
5.7. Оператор выхода , , ,,.,.,......... 64
5.8. Оператор перехода................. 65
5.9. Оператор контроля , ,.............. . 65
6. Описательные части, подпрограммы, блоки .,....,,,, 66
6.1. Описательная часть................. 66
6.2. Описание подпрограммы.............. 67
6.3. Формальные параметры ,.............. 68
6.4. Тело подпрограммы . . .............. 69
6.5. Подпрограмма-функция . ,............ 70
6.6. Совмещение подпрограмм ,............. 72
6.7. Блоки.....................Ч 74
7. Модули......................ИЗ! 74
7.1. Структура модуля................. 75
7.2. Спецификация модуля .,,,.,.,.,....., 76
7.3. Тело модуля.................. . 77
7.4 Описание приватных типов . ............ 78
7.5. Иллюстративный пакет для работы с таблицами . , , , 81
8. Правила видимости...................• 83
8.1. Область действия описаний , , , t . i . i . . . • * 84
8.2. Видимость идентификаторов . ... ,,,,.,... 85
8.3. Ограниченные компоненты программы......... 87
8.4. Декларации использования............. 88
8.5. Переименование ,.....,.......... . 90
8.6. Предопределенное окружение ,........... 91
9. Задачи ,. ь ,,.,,.,,...........: : : 92
9.1. Описание и тело задачи.............. 92
9.2. Иерархия задач ,,.,..,,.......... 93
9.3. Запуск задачи................... 95
9.4. Нормальное окончание задачи............ 96
9.5. Описание входа и оператор приема.......... 96
9.6. Оператор задержки................ 98
9.7. Оператор выбора » » . , . » ».......... 99
9.8. Приоритет задач ........,......... 101
9.9. Атрибуты задачи и входа.....,........ 102
9.10 Оператор прекращения.............. 102
9.1J. Сигналы и семафоры . . t............. 103
9.12, Пример использования задач............ 104
10. Структура программы и вопросы компиляции .,..,.,,, 105
10.1. Компилируемые компоненты............ 105
10.2. Подкомпоненты компилируемых компонент....., 109
10.3. Порядок компиляции............... 112
10.4. Библиотека программы............... 113
10.5. Обработка компилируемых компонент......... 114
10.6. Оптимизация программ , , . . . « ( ,...... 114
11. Исключительные ситуации . , , ,.....,....... 115
11.1. Описание исключений , , ,............ 115
11.2. Реакции на исключительные ситуации........ 117
11.3. Оператор исключения............... 118
11.4. Исключительные ситуации, возникающие при выполнении задач.....................: 121
11.5. Создание задачей исключительной ситуации для другой задачи...........,......... 122
11.6. Отмена исключительных ситуаций ,..,..,... 123
12. Настраиваемые компоненты программы........., . 124
12.1. Декларация настройки . . . , ,......... 124
12.2. Настройка компоненты.............. 127
12.3. Пример настраиваемого пакета........... 128
13. Задание представления и особенности, зависящие от реализации 130
13.1. Спецификация упаковки.............. 131
13.2. Спецификация длины . .............. 131
13.3. Представление перечислимого типа........., 133
13.4. Представление комбинированного типа......( * 134
13.5. Спецификация адреса............... 135
13.6. Изменение представления ............... 137
13.7. Конфигурация и постоянные, зависящие от машины , , 137
13.8. Включение машинных команд............ 138
13.9. Взаимодействие с другими языками........• • 139
13.10. Ненадежное преобразование типов ,.,,..,,, 140
14. Ввод и вывод , , , , , ,................ 140
14.1. Ввод и вывод на уровне пользователя........' 140
14.2. Спецификация пакета INPUT_OUTPUT........ 14Б
14.3. Ввод и вывод текста........... . : \^1
14.4. Спецификация пакета ТЕХТ_Ю . ......... K>J
14.5. Пример ввода и вывода текста........... .51
14.6. Ввод и вывод низкого уровня . .......... °°
Приложения
А. Предопределенные атрибуты !...•• •'"'.'' №
В Предопределенные указания ....•• ''.'..'.'. ?
C. Предопределенное окружение.....' '..... ,'[?
D. Словарь терминов .......' !••••. ,~,
E. Сводка синтаксических правил.....' '•'
• ' * * ' * ' * . тст
Предметный указатель .......• . °J
4
ПРЕДИСЛОВИЕ К РУССКОМУ ИЗДАНИЮ
Предлагаемая советскому читателю книга — описание проекта языка программирования Ада1. Это универсальный язык, на котором можно записывать программы для решения самых различных задач, возникающих в деятельности человека. Во многих четко выраженных областях такой деятельности уже созданы удачные языки, занявшие доминирующее положение, например Кобол— для обработки деловой информации, Фортран — для научных расчетов. Основное назначение языка Ада — программирование самых разнообразных систем управления и вообще любых сложных программных систем. Кроме очевидной машинной зависимости и разнообразия типов данных, для программных систем характерно требование четко выраженной модульности и возможно-" сти организации разнообразных связей между модулями вплоть до их параллельной работы «в реальном времени». Все эти возможности в описываемом языке есть.
Язык Ада можно рассматривать как завершение некоторого этапа в развитии языков программирования. Последний из универсальных языков, вызвавший широкий резонанс, Алгол-68, как следует из его названия, появился в 1968 г. Теперь, более чем через 10 лет, появляется новый язык, претендующий на некоторую универсальность. Что обусловило разработку нового универсального языка? Почему пользователи и разработчики систем программирования с таким интересом встретили первые же публикации об Аде?
С одной стороны, машины (вычислительные) начали применяться практически во всех мало-мальски сложных системах управления. Это привело к ошеломляющему росту числа программистов. Однако оказалось, что для управления такой армадой никто и ничто не готово: нет стандартов на языки программирования, нет методик разработки программ, нет норм «выработки» и т. д. Сложившаяся ситуация вызвала к жизни всякого рода организационно-методические системы разработок: то, что мы пока называем «технологиями» программирова-
1 Preliminary Ada Reference Manual.— SIGPLAN Notices of the ACM. v. 14, 1979, № 6.
ния. Одно из естественных требований технологичности заключалось в стандартизации языка программирования и его окружения. Так возникла идея комплекса мероприятий, которые должны были завершиться созданием практически универсального языка программирования.
Обычная трудность при создании языка — неопределенность требований, которым он должен удовлетворять. Поэтому на первом из предусмотренных этапов разработки были сформулированы требования к языку.
Это позволило перейти к следующему этапу: их реализации, что входило уже в функции программистов-специалистов по системам программирования.
С другой стороны, уже с момента начала работ над Алголом-60 во всемирном сообществе ученых-программистов зрела уверенность, что язык можно создать на чисто научной основе: почти «вывести» его из ряда аксиом дедуктивными методами. Появились «теории ортогонального построения», апшшкативные системы, стали говорить о доказательстве свойств программ, об их правильности, о математической семантике и многом другом. Если Алгол-68, где была реализована лишь часть таких «регулярных» подходов, оказался слишком сложным, то созданный вслед за ним язык Паскаль оказался настолько небольшим, изящным и почти универсальным, что возникла уверенность: еще один рывок вперед и мы у желанной цели. Для этого рывка профессионалам из среды создателей языков нужно было лишь сказать, что включать в язык, а что —' нет. Дальше — дело техники.
Таким образом, теоретики программирования, получив сформулированные требования, предприняли попыт--ку методически построить универсальный язык. Этот процесс завершился проектом языка Ада.
Методика «внедрения» языка предусматривала его доработку после первой широкой публикации и выпуск итогового документа. И действительно в июле 1980 г. появилась некоторая версия такого «итогового» документа, однако издание его нам показалось нецелесообразным.
Прежде всего, издание любого стандарта, а «итоговый» документ в некотором роде должен претендовать на этот статус, — процесс трудоемкий и опубликовать его в том виде, как он есть, невозможно. Кроме того, описание стандарта - вообще не тот материал, по которому следует знакомиться с предметом стандартизации
Далее и заголовок, и, к сожалению, содержаниедан
ного документа не позволяют убрать кавычки, в которые заключено слово «итоговый». Документ имеет подзаголовок: «Proposed standard document», т. е. это лишь предложения для стандартизации. Содержание его не столь уж «прозрачно», чтобы он мог удовлетворять высоким требованиям- стандарта. Очевидно, этот документ будет еще дорабатываться и чем закончится его доработка— неизвестно. Вспомним, сколько лет перерабатывался и дорабатывался Алгол-68.
В связи с этим читателю предлагается публикация первоначального проекта как более популярного и легче воспринимаемого читателем, ибо в нем отсутствует строгость, присущая предложениям к стандартизации. Конечно, в последних язык уже несколько изменен, но можно с уверенностью сказать, что главное в первой публикации — передать не «букву», а «дух» языка, и в проекте это сделано удачнее.
Следует заметить также, что в современной проблематике алгоритмических языков широко обсуждаются три вопроса: определение типов данных и абстрактные данные, механизмы и смысл распараллеливания и, наконец, модульное программирование. Во всех трех областях есть сторонники строгих (их можно назвать статическими) решений, предусматривающих статический контроль-правильности использования механизмов языка на стадии трансляции, и сторонники вольных, «динамических» решений, где контроль либо откладывается на время выполнения программы, либо вообще отвергается. Если говорить о типах данных и модульности, то при проектировании языка его создатели исходили из максимально строгих статических принципов. Эти принципы себя еще не скомпрометировали. В вопросах распараллеливания подход был гораздо более динамичным. Мы уже не встречаемся с рассуждениями о взаимно исключающем исполнении, критических районах, мониторах и т. п. Поэтому можно легко написать комплекс задач, .который прекратит работу из-за взаимных блокировок, можно из двух процессов без синхронизации изменять общие переменные и г. п.
Конечно, во всех трех областях возможны самые различные решения и они отчасти диктуются уже исходными требованиями. Однако, как нам кажется, сами требования в этих вопросах недостаточно последовательны и точны, а зачастую и противоречивы. Поэтому
наибольшим переделкам язык начинает подвергаться именно в указанных выше областях. Вполне вероятно, что строгость приведет к абсурдности, и тот или иной механизм языка либо придется изъять, либо отойти в нем от принципов статичности. По-видимому, именно такое положение складывается с понятием типа для записи, ибо введение типа для записи с вариантами структуры является фактически еще одним механизмом введения «автономных» типов. Поэтому в языке начинает гипертрофированно разрастаться аппарат дискриминантов. В этом случае логичнее было бы вообще убрать механизм вариантов в записях. Язык упростится, но станет менее гибким. Сейчас же механизм дискриминантов сложен, но особой гибкости он не добавляет. Мы могли бы сделать аналогичные замечания, рассмотрев язык и в других аспектах. Но даже этот простой пример показывает, что существует целый ряд проблем, которые могут привести к длительному становлению языка Ада, и не следует ожидать быстрого появления его окончательного варианта. Пока же мы рекомендуем познакомиться с предлагаемым вариантом, который явно этого заслуживает.
Читателя может, конечно, смутить тот факт, что на «его» машине транслятора с языка Ада еще нет. Однако здесь следует обратить внимание на то, что язык программирования не является только средством, с помощью которого «кодируют» некоторый алгоритм. Обычно хороший язык программирования — это целая «система мышления», включающая абстрагированные понятия, характерные для той или иной области человеческой деятельности. Такая система не только служит для «передачи алгоритма в ЭВМ», но и помогает самому процессу алгоритмизации задачи. Вот почему не прекращается процесс создания языков программирования, с одной стороны, и не пропадает желание знакомиться с этими новыми языками, с другой (если речь не идет о «новом» языке кодирования). Именно поэтому мы рекомендуем настоящую книгу самому широкому кругу людей, связанных с ЭВМ. Студенты, аспиранты и начинающие профессионалы познакомятся в ней с наиболее передовыми идеями в области языков программирования. Опытные же программисты найдут здесь новые интересные идеи, касающиеся вопросов создания сложных систем и параллельной работы.
Д. Б. ПОДШИВАЛОВ

Цена: 100руб.

Назад

Заказ

На главную страницу

Hosted by uCoz