В.Ш. Кауфман - Языки программирования - концепции и принципы (1990) (1160787), страница 83
Текст из файла (страница 83)
(и временных) расчетов; принцип защиты авторского права; концепция
раздельной трансляции; динамический принцип выбора реакции на исключение;
принцип динамической ловушки, концепция наследуемости, критерий ЕГМ и др.
Аналогичным образом семиотическая позиция взаимодействовала с авторской
и технологической. А именно, занимаясь моделями Н, МТ, и Б, мы рассмотрели
различные виды семантик. При этом дедуктивная семантика не только позволяет
прояснить такой технологический элемент, как доказательство корректности
программ, но и позволяет обосновать требования к управляющим структурам в
ЯП. [Эти требования иногда неудачно называют принципами структурного
программирования; такая узкая трактовка отвлекает внимание от корректной
структуризации всех аспектов программирования, в частности, структуризации
данных].
Во-вторых, имея дело со всеми моделями, мы, с одной стороны, старались
демонстрировать возможность строить (выделять) достаточно четко
фиксированные модели, критерии, оценки и способы рассуждений (в том числе
убедительных обоснований, вплоть до строгого математического доказательства
содержательных свойств моделей).
Но, с другой стороны, мы постоянно подчеркивали сложность ЯП как
объекта конструирования и исследования, старались показать, как выводы о
свойствах проектных решений зависят от точки зрения, от самых общих подходов
к проектированию ЯП. Особенно наглядно это проявилось при сопоставлении
принципов сундука и чемоданчика. Ведь оказались под сомнением такие ранее
"обоснованные" решения, как указатель контекста, приватные типы и концепция
рандеву, а затем даже перечисляемые типы.
ЯП как сложное явление реального мира (лингвистическое, техническое,
социальное, математическое) всегда уязвимо с точки зрения односторонней
критики. ЯП всегда - плод компромиссов между технологическими потребностями
и реализационными возможностями. Продуктивное творчество в области ЯП -
скорее высокое искусство, чем предмет точной инженерной или тем более
математической науки. С другой стороны, возникнув как артефакты, творения
отдельных людей или относительно небольших авторских коллективов, ЯП
продолжают жить по законам, весьма напоминающим законы развития естественных
языков.
Содержание
Предисловие 2
Часть 1. Современное состояние языков программирования 4
1. Концептуальная схема языка программирования 4
1.1. Что такое язык программирования (ЯП) 4
1.2. Метауровень 4
1.3. Модель передачи сообщения 5
1.4. Классификация недоразумений 5
1.5. Отступление об абстракции-конкретизации.
Понятие модели 6
1.6. Синтактика, семантика, прагматика 7
1.7. Зачем могут понадобиться знания о ЯП 8
1.8. Принцип моделирования ЯП 9
1.9. Пять основных позиций рассмотрения ЯП 10
1.10. Что такое производство программных услуг 10
1.11. Производство программных услуг - основная
цель программирования 12
1.12. Сложность как основная проблема
программирования. 13
1.13. Источники сложности. 13
1.14. Два основных средства борьбы со сложностью.
Основной критерий качества ЯП 15
1.18. Язык программирования как знаковая система 15
1.19. Разновидности программирования 16
1.20. Понятие о базовом языке 17
1.21. Концептуальная схема рассмотрения ЯП 18
2. Пример современного базового ЯП (модель А) 19
2.1. Общее представление о ЯП Ада 19
Пример простой программы на Аде 21
2.2. Обзор языка Ада 22
2.2.1 Модули 22
2.2.2. Объявления и операторы 23
2.2.3 Типы данных 24
2.3. Пошаговая детализация средствами Ады 26
2.4. Замечания о конструктах 29
2.5. Как пользоваться пакетом управление_сетью 31
2.6. Принцип раздельного определения, реализации и
использования услуг (принцип РОРИУС) 37
2.7. Принцип защиты абстракций 37
3. Важнейшие абстракции: данные, операции, связывание 38
3.1 Принцип единства и относительности трех абстракций 38
3.2. Связывание 39
3.3. От связывания к пакету 40
3.3.1. Связывание и теория трансляции 42
3.5. Принцип цельности 45
3.5.1. Принцип цельности и нормальные алгоритмы 46
3.5.2. Принцип цельности и Ада. Критерий цельности 47
4. Данные и типы 48
4.1. Классификация данных 48
4.2. Типы данных 50
4.2.1. Динамические, статические и относительно
статические ЯП. 50
4.2.2. Система типов как знаковая система 52
4.2.6. Строгая типизация и уникальность типа 54
2.2.7. Критичные проблемы, связанные с типами 54
4.2.8. Критичные потребности и
критичные языковые проблемы 54
4.2.9. Проблема полиморфизма 55
4.2.10. Янус-проблема 56
4.2.12. Критерий содержательной полноты ЯП.
Неформальные теоремы 57
4.3. Регламентированный доступ и типы данных
58
4.3.1. Задача моделирования многих сетей 58
4.3.2. Приватные типы данных 60
4.3.3. Строго регламентированный доступ.
Ограниченные приватные типы 62
4.3.4. Инкапсуляция 63
4.4. Характеристики, связанные с типом.
Класс значений, базовый набор операций 63
4.5. Воплощение концепции уникальности типа.
Определение и использование типа в Аде (начало) 64
4.5.1. Объявление типа. Конструктор типа.
Определяющий пакет 64
4.6. Конкретные категории типов 65
4.6.1. Перечисляемые типы. "Морская задача" 65
4.6.2. Дискретные типы 71
4.6.3. Ограничения и подтипы 73
4.6.4. Квазистатический контроль 75
4.6.5. Подтипы 76
4.6.6. Принцип целостности объектов 77
4.6.7. Объявление подтипа 78
4.6.8. Подтипы и производные типы. Преобразования типа 78
4.6.9. Ссылочные типы (динамические объекты) 80
4.7. Типы как объекты высшего порядка.
Атрибутные функции 81
4.7.1. Статическая определимость типа 81
4.7.2. Почему высшего порядка? 81
4.7.3. Действия с типами 82
4.8. Родовые (настраиваемые) сегменты 83
4.8. Числовые типы (модель числовых расчетов) 84
4.8.1. Суть проблемы 84
4.8.2. Назначение модели расчетов 85
4.8.3. Классификация числовых данных 85
4.8.4. Зачем объявлять диапазон и точность 86
4.8.5. Единая модель числовых расчетов 86
4.8.7. Допустимые числа 87
4.8.8. Управление операциями 87
4.9. Управление представлением 88
4.10. Классификация данных и система типов Ады 90
4.11. Предварительный итог по модели А 92
5. Раздельная компиляция 92
5.1. Понятие модуля 92
5.2. Виды трансляций. 92
5.3. Раздельная трансляция 93
5.4. Связывание трансляционных модулей 93
5.4.1. Модули в Аде. 93
5.5. Принцип защиты авторского права. 94
6. Асинхронные процессы 95
6.1. Основные проблемы 95
6.2. Семафоры Дейкстры 98
6.3. Сигналы 100
6.4. Концепция внешней дисциплины. 101
6.5. Концепция внутренней дисциплины: мониторы 102
6.6. Рандеву 105
6.7. Проблемы рандеву 106
6.8. Управление асимметричным рандеву
(семантика вспомогательных конструктов) 108
6.9. Реализация семафоров, сигналов и
мониторов посредством асимметричного рандеву 109
6.10. Управление асинхронными процессами в Аде 111
7. Нотация 113
7.1. Проблема знака в ЯП 113
7.2. Определяющая потребность 114
7.3. Основная абстракция 114
7.4. Проблема конкретизации эталонного текста 115
7.5. Стандартизация алфавита 115
7.6. Основное подмножество алфавита 116
7.7. Алфавит языка Ада 116
7.8. Лексемы 117
7.9. Лексемы в Аде 117
8. Исключения 118
8.1. Основная абстракция 118
8.2. Определяющие требования 119
8.3. Аппарат исключений в ЯП 121
8.4. Дополнительные особенности обработки исключений 126
9. Библиотека 131
9.1. Cтруктура библиотеки 131
9.2. Компилируемый (трансляционный) модуль 131
9.3. Порядок компиляции и перекомпиляции
(создания и модификации программной библиотеки) 132
9.4. Резюме : логическая и физическая
структуры программы 132
10. Именование и видимость (на примере Ады) 133
10.1. Имя как специфический знак 133
10.2. Имя и идентификатор 133
10.3. Проблема видимости 133
10.4. Аспекты именования 134
10.5. Основная потребность и определяющие требования 134
10.6. Конструкты и требования, связанные с именованием 135
10.7. Схема идентификации 137
10.7.1. Виды объявлений в Аде: 137
10.7.3. Области локализации и "пространство имен"
Ада-программы 139
10.7.4. Область непосредственной видимости 140
10.7.5. Идентификация простого имени 141
10.8. Недостатки именования в Аде 142
11. Обмен с внешней средой 143
11.1. Специфика обмена 143
11.2. Назначение и структура аппарата обмена 146
11.3. Файловая модель обмена в Аде 147
11.4. Программирование специальных устройств 153
12. Два альтернативных принципа создания ЯП 155
12.1. Принцип сундука 155
12.2. Закон распространения сложности ЯП 154
12.3. Принцип чемоданчика 154
12.4. Обзор языка Модула-2 154
12.4.1. Характеристика Модулы-2 в координатах
фон-неймановского языкового пространства
(технологическая позиция) 157
12.4.2. Характеристика Модулы-2 в терминах
концептуальной схемы 158
12.5. Пример М-программы 158
12.5.1. Управление сетями на Модуле-2 158
12.5.2. Определяющий модуль 158
12.5.3. Использующий модуль 160
12.5.4. Реализующий модуль 160
12.6. Языковая ниша 163
12.7. Принцип чемоданчика в проектных решениях
ЯП Модула-2 164
12.7.1. Видимость 164
12.7.2. Инкапсуляция 165
12.7.3. Обмен 166
12.8. Принцип чайника 170
12.9. ЯП Оберон 171
12.9.1. От Модулы-2 к Оберону 171
12.9.2. Управление сетями на Обероне. 173
Часть 2. Перспективы языков программирования 177
13. Перспективные модели языка 177
13.1. Введение 177
13.3. Ситуационное программирование - модель
Маркова-Турчина (модель МТ) 180
13.3.1. Перевод в польскую инверсную запись (ПОЛИЗ) 180
13.3.2. Модификации модели Маркова (введение в Рефал) 181
13.3.3. Исполнитель (МТ-машина) 185
13.3.4. Программирование в модели МТ 185
13.3.5. Основное семантическое соотношение
в модели МТ 186
13.3.6. Пример вычисления в модели МТ 187
13.3.8. Аппликативное программирование 189
13.3.9. Структуризация поля определений: МТ-функции 189
14. Функциональное программирование (модель Б) 191
14.1. Функциональное программирование в модели МТ 191
14.1.1. Модель МТ с точки зрения концептуальной схемы 191
14.1.2. Модель МТ и Лисп 191
14.1.3. Критерий концептуальной ясности и
функции высших порядков 192
14.1.4. Зачем нужны функции высших порядков 193
14.1.6. Примеры структурирующих форм 194
14.1.8. Пример программы в стиле Бэкуса 196
14.2. Функциональное программирование в стиле Бэкуса
(модель Б) 198
14.2.1. Модель Бэкуса с точки зрения
концептуальной схемы 198
14.2.2. Объекты 198
14.2.3. Аппликация 199
14.2.4. Функции 199
14.2.5. Условные выражения Маккарти 199
14.2.6. Примеры примитивных функций 200
14.2.7. Определения 203
14.2.8. Программа вычисления факториала 203
14.2.9. Программа перемножения матриц 205
15. Доказательное программирование (модель Д) 208
15.1. Зачем оно нужно 208
15.2. Доказательное программирование методом Бэкуса 209
15.2.1. Алгебра программ в модели Б 209
15.2.2. Эквивалентность двух программ
перемножения матриц 210
15.2.3. Модель Д 213
15.2.4. Дедуктивная семантика 215
15.2.5. Компоненты исчисления Хоара 216
15.2.6. Правила преодоления конструктов языка Д 218
15.2.7. Применение дедуктивной семантики 223
16. Реляционное программирование (модель Р) 226
16.1. Предпосылки 226
16.2. Ключевая идея 227
16.3. Пример 228
16.4. Предопределенные отношения 232
16.5. Связь с моделями МТ и Б. 233
16.5.1. Путь от модели Б 233
16.5.2. Путь от модели МТ 235
17. Параллельное программирование в Оккаме-2
(модель О). 236
17.1. Принципы параллелизма в Оккаме. 236
17.2. Первые примеры применения каналов. 237
17.3. Сортировка конвейером фильтров 238