Введение
1 Использование систем программирования при создании переносимых и эволюционно расширяемых параллельных программ 25
1.1 Цели и задачи процесса разработки 25
1.2 Методические приемы 27
1.2.1 Формализация предметной области 28
1.2.2 Создание методик разработки программного обеспечения 30
1.3 Технические приемы 33
1.3.1 Поддержка методических приемов 33
1.3.2 Вспомогательные средства 34
1.3.3 Системы программирования 34
1.4 Характеристики систем программирования, влияющие на мобильность и расширяемость программ 37
1.4.1 Разделение систем программирования по парадигмам 37
1.4.2 Дополнительные характеристики парадигм программирования 40
1.5 Анализ методов, определяющих разработку мобильных параллельных программ 43
1.5.1 Переносимость последовательных программ 44
1.5.2 Переносимость параллельных программ 45
1.5.3 Использование функциональных и потоковых языков 50
1.5.4 Перспективы создания инструментальных средств разработки мобильных параллельных программ 59
1.6 Анализ характеристик, определяющих разработку эволюционно расширяемых программ 60
1.6.1 Факторы, определяющие построение расширяемых программ . 61
1.6.2 Перспективы развития инструментальных средств разработки эволюционно расширяемых программ 69
1.7 Выводы 70
2 Стратегии управления в вычислительных системах и языках программирования 72
2.1 Модель вычислительного процесса 73
2.1.1 Связь между процессами и ресурсами вычислительной системы . 73
2.1.2 Моделирование процесса 75
2.1.3 ICR-сеть 81
2.2 Стратегии управления в вычислительных системах 82
2.3 Стратегии управления в языках программирования 85
2.4 Связь стратегий управления с мобильностью параллельных программ 85
2.4.1 Специфика управления при последовательном программировании 85
2.4.2 Специфика субъективного управления при параллельном программировании 87
2.4.3 Организация виртуального вычислителя, поддерживающего неявное управление 87
2.4.4 Организация управления вычислениями в мобильных параллельных программах 90
2.5 Выводы 91
3 Модель функционально-потоковых параллельных вычислений и язык программирования, построенный на ее основе 92
3.1 Общие принципы организации модели 92
3.2 Описание программо-формирующих операторов 94
3.3 Динамика функционирования модели 101
3.4 Эквивалентные преобразования 104
3.4.1 Распространение ошибки 105
3.4.2 Использование пустых элементов 105
3.4.3 Раскрытие параллельных подсписков в списке данных 107
3.4.4 Раскрытие задержанных списков 108
3.5 Правила интерпретации списков 109
3.5.1 Перенос круглых скобок со списка функций на результат операции интерпретации 109
3.5.2 Интерпретация параллельных списков НО
3.5.3 Интерпретация асинхронных списков 112
3.6 Функциональный язык параллельного программирования
3.7 Выводы ИЗ
4 Методы разработки функционально-потоковых параллельных программ 115
4.1 Основные методы и приемы построения функционально- потоковых параллельных программ 115
4.1.1 Применение параллельных списков 115
4.1.2 Использование задержанных списков 118
4.1.3 Использование параллельной рекурсии 119
4.1.4 Использование обобщенных функций 120
4.2 Использование эквивалентных обобщенных функций 122
4.2.1 Эквивалентные реализации бинарной свертки 123
4.2.2 Использование разных форм одной и той же функции для повышения эффективности вычислений 125
4.3 Использование концепции неограниченного параллелизма для анализа и разработки программ с ограниченным параллелизмом 130
4.3.1 Традиционный подход к алгоритмам сортировки 131
4.3.2 Алгоритм сортировки с неограниченным параллелизмом 131
4.3.3 Вывод ограниченных алгоритмов 135
4.4 Использование событийного асинхронного параллелизма в потоковых вычислениях 141
4.5 Выводы 145
5 Инструментальные средства для разработки, отладки и выполнения функционально-потоковых параллельных программ 147
5.1 Общие требования к виртуальному исполнителю функционально- потоковых параллельных программ 147
5.2 Методы выполнения функционально-потоковых параллельных программ 149
5.3 Последовательная интерпретация функционально-потоковых программ 151
5.4 Параллельная интерпретация функционально-потоковых программ 155
5.5 Реализация последовательной интерпретации функционально- потоковых программ 167
5.5.1 Транслятор 169
5.5.2 Интерпретатор 170
5.5.3 Модуль управления 171
5.6 Реализация интерпретатора функционально-потоковых программ для кластерных систем 171
5.6.1 Общая организация 171
5.6.2 Функционирование параллельного интерпретатора 172
5.6.3 Анализ методов параллельной интерпретации 175
5.6.4 Методы повышения эффективности интерпретации 179
5.7 Выводы 180
6 Основные принципы процедурно-параметрической парадигмы программирования 182
6.1 Используемые понятия и определения 182
6.1.1 Данные обрабатываемые программой 182
6.1.2 Значения данных 184
6.1.3 Процедуры, используемые для обработки программных объектов 184
6.1.4 Вызовы процедур 186
6.2. Задача эволюционного расширения мультиметодов 187
6.3 Эволюционное расширение мультиметодов в различных парадигмах программирования 188
6.3.1 Расширение мультиметодов при процедурном подходе 188
6.3.2 Расширение мультиметодов при объектно-ориентированном подходе 190
6.3.3 Проблемы существующих подходов эволюционной разработки мультиметодов 191
6.4 Особенности процедурно-параметрической парадигмы программирования 192
6.4.1 Основные понятия процедурно-параметрического программирования 193
6.4.2 Организация параметрических обобщений 194
6.4.3 Организация обобщающих параметрических процедур 195
6.4.4 Организация обработчиков параметрических специализаций . 196
6.4.5 Экземпляр параметрического обобщения 197
6.4.6 Вызовы параметрических процедур 197
6.5 Классификация механизмов параметрического обобщения 198
6.5.1 Способы построения параметрических обобщений 198
6.5.2 Методы включения специализаций в параметрическое обобщение 201
6.5.3 Методы конструирования обобщений 202
6.5.4 Способы построения параметрических отношений и их отображение на параметрические процедуры 205
6.5.5 Способы формирования тел обработчиков специализаций 208
6.5.6 Способы связывания комбинаций специализаций с конкретным обработчиком 209
6.5.7 Фазы формирования параметрических обобщений 209
6.7 Выводы 211
7 Языковая и инструментальная поддержка процедурно- параметрической парадигмы программирования 213
7.1 Язык программирования 02М 213
7.1.1 Организация параметрических обобщений 213
7.1.2 Обобщенные переменные 216
7.1.3 Обобщающие процедуры и обработчики специализаций . 217
7.2 Использование языка для решения задачи эволюционного расширения 219
7.2.1 Разработка основной части программы 219
7.2.2 Проявление полиморфизма в клиентском модуле 226
7.3 Моделирование методов формирования процедурно-параметрических отношений 228
7.3.1 Алгоритмы, базирующиеся на объектно-ориентированной парадигме 228
7.3.2 Использование процедурного подхода для построения эволюционно расширяемых мультиметодов 230
7.3.3 Сравнение объектно-ориентированной и процедурно- параметрической реализаций полиморфизма 231
7.4 Инструменты процедурно-параметрического программирования . 233
7.4.1 Транслятор с языка 02М 233
7.4.2 Компоновщик параметрических отношений 235
7.4.3 Сборщик проектов 236
7.4.4 Оболочка пользователя 238
7.5 Выводы 239
8 Поддержка эволюционного расширения программ в функционально- потоковом языке параллельного программирования 240
8.1 Перегрузка функция с одинаковой сигнатурой 240
8.2 Использование эволюционного расширения при обработке
динамических структур данных 243
8.3 Применение пользовательских типов данных 247
8.4 Сочетание пользовательских типов и перегрузки функций с
одинаковой сигнатурой 251
8.4.1 Эволюционное расширение обобщений 251
8.4.2 Эволюционное расширение обработчиков обобщений 252
8.5 Инструментальная поддержка эволюционного расширения функционально-потоковых параллельных программ 254
8.5.1 Определение функций с предусловием и постусловием 254
8.5.2 Модульное построение программ 257
8.6 Выводы 258
Заключение 259
Список использованных источников


