<<< BACK NEXT >>>

ПРИНЦИПИАЛЬНЫЕ ПОЛОЖЕНИЯ

   CAPER (Caper) – язык параллельного программирования, название которого образовано аббревиатурой от dynamic Compilable, Asynchronous, Parallel Events Routines. Первые версии языка CAPER создавались в 1994 - 1997 гг. для IBM PC.
   Язык CAPER создавался с целью разрешения следующих концептуальных положений программирования:

1.Структурированностьпрограммсвозможностьюдинамическогосамоизмененияи самоорганизации.
2. Возможность динамической компиляции и исполнения программы,динамической компоновки исполнимого кода.
3. Параллельное исполнение элементов структуры программы с возможностью поддержания всех возможных схем инициирования параллельных вычислений.
4. Управление процессом параллельных вычислений на основе событий (программирование событиями).

   Теоретические основы языка были заложены в [1-3], развиты в [4-6], а конкретные решения по алгоритмизации и программированию апробированы в [7, 8]. Вот некоторые тезисы концепции.
   Программа вместе с архитектурами и ресурсами операционной системы и вычислительной установки единым образом должны быть нацелены на достижение функциональных целей вычисления. Данный тезис, по сути, является определением фундаментальной проблемы, т.к. здесь необходимо ответить на следующие вопросы:
   - каким должен быть алгоритм решения задачи;
   - как и какой язык программирования должен быть выбран для представления алгоритма;
   - как должны быть задействованы ресурсы операционной системы и вычислительной установки в процессе реализации вычисления.
   Поиск ответов на эти вопросы должен быть комплексным, отражающим все архитектурные особенности вычислителя, операционной системы, а также принципов,заложенных в алгоритм решения задачи и в выбираемый язык программирования. Иными словами, все решения должны быть согласованы в пределах единой идейной основы.
   Существующие технологии программирования требуют интегрированного представления программы, всех ее ветвей, альтернатив, а, следовательно,в ходе ее исполнения загружены практически все ее структурные элементы,
в том числе и те, которые могут не выполняться или выполняться крайне редко.
В иных языках эта проблема решается за счет создания внутренних оверлейных структур без возможностей прямо управлять компонентами программы. Так или иначе, проблема динамической подгрузки нужных и удаления, соответственно, ненужных модулей программ, стилистика решения этой проблемы напрямую зависят от возможностей операционной системы, в среде которой выполняется программа.
   А потому актуален тезис: программа должна быть адаптирована (а следовательно, видоизменена и скомпонована) к текущим потребностям вычислений.
   Часто возникают ситуации, когда альтернатив дальнейшего хода вычислений достаточно много и естественным решением была бы генерация нужного фрагмента программы - исходного текста и машинных кодов. Т.е. проблема динамической компиляции и исполнения порождаемых фрагментов программы представляется также
достаточно актуальной.
   Другими словами, в качестве императива был принят следующий: все компоненты программы должны быть доступны целям реорганизации (заметим, что в [] и [] высказывалось более широкое толкование ресурсов и адаптации - к ресурсам относились все компоненты, определяющие понятие вычислительной установки, в том числе операционная среда, язык программирования, интерпретирующая машина и пр., а следовательно, требования адаптируемости относились и к операционной и языковой средам, процессу исполнения программ, не говоря уже о самих программах).
   Реорганизация программ может осуществляться удалением собственных компонент, их изменением или же привнесением новых компонент извне. Внешние компоненты могут быть фрагментами исходного текста или объектными модулями.
   Следующей целью при определении основания CAPER было создание такой структурной и процедурной организации программ, которая позволила бы эффективно охватить, по возможности, наиболее широкий спектр схем параллельных вычислений, не зависящих от возможностей операционных и архитектурных сред и систем. За основу была взята классификация Флинна [] в процедурной интерпретации: SPSD, SPMD, MPSD, MPMD (M – Multiple, S – Single, P – procedure, D – Data). Результатом в Caper стала емкая конструкция для представления и инициации запуска параллельных процедур всех представленных классов.
   Для поддержания решений по реализации параллельных вычислений были определены принципы построения языка на основе комплекса виртуальных машин, реализующие различные схемы параллельного синхронного и асинхронного выполнения программ, разработаны механизмы параллельного выполнения программ, в том числе механизм т.н. покомандного параллелизма [], квантования времени, а также распределения параллельно выполняемых компонентов программ на множестве компьютеров.
   Еще одно принципиальное свойство, реализованное в языке, относится к проблеме программирования реакций на асинхронные события, происходящие как "внутри" программы, так и "снаружи". Неэффективность в этом смысле большинства существующих практических языков достаточно очевидна - как правило, программисту приходится организовывать довольно рутинные процедуры отслеживания событий, которые загромождают программу, часто, весьма искусственны и субъективны, либо же опираться на возможности операционной системы, что непосредственно влияет на стиль программирования и делает программу архитектурно и системно связанной (не переносимой). Если же учесть интерактивный характер подавляющего количества программ, то оправдано желание иметь средство программирования, которое позволяло бы эффективно описывать множество событий и связанных с ними процедур, исполняемых при их возникновении.
   Столь же эффективно в CAPER решается проблема обработки ошибок, происходящих в процессе вычисления: допускается анализ и исправление команд, целых фрагментов программы, приведших к ошибке.
   Базирование Caper на системе виртуальных машин обеспечивает возможность переносимости программ, их транспортирование и распределение по различным вычислительным средам.

<<< BACK NEXT >>>