ЮрИнфоР >>> Библиотека ЮрИнфоР >>> Компьютерные науки и информационные технологии >>>
Конструкции языков программирования
        
  | 
      
        
  | 
    ||||||||||||||||
Издание осуществлено при поддержке РФФИ, проект 01-01-14068
В работе изложены основы, касающихся разработки, реализации и применения конструкций как императивных, так и функциональных языков программирования. Значительное внимание уделяется применению денотационной семантики, позволяющей в полной мере извлечь преимущества объектно-ориентированного подхода, что, в конечном счете, позволяет построить результирующую вычислительную модель чисто функционального типа.
Изложение материала сопровождается детально разобранными примерами, которые снабжены комментариями, помогающими уяснить реализацию конструкций различных языков.
Книгу можно использовать в качестве учебника или справочного пособия. Она будет полезна как студентам и аспирантам, так и профессионалам в области компьютерных наук, информационных технологий и программирования.
См. также
Содержание
Предисловие редактора серии 1
Предисловие 3
Введение 13
Модель вычислений 17
- 1.1 Возможности модели вычислений 17
 - 1.2 Синтаксис, семантика и прагматика 19
 - 1.3 Формальная семантика и ее возможности 20
 - 1.4 Денотационная семантика 23
 - 1.5 Абстрактные объекты 25
 - 1.6 Технологическая основа 26
 - 1.7 Унификация логики программ и систем баз данных 27
 
2. Потоковые диаграммы 29
- 2.1 Основные идеи теории вычислений 29
 - 2.2 Выражения, представляющие элементы 30 
  
- 2.2.1 Тождественная функция 31
 - 2.2.2 Константная функция 32
 - 2.2.3 Произведение 33
 - 2.2.4 Сумма 34
 
 - 2.3 Представление диаграммами 35 
  
- 2.3.1 Выражения, представляющие диаграммы 39
 - 2.3.2 Универсум для рассуждения о диаграммах 40
 
 - 2.4 Основные математические понятия и определения 41
 - 2.5 Идея потоковых диаграмм 43 
  
- 2.5.1 Построение набора примитивных сущностей 45
 
 - 2.6 Абстрактная потоковая машина 46 
  
- 2.6.1 Значение выражений 47
 - 2.6.2 Оценивающее отображение 49
 - 2.6.3 Означивание while-цикла 51
 
 - 2.7 Циклические диаграммы 53
 - 2.8 Синтаксический анализ $ 61
 
3. Пример непосредственной семантики для модели вычислений 63
- Полнота описания 63
 - Ясность 63
 - Естественность 63
 - Реализм 63 
  
- 3.1 Неформальный синтаксис 64
 - 3.2 Неформальная семантика 64 
- 3.2.1 Неформальная семантика выражений 65
 - 3.2.2 Неформальная семантика команд 67
 
 - 3.3 Формальная семантика 68 
- 3.3.1 Синтаксис 68
 - 3.3.2 Состояние, память, вход, выход и значение 68
 - 3.3.3 Семантические функции 69 
- Денотаты выражений 69
 - Денотаты команд 71
 
 - 3.3.4 Семантические предложения 71 
- Семантические предложения для выражений 71
 - Семантические предложения для команд 73
 
 - 3.3.5 Особенности формальной семантики 74
 
 
 
4. Исходные понятия и обозначения: теория вычислений 75
- 4.1 Абстрактный синтаксис 75
 - 4.2 Подходы к построению семантики 77
 - 4.3 Домены 80 
- 4.3.1 Рекурсивно определенные функции 80
 - 4.3.2 Рекурсивно определенные множества 81
 - 4.3.3 Теория вычислений 82
 - 4.3.4 Математизация в программировании 83
 
 - 4.4 Определение доменов 83 
- 4.4.1 Стандартные домены 83
 - 4.4.2 Конечные домены 84
 - 4.4.3 Конструкторы доменов 84 
- Функциональное пространство $[D_1 o D_2]$ 84
 - Прямое, или декартово произведение 85
 - Последовательности ^*$ 85
 - Дизъюнктная сумма $[D_1 + D_2 + …+ D_n]$ 86
 
 - 4.4.4 Равенства среди доменов 87
 
 - 4.5 Функции 88 
- 4.5.1 Ламбда-обозначения 89 
- Введение $\lambda $-обозначений 90
 -  
