|
Тираж данной книги закончился.
|
Книга, ставшая бестселлером в США, посвящена всестороннему обсуждению основных концепций языков программирования. Автор описывает фундаментальные понятия программирования на примере вопросов разработки различных языковых конструкций, подвергая критическому анализу их реализацию в широком спектре языков программирования, таких как FORTRAN, PASCAL, PL/1, C, C++, Ada, Java, Smalltalk, Eiffel и LISP. Материал книги охватывает все парадигмы программирования, начиная с функциональной и заканчивая объектно-ориентированной, и, несомненно, представляет интерес и как учебник по современным методологиям.
Понравилась книга? Порекомендуйте её друзьям и коллегам: Твитнуть |
Книги, рекомендуемые вместе с этой книгой:
Раздел каталога:
Предисловие 18
Глава 1. Вводные замечания 23
Глава 2. Обзор основных языков программирования 57
Глава 3. Описание синтаксиса и семантики 123
Глава 4. Имена, связывание, проверка типов и области видимости 173
Глава 5. Типы данных 213
Глава 6. Выражения и операторы присваивания 275
Глава 7. Структуры управления на уровне операторов 303
Глава 8. Подпрограммы 345
Глава 9. Реализация подпрограмм 393
Глава 10. Абстрактные типы данных 429
Глава 11. Поддержка объектно-ориентированного программирования 451
Глава 12. Параллельность 503
Глава 13. Обработка исключительных ситуаций 545
Глава 14. Функциональные языки программирования 579
Глава 15. Языки логического программирования 615
ЛИТЕРАТУРА 649
Предметный указатель 661
| ПРЕДИСЛОВИЕ | 10 |
| Изменения, внесенные в пятом издании | 11 |
| Указания преподавателю | 12 |
| Приложения | 12 |
| Доступность языкового процессора | 12 |
| Благодарности | 12 |
| Об авторе | 13 |
| 1. ВВОДНЫЕ ЗАМЕЧАНИЯ | 13 |
| 1.1. Для чего нужно изучать концепции языков программирования | 16 |
| 1.2. Области применения программирования | 18 |
| 1.2.1. Научные приложения | 18 |
| 1.2.2. Коммерческие приложения | 18 |
| 1.2.3. Искусственный интеллект | 18 |
| 1.2.4. Системное программирование | 19 |
| 1.2.5. Языки подготовки сценариев | 19 |
| 1.2.6. Специализированные языки программирования | 20 |
| 1.3. Критерии оценки языков программирования | 20 |
| 1.3.1. Читабельность | 21 |
| 1.3.2. Легкость создания программ | 25 |
| 1.3.3. Надежность | 27 |
| 1.3.4. Стоимость | 28 |
| 1.4. Факторы, влияющие на разработку языка | 29 |
| 1.4.1. Архитектура компьютера | 29 |
| 1.4.2. Методологии программирования | 31 |
| 1.5. Категории языков | 32 |
| 1.6. Компромиссы при разработке языка | 32 |
| 1.7. Методы реализации | 33 |
| 1.7.1. Компиляция | 34 |
| 1.7.2. Чистая интерпретация | 37 |
| 1.7.3. Смешанные системы реализации | 38 |
| 1.8. Среды программирования | 39 |
| 2. ОБЗОР ОСНОВНЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ | 42 |
| 2.5. Первый шаг к совершенствованию: язык ALGOL 60 | 42 |
| 2.1. Язык Plankalkül Конрада Цузе | 44 |
| 2.1.1. Исторические предпосылки | 44 |
| 2.1.2. Обзор языка | 45 |
| 2.2. Минимальное программирование на аппаратном уровне: псевдокоды | 46 |
| 2.2.1. Язык Short Code | 46 |
| 2.2.2. Система Speedcoding | 47 |
| 2.2.3. Система "компиляции" UNIVAC | 47 |
| 2.2.4. Смежная работа | 47 |
| 2.3. Компьютер IBM 704 и язык FORTRAN | 47 |
| 2.3.1. Историческая ретроспектива | 48 |
| 2.3.2. Процесс разработки | 48 |
| 2.3.3. Обзор языка FORTRAN I | 49 |
| 2.3.4. Обзор языка FORTRAN II | 50 |
| 2.3.5. Языки FORTRAN IV, FORTRAN 77 и FORTRAN 90 | 50 |
| 2.3.6. Оценка | 51 |
| 2.4. Функциональное программирование: язык LISP | 52 |
| 2.4.1. Истоки работ в области искусственного интеллекта и обработка списков | 52 |
| 2.4.2. Процесс разработки языка LISP | 52 |
| 2.4.3. Обзор языка | 53 |
| 2.4.4. Оценка | 54 |
| 2.4.5. Два потомка языка LISP | 55 |
| 2.4.6. Родственные языки | 55 |
| 2.5. Первый шаг к совершенствованию: язык ALGOL 60 | 56 |
| 2.5.1. Историческая ретроспектива | 56 |
| 2.5.2. Начальная стадия разработки | 56 |
| 2.5.3. Обзор языка ALGOL 58 | 57 |
| 2.5.4. Принятие отчета о языке ALGOL 58 | 57 |
| 2.5.5. Процесс разработки языка ALGOL 60 | 58 |
| 2.5.6. Обзор языка ALGOL 60 | 58 |
| 2.5.7. Оценка языка ALGOL 60 | 59 |
| 2.6. Компьютеризация коммерческих записей: язык COBOL | 60 |
| 2.6.1. Исторические предпосылки | 60 |
| 2.6.2. Язык FLOW-MATIC | 60 |
| 2.6.3. Процесс разработки языка COBOL | 61 |
| 2.6.4. Оценка | 61 |
| 2.7. Начало разделения времени: язык BASIC | 63 |
| 2.7.1. Процесс разработки | 63 |
| 2.7.2. Обзор языка | 64 |
| 2.7.3. Оценка | 64 |
| 2.8. Все для всех: язык PL/I | 65 |
| 2.8.1. Исторические предпосылки | 65 |
| 2.8.2. Процесс разработки | 66 |
| 2.8.3. Обзор языка | 66 |
| 2.8.4. Оценка | 67 |
| 2.9. Два ранних динамических языка: APL и SNOBOL | 68 |
| 2.9.1. Истоки и характеристики языка APL | 68 |
| 2.9.2. Происхождение и характеристики языка SNOBOL | 68 |
| 2.10. Возникновение абстракции данных: язык SIMULA 67 | 69 |
| 2.10.1. Процесс разработки | 69 |
| 2.10.2. Обзор языка | 69 |
| 2.11. Ортогональная структура: язык ALGOL 68 | 70 |
| 2.11.1. Процесс разработки | 70 |
| 2.11.2. Обзор языка | 70 |
| 2.11.3. Оценка | 70 |
| 2.12. Несколько важных наследников семейства языков ALGOL | 71 |
| 2.12.1. Преднамеренная простота: язык Pascal | 71 |
| 2.12.2. Машинно-независимый язык: С | 73 |
| 2.12.3. Другие потомки языка ALGOL | 75 |
| 2.13. Программирование, основанное на логике: язык Prolog | 76 |
| 2.13.1. Процесс разработки | 76 |
| 2.13.2. Обзор языка | 76 |
| 2.13.3. Оценка | 77 |
| 2.14. Величайший проект в истории: язык Ada | 77 |
| 2.14.1. Историческая ретроспектива | 77 |
| 2.14.2. Процесс разработки | 77 |
| 2.14.3. Обзор языка | 78 |
| 2.14.4. Оценка | 79 |
| 2.14.5. Язык Ada 95 | 80 |
| 2.15. Объектно-ориентированное программирование: язык Smalltalk | 80 |
| 2.15.1. Процесс разработки | 81 |
| 2.15.2. Обзор языка | 81 |
| 2.15.3. Оценка | 82 |
| 2.16. Объединение императивных и объектно-ориентированных свойств: язык C++ | 83 |
| 2.16.1. Процесс разработки | 83 |
| 2.16.2. Обзор языка | 84 |
| 2.16.3. Оценка | 84 |
| 2.16.4. Родственный язык: Eiffel | 84 |
| 2.17. Программирование в World Wide Web: язык Java | 85 |
| 2.17.1. Процесс разработки | 85 |
| 2.17.2. Обзор языка | 85 |
| 2.17.3. Оценка | 86 |
| 3. ОПИСАНИЕ СИНТАКСИСА И СЕМАНТИКИ | 90 |
| 3.1. Предисловие | 91 |
| 3.2. Общая задача описания синтаксиса | 91 |
| 3.2.1. Устройства распознавания языков | 92 |
| 3.2.2. Генераторы языков | 92 |
| 3.3. Формальные методы описания синтаксиса | 93 |
| 3.3.1. Форма Бэкуса-Наура и контекстно-свободные грамматики | 93 |
| 3.3.2. Расширенная форма БНФ | 101 |
| 3.3.3. Синтаксические графы | 102 |
| 3.3.4. Грамматики и устройства распознавания языков | 103 |
| 3.4. Рекурсивный нисходящий синтаксический анализ | 103 |
| 3.5. Атрибутивные грамматики | 105 |
| 3.5.1. Статическая семантика | 105 |
| 3.5.2. Основные понятия | 105 |
| 3.5.3. Определение атрибутивных грамматик | 105 |
| 3.5.4. Внутренние атрибуты | 106 |
| 3.5.5. Примеры атрибутивных грамматик | 106 |
| 3.5.6. Вычисление значений атрибутов | 108 |
| 3.5.7. Оценка | 109 |
| 3.6. Описание смысла программ: динамическая семантика | 109 |
| 3.6.1. Операционная семантика | 109 |
| 3.6.2. Аксиоматическая семантика | 111 |
| 3.6.3. Денотационная семантика | 118 |
| 4. ИМЕНА, СВЯЗЫВАНИЕ, ПРОВЕРКА ТИПОВ И ОБЛАСТИ ВИДИМОСТИ | 125 |
| 4.1. Предисловие | 127 |
| 4.2. Имена | 127 |
| 4.2.1. Вопросы структуры | 127 |
| 4.2.2. Виды имен | 127 |
| 4.2.3. Специальные слова | 128 |
| 4.3. Переменные | 129 |
| 4.3.1. Имя | 129 |
| 4.3.2. Адрес | 129 |
| 4.3.3. Тип | 130 |
| 4.3.4. Значение | 130 |
| 4.4. Концепция связывания | 131 |
| 4.4.1. Связывание атрибутов с переменными | 131 |
| 4.4.2. Связывание типов | 131 |
| 4.4.3. Связывание переменных с ячейками памяти и время их жизни | 134 |
| 4.5. Проверка типов | 136 |
| 4.6. Строгая типизация | 137 |
| 4.7. Совместимость типов | 138 |
| 4.8. Область видимости | 140 |
| 4.8.1. Статическая область видимости | 140 |
| 4.8.2. Блоки | 141 |
| 4.8.3. Оценка статического обзора данных | 142 |
| 4.8.4. Динамические области видимости | 144 |
| 4.8.5. Оценка динамического обзора данных | 145 |
| 4.9. Область видимости переменных и время их жизни | 146 |
| 4.10. Среды ссылок | 146 |
| 4.11. Именованные константы | 148 |
| 4.12. Инициализация переменных | 149 |
| 5. ТИПЫ ДАННЫХ | 155 |
| 5.1. Введение | 156 |
| 5.2. Элементарные типы данных | 158 |
| 5.2.1. Числовые типы | 158 |
| 5.2.2. Булевские типы | 159 |
| 5.2.3. Символьные типы | 160 |
| 5.3. Символьные строки | 160 |
| 5.3.1. Вопросы разработки | 160 |
| 5.3.2. Строки и действия над ними | 160 |
| 5.3.3. Варианты длины строк | 162 |
| 5.3.4. Оценка | 162 |
| 5.3.5. Реализация символьных строк | 163 |
| 5.4. Порядковые типы, определяемые пользователем | 163 |
| 5.4.1. Перечислимые типы | 164 |
| 5.4.2. Ограниченные типы | 165 |
| 5.4.3. Реализация порядковых типов, определяемых пользователем | 166 |
| 5.5. Массивы | 166 |
| 5.5.1. Вопросы разработки | 167 |
| 5.5.2. Массивы и индексы | 167 |
| 5.5.3. Связывания индексов и категории массивов | 168 |
| 5.5.4. Количество индексов массива | 170 |
| 5.5.5. Инициализация массива | 170 |
| 5.5.6. Операции над массивами | 171 |
| 5.5.7. Сечения | 172 |
| 5.5.8. Оценка | 173 |
| 5.5.9. Реализация типов массивов | 173 |
| 5.6. Ассоциативные массивы | 176 |
| 5.6.1. Структура и операции | 176 |
| 5.6.2. Реализация ассоциативных массивов | 177 |
| 5.7. Записи | 177 |
| 5.7.1. Описания записей | 178 |
| 5.7.2. Ссылки на поля записи | 178 |
| 5.7.3. Операции над записями | 179 |
| 5.7.4. Оценка | 180 |
| 5.7.5. Реализация записей | 180 |
| 5.8. Объединения | 181 |
| 5.8.1. Вопросы разработки | 181 |
| 5.8.2. Свободные объединения | 181 |
| 5.8.3. Размеченные объединения языка ALGOL 68 | 181 |
| 5.8.4. Типы объединения в языке Pascal | 182 |
| 5.8.5. Объединения в языке Ada | 184 |
| 5.8.6. Оценка | 185 |
| 5.8.7. Реализация объединений | 185 |
| 5.9. Множества | 185 |
| 5.9.1. Множества в языках Pascal и Modula-2 | 186 |
| 5.9.2. Оценка | 187 |
| 5.9.3. Реализация множественных типов данных | 187 |
| 5.10. Указатели | 187 |
| 5.10.1. Вопросы разработки | 188 |
| 5.10.2. Операции над указателями | 188 |
| 5.10.3. Проблемы, возникающие при использовании указателей | 189 |
| 5.10.4. Указатели в языке Pascal | 190 |
| 5.10.5. Указатели в языке Ada | 190 |
| 5.10.6. Указатели в языках C и C++ | 191 |
| 5.10.7. Указатели в языке FORTRAN 90 | 192 |
| 5.10.8. Ссылки | 192 |
| 5.10.9. Оценка | 193 |
| 5.10.10. Реализация ссылок и указателей | 194 |
| 6. ВЫРАЖЕНИЯ И ОПЕРАТОРЫ ПРИСВАИВАНИЯ | 202 |
| 6.1. Вступление | 204 |
| 6.2. Арифметические выражения | 204 |
| 6.2.1. Порядок вычисления операторов | 205 |
| 6.2.2. Порядок вычисления операндов | 208 |
| 6.3. Перегруженные операторы | 210 |
| 6.4. Преобразования типов | 211 |
| 6.4.1. Приведение типов в выражениях | 212 |
| 6.4.2. Явное преобразование типов | 213 |
| 6.4.3. Ошибки в выражениях | 213 |
| 6.5. Выражения отношений и булевские выражения | 213 |
| 6.5.1. Выражения отношения | 214 |
| 6.5.2. Булевские выражения | 214 |
| 6.6. Сокращенное вычисление | 215 |
| 6.7. Операторы присваивания | 216 |
| 6.7.1. Простые присваивания | 216 |
| 6.7.2. Множественные целевые объекты | 217 |
| 6.7.3. Условные целевые объекты | 217 |
| 6.7.4. Составные операторы присваивания | 217 |
| 6.7.5. Унарные операторы присваивания | 218 |
| 6.7.6. Присваивание как выражение | 218 |
| 6.8. Смешанные присваивания | 219 |
| 7. СТРУКТУРЫ УПРАВЛЕНИЯ НА УРОВНЕ ОПЕРАТОРОВ | 223 |
| 7.1. Введение | 225 |
| 7.2. Составные операторы | 225 |
| 7.3. Операторы ветвления | 226 |
| 7.3.1. Двухвариантные операторы ветвления | 226 |
| 7.3.2. Конструкции многовариантного ветвления | 230 |
| 7.4. Операторы цикла | 234 |
| 7.4.1. Циклы со счетчиком | 235 |
| 7.4.2. Логически управляемые циклы | 240 |
| 7.4.3. Циклы с механизмами управления, размещенными пользователем | 242 |
| 7.4.4. Циклы, основанные на структурах данных | 243 |
| 7.5. Безусловный переход | 244 |
| 7.5.1. Проблемы безусловного перехода | 244 |
| 7.5.2. Виды меток | 245 |
| 7.5.3. Ограничения переходов | 245 |
| 7.6. Защищенные команды | 246 |
| 7.7. Выводы | 249 |
| 8. ПОДПРОГРАММЫ | 253 |
| 8.1. Введение | 254 |
| 8.2. Основы подпрограмм | 255 |
| 8.2.1. Общие свойства подпрограмм | 255 |
| 8.2.2. Основные определения | 255 |
| 8.2.3. Параметры | 256 |
| 8.2.4. Процедуры и функции | 258 |
| 8.3. Вопросы разработки подпрограмм | 258 |
| 8.4. Среды локальных ссылок | 259 |
| 8.5. Методы передачи параметров | 260 |
| 8.5.1. Семантические модели передачи параметров | 260 |
| 8.5.2. Модели реализации передачи параметров | 261 |
| 8.5.3. Методы передачи параметров в основных языках программирования | 265 |
| 8.5.4. Проверка типов параметров | 266 |
| 8.5.5. Методы реализации передачи параметров | 267 |
| 8.5.6. Многомерные массивы в качестве параметров | 269 |
| 8.5.7. Вопросы разработки | 271 |
| 8.5.8. Примеры передачи параметров | 271 |
| 8.6. Параметры, являющиеся именами подпрограмм | 274 |
| 8.7. Перегруженные подпрограммы | 276 |
| 8.8. Настраиваемые подпрограммы | 277 |
| 8.8.1. Настраиваемые подпрограммы в языке Ada | 277 |
| 8.8.2. Настраиваемые подпрограммы в языке C++ | 278 |
| 8.9. Раздельная и независимая компиляция | 280 |
| 8.10. Вопросы разработки функций | 281 |
| 8.10.1. Побочные эффекты функций | 281 |
| 8.10.2. Типы возвращаемых значений | 281 |
| 8.11. Доступ к нелокальным средам | 281 |
| 8.11.1. Блоки COMMON языка FORTRAN | 282 |
| 8.11.2. Внешние объявления и модули | 283 |
| 8.12. Перегруженные операторы, определяемые пользователем | 284 |
| 8.13. Сопрограммы | 284 |
| 9. РЕАЛИЗАЦИЯ ПОДПРОГРАММ | 289 |
| 9.1. Общая семантика вызовов и возвратов | 290 |
| 9.2. Реализация подпрограмм на языке FORTRAN 77 | 290 |
| 9.3. Реализация подпрограмм на языках, подобных языку ALGOL | 292 |
| 9.3.1. Более сложные записи активации | 293 |
| 9.3.2. Пример без рекурсии и нелокальных ссылок | 294 |
| 9.3.3. Рекурсия | 296 |
| 9.3.4. Механизмы реализации нелокальных ссылок | 299 |
| 9.4. Блоки | 307 |
| 9.5. Реализация методов динамического обзора данных | 308 |
| 9.5.1. Глубокий доступ | 309 |
| 9.5.2. Теневой доступ | 310 |
| 9.6. Реализация параметров, являющихся именами подпрограмм | 311 |
| 9.6.1. Статические цепочки | 311 |
| 9.6.2. Индикаторы | 312 |
| 9.6.3. Ошибочное повторное обращение к среде ссылок | 312 |
| 10. АБСТРАКТНЫЕ ТИПЫ ДАННЫХ | 317 |
| 10.1. Понятие абстракции | 318 |
| 10.2. Инкапсуляция | 319 |
| 10.3. Введение в абстракцию данных | 319 |
| 10.3.1. Число с плавающей точкой как абстрактный тип данных | 320 |
| 10.3.2. Абстрактные типы данных, определяемые пользователем | 320 |
| 10.3.3. Пример | 321 |
| 10.4. Вопросы разработки типов | 321 |
| 10.5. Примеры абстракции данных в разных языках | 322 |
| 10.5.1. Классы в языке SIMULA 67 | 322 |
| 10.5.2. Абстрактные типы данных в языке Ada | 323 |
| 10.5.3. Абстрактные типы данных в языке C++ | 326 |
| 10.6. Параметризованные абстрактные типы данных | 329 |
| 10.6.1. Язык Ada | 330 |
| 10.6.2. Язык C++ | 330 |
| 11. ПОДДЕРЖКА ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ | 334 |
| 11.1. Введение | 335 |
| 11.2. Объектно-ориентированное программирование | 336 |
| 11.2.1. Введение | 336 |
| 11.2.2. Наследование | 336 |
| 11.2.3. Полиморфизм и динамическое связывание | 338 |
| 11.2.4. Вычисления в объектно-ориентированных языках | 339 |
| 11.3. Вопросы разработки объектно-ориентированных языков | 339 |
| 11.3.1. Исключительность объектов | 339 |
| 11.3.2. Являются ли подклассы подтипами? | 339 |
| 11.3.3. Реализация и наследование интерфейса | 340 |
| 11.3.4. Проверка типов и полиморфизм | 340 |
| 11.3.5. Одиночное и множественное наследование | 341 |
| 11.3.6. Размещение в памяти и удаление из памяти объектов | 342 |
| 11.3.7. Динамическое и статическое связывание | 342 |
| 11.4. Обзор языка Smalltalk | 342 |
| 11.4.1. Общие характеристики | 342 |
| 11.4.2. Среда языка Smalltalk | 343 |
| 11.5. Введение в язык Smalltalk | 343 |
| 11.5.1. Выражения | 343 |
| 11.5.2. Методы | 345 |
| 11.5.3. Операторы присваивания | 346 |
| 11.5.4. Блоки и управляющие структуры | 347 |
| 11.5.5. Классы | 349 |
| 11.5.6. Дополнительные сведения о методах | 350 |
| 11.6. Примеры программ на языке Smalltalk | 351 |
| 11.6.1. Простой обработчик таблиц | 351 |
| 11.6.2. Графика в LOGO | 353 |
| 11.7. Главные особенности языка Smalltalk | 356 |
| 11.7.1. Проверка типов и полиморфизм | 356 |
| 11.7.2. Наследование | 356 |
| 11.8. Оценка языка Smalltalk | 357 |
| 11.9. Поддержка объектно-ориентированного программирования в языке C++ | 357 |
| 11.9.1. Общие свойства | 357 |
| 11.9.2. Наследование | 358 |
| 11.9.3. Динамическое связывание | 361 |
| 11.9.4. Оценка | 362 |
| 11.10. Поддержка объектно-ориентированного программирования в языке Java | 363 |
| 11.10.1. Общие свойства | 363 |
| 11.10.2. Наследование | 363 |
| 11.10.3. Динамическое связывание | 364 |
| 11.10.4. Инкапсуляция | 364 |
| 11.10.5. Оценка | 365 |
| 11.11. Поддержка объектно-ориентированного программирования в языке Ada 95 | 365 |
| 11.11.1. Общие свойства | 365 |
| 11.11.2. Наследование | 365 |
| 11.11.3. Динамическое связывание | 366 |
| 11.11.4. Оценка | 367 |
| 11.12. Поддержка объектно-ориентированного программирования в языке Eiffel | 367 |
| 11.12.1. Общие свойства | 368 |
| 11.12.2. Наследование | 368 |
| 11.12.3. Динамическое связывание | 369 |
| 11.12.4. Оценка | 369 |
| 11.13. Реализация объектно-ориентированных конструкций | 369 |
| 11.13.1. Хранение данных экземпляра | 370 |
| 11.13.2. Динамическое связывание сообщений с методами | 370 |
| 12. ПАРАЛЛЕЛЬНОСТЬ | 374 |
| 12.1. Введение | 376 |
| 12.1.1. Многопроцессорные архитектуры | 376 |
| 12.1.2. Разновидности параллельности | 377 |
| 12.1.3. Почему нужно изучать параллельность | 377 |
| 12.2. Введение в параллельность на уровне подпрограмм | 378 |
| 12.2.1. Основные понятия | 378 |
| 12.2.2. Разработка языков для поддержки параллельности | 380 |
| 12.2.3. Вопросы разработки языков программирования | 380 |
| 12.3. Семафоры | 381 |
| 12.3.1. Введение | 381 |
| 12.3.2. Синхронизация взаимодействия | 381 |
| 12.3.3. Синхронизация конкуренции | 383 |
| 12.3.4. Оценка | 384 |
| 12.4. Мониторы | 384 |
| 12.4.1. Введение | 384 |
| 12.4.2. Синхронизация взаимодействия | 385 |
| 12.4.3. Синхронизация конкуренции | 385 |
| 12.4.4. Оценка | 387 |
| 12.5. Передача сообщений | 387 |
| 12.5.1. Введение | 388 |
| 12.5.2. Концепция синхронной передачи сообщений | 388 |
| 12.5.3. Модель передачи сообщения в языке Ada 95 | 388 |
| 12.5.4. Синхронизация взаимодействия | 392 |
| 12.5.5. Синхронизация крнкуренции | 392 |
| 12.5.6. Завершение задачи | 394 |
| 12.5.7. Приоритеты | 394 |
| 12.5.8. Бинарные семафоры | 394 |
| 12.5.9. Оценка | 395 |
| 12.6. Параллельность в языке Ada 95 | 395 |
| 12.6.1. Защищенные объекты | 395 |
| 12.6.2. Асинхронные сообщения | 396 |
| 12.7. Потоки языка Java | 397 |
| 12.7.1. Класс Thread | 397 |
| 12.7.2. Приоритеты | 398 |
| 12.7.3. Синхронизация взаимодействия | 398 |
| 12.7.4. Синхронизация конкуренции | 399 |
| 12.7.5. Оценка | 401 |
| 12.8. Параллельность на уровне операторов | 401 |
| 12.8.1. Язык High-Performance FORTRAN | 401 |
| 13. ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ | 405 |
| 13.1. Введение в обработку исключительных ситуаций | 406 |
| 13.1.1. Основные понятия | 407 |
| 13.1.2. Вопросы разработки | 408 |
| 13.1.3. Исторический обзор | 410 |
| 13.2. Обработка исключительных ситуаций в языке PL/1 | 410 |
| 13.2.1. Обработчики исключительных ситуаций | 410 |
| 13.2.2. Связывание исключительных ситуаций с обработчиками | 411 |
| 13.2.3. Продолжение | 411 |
| 13.2.4. Другие проектные решения | 411 |
| 13.2.5. Пример | 412 |
| 13.2.6. Оценка | 413 |
| 13.3. Обработка исключительных ситуаций в языке Ada | 414 |
| 13.3.1. Обработчики исключительных ситуаций | 414 |
| 13.3.2. Связывание исключительных ситуаций с обработчиками | 414 |
| 13.3.3. Продолжение | 415 |
| 13.3.4. Другие проектные решения | 416 |
| 13.3.5. Пример | 417 |
| 13.3.6. Оценка | 418 |
| 13.4. Обработка исключительных ситуаций в языке C++ | 418 |
| 13.4.1. Обработчики исключительных ситуаций | 418 |
| 13.4.2. Связывание исключительных ситуаций с обработчиками | 419 |
| 13.4.3. Продолжение выполнения программы | 419 |
| 13.4.4. Другие проектные решения | 420 |
| 13.4.5. Пример | 420 |
| 13.4.6. Оценка | 421 |
| 13.5. Обработка исключительных ситуаций в языке Java | 421 |
| 13.5.1. Классы исключительных ситуаций | 421 |
| 13.5.2. Обработчики исключительных ситуаций | 422 |
| 13.4.3. Связывание исключительных ситуаций с обработчиками | 422 |
| 13.4.4. Продолжение выполнения программы | 423 |
| 13.4.5. Другие проектные решения | 423 |
| 13.4.6. Пример | 424 |
| 13.4.7. Оператор finally | 425 |
| 13.4.8. Оценка | 426 |
| 14. ФУНКЦИОНАЛЬНЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ | 430 |
| 14.1. Введение | 432 |
| 14.2. Математические функции | 432 |
| 14.2.1. Простые функции | 433 |
| 14.2.2. Функциональные формы | 433 |
| 14.3. Основы функциональных языков программирования | 434 |
| 14.4. Первый язык функционального программирования - LISP | 434 |
| 14.4.1. Типы и структуры данных | 435 |
| 14.4.2. Первый интерпретатор языка LISP | 436 |
| 14.5. Введение в язык Scheme | 437 |
| 14.5.1. Происхождение языка Scheme | 437 |
| 14.5.2. Элементарные функции | 437 |
| 14.5.3. Функции для построения функций | 440 |
| 14.5.4. Поток управления | 442 |
| 14.5.5. Пример функции на языке Scheme | 443 |
| 14.5.6. Функциональные формы | 446 |
| 14.5.7. Функции для создания кода | 446 |
| 14.5.8. Императивные свойства языка Scheme | 447 |
| 14.6. Язык COMMON LISP | 448 |
| 14.7. Язык ML | 449 |
| 14.8. Язык Haskell | 450 |
| 14.9. Применение функциональных языков | 453 |
| 14.10. Сравнение функциональных и императивных языков | 453 |
| 15. ЯЗЫКИ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ | 457 |
| 15.1. Введение | 458 |
| 15.2. Краткое введение в исчисление предикатов | 459 |
| 15.2.1. Высказывания | 459 |
| 15.2.2. Дизъюнктивные формы | 460 |
| 15.3. Исчисление предикатов и доказательство теорем | 461 |
| 15.4. Обзор логического программирования | 463 |
| 15.5. Происхождение языка Prolog | 464 |
| 15.6. Основные элементы языка Prolog | 464 |
| 15.6.1. Термы | 464 |
| 15.6.2. Факты | 465 |
| 15.6.3. Правила | 465 |
| 15.6.4. Цель | 466 |
| 15.6.5. Процесс логического вывода в языке Prolog | 466 |
| 15.6.6. Простая арифметика | 468 |
| 15.6.7. Списковые структуры | 471 |
| 15.7. Недостатки языка Prolog | 474 |
| 15.7.1. Управление порядком выполнения резолюции | 474 |
| 15.7.2. Предположение о закрытом мире | 476 |
| 15.7.3. Проблема логического отрицания | 476 |
| 15.7.4. Внутренние ограничения | 478 |
| 15.8. Применение логического программирования | 478 |
| 15.8.1. Системы управления реляционными базами данных | 478 |
| 15.8.2. Экспертные системы | 479 |
| 15.8.3. Системы обработки естественных языков | 479 |
| 15.8.4. Образование | 480 |
| 15.9. Выводы | 480 |
| ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ | 491 |
|
Copyright © 1992-2019 Издательская группа "Диалектика-Вильямс"
|