Математика | ||||
Язык программирования Ада- В. М. Курочкина | ||||
Язык программирования Ада (предварительное 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руб. |
||||