Использование $\lambda $-обозначений 91 
Явное указание области определения и области значения 91
Использование в функциях нескольких аргументов 91 - Применение $\lambda $-выражений к аргументам 92
 - Замена связанных переменных 93
 
 - 4.5.2 Функции высших порядков 93
 - 4.5.3 Соглашения об опускании скобок 94
 - 4.5.4 Каррирование 96
 - 4.5.5 Условные функции 98
 - 4.5.6 Case-конструкция 99
 - 4.5.7 Функции коррекции 100
 - 4.5.8 Порождающие функции 100
 - 4.5.9 Способы определения функций, включая рекурсию 101 
- Нерекурсивные функции 101
 - Рекурсивные функции 102
 
 - 4.5.10 Исключение переменных 103
 - 4.5.11 Where-конструкция 104 
- Where 104
 - Whererec 105
 
 - 4.5.12 Композиция и построение последовательности 105 
- Композиция 105
 -  
Построение последовательности 105 
Вариант 1 106
Вариант 2 106 
 
 - 4.5.1 Ламбда-обозначения 89 
 
5. Пример денотационного описания для модели вычислений 109
- 5.1 Абстрактный синтаксис 110 
- 5.1.1 Синтаксические домены 110
 - 5.1.2 Синтаксические предложения 110
 
 - 5.2 Семантика 110 
- 5.2.1 Семантические домены 110
 - 5.2.2 Вспомогательные функции 111 
- result 111
 - donothing 111
 - checkNum 111
 - checkBool 111
 
 - 5.2.3 Семантические функции 111
 - 5.2.4 Семантические предложения 112 
- Предложения для выражений 112
 - Предложения для команд 112
 
 
 
6. Стандартная семантика 113
- 6.1 Продолжения 114 
- 6.1.1 Представление `остатка программы' 114
 - 6.1.2 Продолжения команд 115
 - 6.1.3 Продолжение выражения 116
 - 6.1.4 Непосредственная семантика и семантика продолжений 116
 
 - 6.2 Размещение, запас и среда 117 
- 6.2.1 Разделение 117
 - 6.2.2 Переменная и размещение 118
 - 6.2.3 Запас 118
 - 6.2.4 Среда 119
 
 - 6.3 Стандартные домены значений 120
 - 6.4 Блоки, декларации и диапазоны 120
 - 6.5 Стандартные домены продолжений 122 
- 6.5.1 Продолжение команды 122
 - 6.5.2 Продолжение выражения 122
 - 6.5.3 Продолжение декларации 123
 
 - 6.6 Стандартные семантические функции 123 
- Id 124
 - id 124
 - * 124
 -  
Семантические предложения 124 
Предложения для выражений 124
Предложения для команд 124
Предложения для декларации 125 
 - 6.7 Преобразование продолжений 125
 - 6.8 Присваивание и значения L, R 128
 - 6.9 Процедуры и функции 131 
- 6.9.1 Процедуры 131
 - 6.9.2 Функции 133
 - 6.9.3 Свод основных соотношений 133 
- Домены 133
 - Предложения для деклараций 134
 - Предложения для вызовов 134
 
 
 
7. Пример денотационной семантики 135
- 7.1 Пример синтаксиса 136 
- 7.1.1 Синтаксические домены 136
 - 7.1.2 Синтаксические предложения 136
 
 - 7.2 Пример семантики 137 
- 7.2.1 Семантические домены 137
 - 7.2.2 Семантические функции 138
 - 7.2.3 Семантические предложения 138 
- Программы 138
 - Выражения 139
 - Команды 140
 - Декларации 141
 
 
 - 7.3 Пример означивания 142
 
8. Выходы и передачи управления 145
- 8.1 Выходы 145 
- 8.1.1 Выходы из команд 145 
- trap 145
 - escapeto 146
 
 - 8.1.2 Выходы из выражений 147
 - 8.1.3 valof и resultis 148
 
 - 8.1.1 Выходы из команд 145 
 - 8.2 Переходы 149 
- 8.2.1 Семантика переходов 150 
- $ :=$, output $, (E_2)$ 151
 - if $ then $ else $ 151
 - while $ do $ 152
 - begin $; $ end 152
 - $; $ 152
 - goto $ 152
 - $: $ 153
 
 - 8.2.2 Дополнительные аспекты семантики переходов 153
 - 8.2.3 Присваивание переменным меток в качестве значений 155
 
 - 8.2.1 Семантика переходов 150 
 
9. Разновидности процедур и функций 157
- 9.1 Число параметров 158 
- 9.1.1 Процедуры и функции без параметров 158
 - 9.1.2 Процедуры и функции более, чем с одним параметром 159
 
 - 9.2 Рекурсивные процедуры и функции 160
 - 9.3 Статическое и динамическое связывание 162 
- 9.3.1 Семантика связывания 162
 - 9.3.2 Особенности динамического связывания 162
 
 - 9.4 Механизмы передачи параметров 163 
- 9.4.1 Вызов по значению 163 
- Представление вызова по значению 164
 - Различия семантик вызова по значению 165
 
 - 9.4.2 Вызов по ссылке 166 
- Простой вызов по ссылке 166
 
 - 9.4.3 Вызов по значению и результату 167
 
 - 9.4.1 Вызов по значению 163 
 - 9.5 Механизмы вызова процедур 168 
- 9.5.1 Вызов по замыканию 169
 - 9.5.2 Вызов по тексту 170
 - 9.5.3 Вызов по обозначению 171
 - 9.5.4 Конструкции цитирования 172
 
 - 9.6 Краткий обзор механизмов вызова и передачи 172
 - 9.7 Абстракции: выражения, обозначающие процедуры и функции 174
 - 9.8 Механизмы связывания деклараций 175
 
10. Структуры данных 177
- 10.1 Операции над множествами 178
 - 10.2 Ссылки 179
 - 10.3 Массивы 179
 - 10.4 Записи 182
 - 10.5 Выражения, имеющие структуру данных в качестве значения 184
 - 10.6 Файлы 185
 - 10.7 Семантика файлов 186
 
11. Конструкции итераций 189
- 11.1 repeat C until E 189
 - 11.2 Циклы event 189
 - 11.3 For-предложения 190
 - 11.4 Обобщения for-предложения 193
 
12. Типы 195
- 12.1 Разновидности типов 196
 - 12.2 Правильно типизированные программы и проверка типов 196 
- 12.2.1 Проверка типов 197
 - 12.2.2 Схема денотационного описания проверки типов 198
 
 - 12.3 Семантика типов 199
 
13. Аспекты функционального программирования 201
- 13.1 Проблематика 202
 - 13.2 Основные характеристики функциональных языков 203 
- Определение функции 206
 - Программирование в функционалах 206
 - Функции высших порядков 207
 - Представление императивных управляющих конструкций 209
 - Продолжения 210
 
 - 13.3 Представление распространенных функциональных языков 212 
- 13.3.1 Meta Language 212 
- Конструирование данных 212
 - Функции 213
 - Полиморфная сильная типизация 214
 
 
 - 13.3.1 Meta Language 212 
 - 13.4 Основные методы реализации 216 
- 13.4.1 SECD-машина 216
 - 13.4.2 Редукция графа 217
 - 13.4.3 Категориальная абстрактная машина 218
 
 - 13.5 Полезные качества функционального программирования 218 
- 13.5.1 Простота семантики 219 
- Семантика функциональных языков 219 
  
Переменная 219
Константный объект 220
Абстракция 220
Аппликация 220 - Пример денотационной семантики императивного языка 221
 
 - Семантика функциональных языков 219 
  
 - 13.5.2 Проверка корректности программы 222
 - 13.5.3 Преобразование программы 223
 
 - 13.5.1 Простота семантики 219 
 - 13.6 Синтаксис упрощенного функционального языка 224 
- 13.6.1 Функциональный язык первого порядка 224 
- Программа 224
 - Выражение 224
 
 - 13.6.2 Функциональный язык высших порядков 224 
- Программа 224
 - Выражение 225
 
 
 - 13.6.1 Функциональный язык первого порядка 224 
 - 13.7 Получение из $\lambda $-выражений машинных инструкций 225 
- 13.7.1 Компилирование правила вычисления 227 
-  
Компилирование композиции 228 
Правила преобразования 229
Комментарии 229
Соглашение 230 - Обоснование корректности преобразования 233
 
 -  
Компилирование композиции 228 
 - 13.7.2 Компилирование управления средой 234 
- Комбинаторы как машинные инструкции 236
 - Равенства между комбинаторами 237
 - Алгоритм абстракции 238
 - Шаги алгоритма абстракции 239
 
 - 13.7.3 Большой пример 243 
-  
Вспомогательные примеры 243 
Бинарный оператор 243
Унарный оператор 244
Тождественное преобразование 244
Аппликация 244
Сложение двух выражений 244
Частный случай аппликации 245 - Дополнительные равенства 247
 -  
Вычисление факториала (продолжение) 247 
Проведение оптимизации вычислений 249
Общий случай 249 
 -  
Вспомогательные примеры 243 
 
 - 13.7.1 Компилирование правила вычисления 227 
 - 13.8 Ленивые и жадные вычисления 255 
Литература 257
Предметный указатель 263
Глоссарий