Развитие парадигм программирования — КиберПедия 

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Развитие парадигм программирования

2021-01-31 81
Развитие парадигм программирования 0.00 из 5.00 0 оценок
Заказать работу

Наиболее распространенная практика прикладного программирования на основе императивного управления и процедурно-операторного стиля постро- ения программ получила популярность более шестидесяти лет назад в сфере узко профессиональной деятельности специалистов по организации вычис- лительных и информационных процессов. Специалисты в области теорети- ческого и экспериментального программирования исследовали значимость и фундаментальность формальных математических моделей в программирова- нии и эффективных средств их реализации. Последние десятилетия резко расширили географию информатики, распространив ее на сферу массового общения и досуга. Это меняет критерии оценки информационных систем и предпочтения в выборе средств и методов обработки информации.

 
Прикладное программирование подчинено проблемной направленно- сти, отражающей компьютеризацию информационных и вычислительных процессов численной обработки, исследованных задолго до появления ЭВМ. Именно здесь быстро проявился явный практический результат. Естественно, в таких областях программирование мало чем отличается от кодирования: для него, как правило, достаточно операторного стиля представления дей- ствий. В практике прикладного программирования принято доверять прове- ренным шаблонам и библиотекам процедур, избегать рискованных экспери- ментов. Ценится точность и устойчивость научных расчетов. Язык Fortran – ветеран прикладного программирования, постепенно стал несколько усту- пать в этой области языкам Pascal и C, а на суперкомпьютерах – языкам па- раллельного программирования, таким как Sisal. Теперь к ним присоединя- ются нововведения в Java, C#, Scala. Возникло новое направление языкотвор- чества – конструирование проблемно-ориентированных ЯП на базе таких средств как Clang-LLVM, позволяющим любому специалисту, владеющему


 

 

ИТ-технологиями на уровне Windows-Word, создавать компилятор для сво- его ЯП, абстрактной машиной для которого будет аналог gcc. Это повышает уровень средств прикладного программирования, но не меняет его пара- дигмы.

 
Теоретическое программирование нацелено на наглядность и сопоста- вимость представимых в публикациях результатов научных экспериментов в области программирования и информатики. Формальные модели унаследо- вали основные черты родственных математических понятий и утвердились как алгоритмический подход в информатике. Стремление к доказательности построений и оценка их эффективности, правдоподобия, правильности, кор- ректности и других формализуемых отношений на схемах и текстах про- грамм послужили основой структурного программирования и других мето- дик достижения надежности процесса разработки программ, например, пред- ложенное Д. Кнутом «грамотное программирование». Стандартные подмножества Алгола и Паскаля, послужившие рабочим материалом для тео- рии программирования, сменились более удобными для экспериментирова- ния аппликативными языками, такими как функциональные ML, Miranda, Scheme, Haskell, Real, и императивными – стандартные подмножества языков Pascal, C-light и др. Роль абстрактной машины выполняют математические модели, что приводит к выводу, что теоретическое программирование – не более чем дополнительный раздел прикладной математики.

 
Экспериментальное программирование сформировалось при исследо- вании задач системного программирования, искусственного интеллекта и освоения новых горизонтов в информатике. Абстрактный подход к представ- лению информации, лаконичный, универсальный стиль построения функ- ций, ясность обстановки исполнения для разных категорий функций, свобода рекурсивных построений, доверие интуиции математика и исследователя, уклонение от бремени преждевременного решения непринципиальных про- блем распределения памяти, отказ от необоснованных ограничений на об- ласть действия определений – все это увязано Джоном Маккарти в идее уни- версального языка Lisp. Продуманность и методическая обоснованность пер- вых реализаций Lisp-а позволила быстро накопить опыт решения этих новых задач, подготовить их для прикладного и теоретического программирования, что привело к кристаллизации идей функционального программирования (ФП). В настоящее время существуют сотни функциональных языков про- граммирования, ориентированных на разные классы задач и виды техниче- ских средств. Стиль мышления при экспериментальном программировании должен был включать в себя культуру постановки эксперимента, характер- ную для экспериментальной работы в физике.

В наши дни признают в качестве основных парадигм программирования: ИП, ФП, логическое программирование (ЛП) и объектно-ориентированное


 

 

 
программирование (ООП) – и отмечают образовательное значение таких ба- зовых парадигм программирования как ФП, параллельное программирова- ние, ИП, рассматривая ЛП и ООП как расширения базовых парадигм. Не ис- ключено, что причиной является зависимость ЛП и ООП от расширяемых постановок задач.

Важно отметить, что основные ПП по-разному проявляют себя на разных классах задач, и выбор ПП влияет на трудоемкость программирования, успешность технологии программирования и надежность применения про- грамм.

 

Учебное программирование

Переход к параллельным вычислениям намного осложняет изначально весьма непростую задачу обучения программировании. Ознакомление с об- разовательными проблемами параллельного программирования и моделями параллелизма, встречающимися в учебных и экспериментальных языках и системах программирования, показывает, что в практике обучения програм- мированию предстоит преодолеть дистанцию от уровня базовых средств управления взаимодействующими процессами до уровня разработки про- грамм высокопроизводительных вычислений.

Мир программирования и его техническая основа претерпели значитель- ные изменения за последние двадцать лет. Возрастает актуальность обучения параллельному программированию, что требует развития языковой и систем- ной поддержки введения в программирование. В середине 1970-х годов ак- тивное исследование методов параллельного программирования рассматри- валось как ведущее направление преодоления кризиса технологии програм- мирования. Теперь рост интереса к параллельному программированию связан с переходом к производству многоядерных архитектур. Прежде всего следует упомянуть бурное развитие суперкомпьютеров и распределенных информационных систем, а также переход на многоядерные процессоры и массовое распространение многопроцессорных графических ускорителей.

 
Задача учебного программирования – сформировать пороговый уровень, обеспечивающий предстоящее систематическое обучение практическому программированию. Здесь не требуется концептуальное и инструментальное разнообразие, а нужен взвешенный подход к оценке сложности учебных за- дач по программированию и качества их решения, что требует комплектов ранжированных серийных задач с вариантами типовых решений, соответ- ствующих разным требованиям к их качеству. Для объективности предлага- ется ранжировать задачи по структуре конструкций, используемых в типо- вых решениях, с учетом числа вариантов решения и некоторых их характе- ристик. Для оценки сложности задач, решаемых без применения компьютера,


 

 

по-видимому, достаточно сравнения их по аналогии с задачами из ранжиро- ванных серий.

Применение компьютерных игр и тренажеров быстро выводит некоторых учащихся за пределы пространства легко ранжируемых задач и типовых ва- риантов решений. Более сложные задачи характеризуются резким возраста- нием неожиданных вариантов решений с разным уровнем алгоритмизации. Программирование и отладка решений таких задач – итеративный процесс, каждый шаг которого повышает уровень изученности решаемой задачи и уточняет пространство ее возможных решений. На разных фазах этого про- цесса в зависимости от достигнутого уровня изученности действуют свои критерии качества программы, что увеличивает число оценочных критериев, влияющих на оценку решения задачи, и даже провоцирует преждевременный переход к производственным критериям.

 
Каждая серия задач символизирует собой восходящий процесс пошаго- вого уточнения пространства изучаемых решений, начиная от визуализации результатов до полного вывода их из входных данных, включая удобство от- ладки. Рассмотрим учебные языки программирования как основу для обуче- ния организации параллельных вычислений.

 
Logo – Язык начального обучения программированию Logo разработан в 1972 году С. Пейпертом. В этом языке унаследованы многие идеи языка Lisp [22], ознакомление с которыми выглядит как управление рисующим робо- том-черепашкой. Образ «черепаха» возник не случайно. С конца 1940-х го- дов выпускалась игрушка – программируемая черепаха, способная ходить че- рез лабиринт. Управлялась черепаха с помощью перфокарты, вставляемой в прорезь на спине. По мере овладения азами программирования на базе Logo происходит переход к задачам уровня «создай свой язык». Со временем по- явились конструкторы Log-Lego, приспособленные к созданию конструкции с разными функциями, еще более образно представляющими возможности конструктивного программирования. С начала 1990-х годов ЮНЕСКО реко- мендовал идею Logo-миров как основную линию внедрения информатики в образовательный процесс слабо развитых стран. Эта идея выглядела особо привлекательной благодаря свободе от разных национальных традиций и од- новременно возможности настройки на местный колорит. Появились кон- курсы для младших школьников на базе систем программирования для языка Logo.

Karel – появившийся в начале 1980-х язык Karel назван в честь Карела Чапека, предложившего слово «робот». Учебный мир для начального озна- комления с программированием устроен как управление роботом Karel, уста- навливающим звуковые сигналки в разных местах сетки улиц и проспектов. Робот вооружен тремя видеокамерами, компасом и корзиной для сигналок. Видеокамеры позволяют видеть установленные сигналки. У робота имеется


 

 

механическая рука для сбора и установки сигналок. Учащийся должен, всмотревшись в заданную ситуацию на сетке улиц и проспектов, запрограм- мировать робота так, чтобы он выполнил задание по установке или удалению сигналок.

 
Синтаксис языка Karel подобен синтаксису языка Си. Реализация выпол- нена как библиотека <karel.h>. Программируя функции можно использовать кроме встроенных команд и предикатов рамочные конструкции if, case, iterate, while, do … while. В качестве отладочных средств используются ком- ментарии, вывод сообщений, установка контрольных точек и звуковые сиг- налы.

Робик – идея программируемых роботов в языке начального языка про- граммирования РОБИК, созданного Г. А. Звенигородским, обобщена до уровня коллекции роботов, каждый из которых обладает своей системой ко- манд, но при этом они могут выполнять общую программу. Такой подход позволял определять специализированных роботов на каждый класс задач, нацеленный на освоение конкретных понятий. Выбор роботов обеспечивал пошаговое методически обусловленное, возможно, безмашинное изучение основных концепций программирования с последующим переходом к при- менению стандартных языков программирования. Мостиком такого пере- хода служили специальные синтаксические диаграммы, позволяющие пере- лагать программы на разные языки практически без синтаксических ошибок. Grow – несколько в стороне от магистральной линии обучения програм- мирования лежит идея учебного конструктора игр Grow, созданного в начале 1980-х годов в Калифорнии. В этом языке конструирование программ допус- кает использование при организации ветвлений текстовых шаблонов и веро- ятностей срабатывания ветви, что позволяет снизить стартовый барьер пони-

мания предикатов.

A++ – поддерживает изучение функционального, объектно-ориентиро- ванного, императивного и логического программирований, включая рекурсию и функции высших порядков.

 
Пришло время изучать информатику и программирование, начиная с мира параллелизма. Проблемы обучения параллельному программированию осложнены дистанцией между уровнем абстракций, в которых описываются решения сложных задач на современных языках программирования (ЯП), и уровнем реализации конкретной аппаратуры и архитектурных принципов управления параллельными вычислениями (потактовая синхронизация, сов- мещение действий во VLIW-архитектурах, сигналы, семафоры критических участков, рандеву и т. п.). Проблемы подготовки параллельных программ для всех столь разных моделей обладают общностью, но есть и существенная специфика, требующая понимания разницы в критериях оценки программ и


 

 

информационных систем для различных применений. Языки XXI века, осо- бенно учебные языки программирования, характеризуются мультпарадиг- мальностью, отражающей нацеленность на обучение специалистов под- держке ПЖЦП и ознакомление с параллелизмом.

Oz – более амбициозный мультипарадигмальный язык программирова- ния, реализованный в учебной системе программирования Mozart, создан для ознакомления студентов с 8 наиболее важными парадигмами программиро- вания, обеспечивающими рациональное применение современных ИТ и пер- спективы их усовершенствования на базе полного спектра доступных меха- низмов, включая параллелизм, сети, реальное время и т. д., без претензий на предварительное изучение теории программирования. Автор языка настаи- вает, что в определении учебного ЯП парадигмы должны быть четко разде- лены.

 
 
Операционная семантика Oz представляет собой объединение абстракт- ных машин императивного и функционального программирований, погру- женное в схему параллельного программирования в виде многопоточного комплекса с монитором. Поддержка логического и объектноориентирован- ного программирований выполнена как синтаксическое расширение, что до- статочно для ознакомления с техникой представления знаний и развития иерархии классов в некоторых приложениях. Лексика и синтаксис Oz насле- дуют многие черты языка Pascal. Элементарные значения – целые без огра- ничения длины, литеры, атомы и имена, включая идентификаторы аноним- ных конструкций. Выделен тип Bool, к которому сводятся значения предика- тов. Структуры данных строятся из записей, допускающих расширение числа полей и сокрытие их части. При необходимости манипулировать изменением данных используются ячейки – контейнеры для хранения заменяемых значе- ний. Кроме обычных структур данных поддержаны очереди (stream) и порты. Арность записей – это список имен полей в лексикографическом порядке. Списки могут быть открытыми или замкнутыми. Строки рассматриваются как списки литер. Представление списков допускает использование перемен- ных. Список – это Nil или запись из двух полей. Язык поддерживает динами- ческую типизацию без предварительного описания объявляемых перемен- ных. Неявное приведение типов значений отсутствует. Отсутствуют средства доступа к внутреннему представлению данных. Как правило, структуры дан- ных монотонны, т. е. информацию можно дополнять, а не изменять или уни- чтожать.

Переменные пишутся с заглавной буквы и подчинены дисциплине одно- кратного присваивания. Значения переменных могут быть неизвестны или объявлены вычисляемыми в будущем, что приводит к откладыванию завися- щих от них вычислений подобно ленивым вычислениям. Конструирование программы основано на введении процедур и функций, включении модулей


 

 

 
(пакетов) и функторов, специфицирующих поведение модулей, возможно до- ступных дистанционно с указанного сайта. Функции реализованы как проце- дуры без побочных эффектов, сохраняющие результат в специальной пере- менной. Анонимные процедуры получают внутренние идентификаторы. Процедуры высших порядков используются как средство представления схем функционирования программ и их интерфейсов. Существуют глобаль- ные и локальные области видимости и иерархия процедур. Предусмотрено использование шаблонов в управляющих конструкциях типа CASE. Нелоги- ческое значение предиката в IF рассматривается как ошибка. Имеются сред- ства реагирования на события, обработки ошибок и исключений, учета ре- ального времени.

Параллельные вычисления поддержаны в стиле разделения времени между потоками программы, способными взаимодействовать в терминах со- общений или общей памяти. Дисциплина разделения времени учитывает приоритеты, задающие пропорции выделения времени с профилактикой пол- ного оттеснения какого-либо потока. Для решения задач переборного типа имеется механизм программирования стратегии поиска в рамках ограничен- ной области. Потоки, из которых строится многопоточная программа, обла- дают своей памятью и могут иметь доступ к внешним данным, включая до- ступ к сторонним сайтам. Потоки устроены как традиционная императивно- процедурная программа. Новые потоки запускаются в стиле развилка как в UNIX. Авторы утверждают, что это происходит в 60 раз быстрее, чем в Java JDK 1.2. Систем программирования Mozart доступна через Emacs.

 
Сложность перехода от навыков последовательного программирования к организации параллельных процессов в значительной мере обусловлена си- стемой обучения, требующей все упорядочивать, выстраивать в однознач- ные, безальтернативные построения без выражения зависимости принятых решений от выбора структур данных и последовательности действий по их обработке. В учебном языке обучения параллельному программированию желательно разделить последовательность вычислений и последователь- ность размещения их результатов в элементах памяти. Последовательность вычисления не обязана совпадать с последовательностью размещения вычис- ленных значений. Основные структуры данных – это очереди, элементы ко- торых доступны последовательно и размещены рассредоточенно, новые до- бавляются в хвост очереди, и векторы с обычным индексированием элемен- тов, размещенных в соседних регистрах, допускающих произвольный доступ.

Параллельное программирование на уровне процессов выглядят как не- что среднее между программированием на макроассемблере и языках высо- кого уровня. Различие проявляется в понимании данных и команд. В резуль-


 

 

тате разработка программ для организации взаимодействия процессов отли- чается от подготовки обычных последовательных программ на весьма глубо- ком уровне, что можно показать на модели интерпретирующего автомата для языка управления процессами. Такой автомат требует реализации дополни- тельной таблицы событий и структуры данных для очередей, регулирующих доступ к данным.

Термин «процесс» используется для обозначения поведения «объекта». Описание процесса начинается с определения класса событий, представляю- щих интерес для участвующих в нем объектов. Первая абстракция при моде- лировании процессов – исключение времени, т. е. отказ от ответов на вопрос происходят ли события строго одно за другим. Это обеспечивается следую- щими договоренностями:

– элементарные действия исполняются мгновенно;

 
протяженное действие: всегда пара событий – начало и конец;

– нет точной привязки действий к моменту времени;

– определены отношения «раньше–позже», «одновременно», «незави- симо»;

– совместность событий понимается как отношение «синхронизация»;

– одно событие из независимых возникает в любом порядке, без при- чинно-следственной связи.

В середине 1980-х годов вышла в свет сразу ставшая библиографической редкостью книга Г. А. Звенигородского «Первые уроки программирования», вводившая школьников в мир программирования для ЭВМ. В этой уникаль- ной книге была выстроена практичная схема начального ознакомления с ос- новными понятиями программирования, причем последовательность изло- жения была тщательно методически обусловлена постановками задач, пока- зывающими недостаточность ранее освоенных средств. Каждый шаг усложнения понятий на недоуменный вопрос: Зачем? cодержал ответ:

Чтобы решать вот такие задачи!

 
Методика Г. А. Звенигородского раннего обучения программированию учащихся ШЮП кроме языка Робик (идеи исполнителей которого отчасти воплощены в Роботландии Ю. А. Первина), активно использовала прори- совку синтаксических диаграмм, четкое выделение методически обусловлен- ных учебных концентров и профилактику прирастания к первому средству. Разнообразие компьютеров, языков и систем программирования, операцион- ных систем, стилей и технологий представало перед учащимися в первый же год обучения, что может рассматриваться как реальность мультипарадиг- мального подхода к обучению программированию.

Для более старших школьников методика Г. А. Звенигородского в Ново- сибирске получила развитие в виде учебно-производственного языка Рапира

– он похож на бестиповый Паскаль с более универсальными структурами


 

 

данных и управления – и проекта интегрированной учебной среды «Школь- ница». Большую роль на этом уровне сыграла компьютерная графика – си- стема Шпага для программирования прорисовки любимых картинок в понят- ных детям терминах.

Следует отметить, что система понятий языка начального обучения про- граммированию Робик изначально была приспособлена, содержала резерв, для изучения параллельных программ, но этот резерв не был востребован. В наши дни он обретает актуальность.

 
Чуть позже увидел свет перевод на русский язык превосходной книги бле- стящего авторитета Т. Хоара «Взаимодействующие последовательные про- цессы», в которой на простых задачах управления автоматами показано, что параллельные композиции внешне не сложнее последовательных, без ак- цента на том, что отладка параллельных процессов много сложнее, чем по- следовательных.

Типичные «проколы» при организации обучения программированию сво- дятся к слишком прямолинейным попыткам следующего типа:

– преподавать «чистое» программирование;

– формировать одновозрастные группы;

– отбирать исключительно способных к учебе;

– выстраивать «сквозной» учебный план на много лет;

– снижать трудоемкость и сложность учебных работ;

– форсировать приобретение практических навыков. Все это нужно, но следует учесть, что:

 
практика программирования должна быть погружена в общедоступный контекст, чтобы ученики познакомились со всеми фазами жизненного цикла программ;

– в разновозрастных группах легче происходит смена ролей, многие из которых желательно испытать на этапе учебы;

– рядом должны быть будущие пользователи, чтобы будущий програм- мист учился их понимать;

– темп «созревания» психологических структур может требовать при- остановок в учебе;

– многие явления производственного программирования не понятны без повышенной сложности, трудоемкости и работы в ограниченных условиях;

– навыки, приобретенные на ранних этапах обучения, потребуется уметь заменять на новые.

Разработка учебного языка программирования, приспособленного к озна- комлению студентов со сложными моделями вычислений, с параллельным программированием и с методами верификации программ, без которых надежность и производительность программирования весьма проблема-


 

 

 
тична, должна быть нацелена на выбор механизмов для поддержки экспери- ментов по разработке новых программ, языков и парадигм, ориентированных на учебно-исследовательские проекты в области создания распределенных информационных систем по той простой причине, что решения хорошо изу- ченных задач непрерывно перетекают в библиотеки типовых компонент или в комплекты инструментальных средств, готовых для непосредственного применения. Наличие таких движений как GNU, Imagine Cup, сайты ведущих программистских компаний, привлекающие энтузиастов к участию в новых проектах, можно рассматривать как благоприятную среду для формирования профессионального корпуса программистов.

Полноценное решение проблем параллельного программирования тре- бует создания более специализированного инструментария, некоторые меха- низмы реализации которого могут быть изучены в форме экспериментальной разработки учебного языка параллельного программирования. Для этого здесь рассматривается последовательность ознакомления с явлениями парал- лелизма, схема языково-системной поддержки обучения методам организа- ции параллельных процессов и примеры конструирования учебных роботами в терминах учебного языка Синхро.

Привлекает внимание рост числа программ обучения параллельному программированию через робототехнику. Этот путь несколько осложнен инженерно техническими проблемами, которые можно смягчить созданием программно визуализируемого конструктора роботов, допускающего оперативную настройку на спектр учебного материала.

Далее будет рассмотрен язык Синхро, при создании которого учтены фак- торы успеха наиболее известных учебных языков программирования, таких как Basic, Pascal, Logo, Grow, а главное – методически обусловленное введе- ние программистских понятий в языке начального обучения программирова- нию Робик.

Рассмотрим язык Синхро как учебный язык программирования. Проект язык Синхро специально ориентирован на начальное обучение параллельному программированию в терминах управления взаимодействием роботов на небольших игровых примерах, показывающих типичные проблемы создания и отладки параллельных программ.

 
Язык Синхро нацелен на ознакомление с основными явлениями и моде- лями параллельного программирования, встречающимися в учебно-методи- ческих и научных материалах, языках высокого уровня (ЯВУ). Цель опере- жающего ознакомления с понятиями и явлениями параллелизма – профилак- тика жесткого привыкания к принципам традиционного последовательного императивно-процедурного программирования. Организация параллельных


 

 

 
процессов часто требует независимости порядка вычислений от последова- тельности представления действий в программе и дисциплины доступа в па- мяти.

Следует отметить, что изначально система понятий языка начального обучения программированию Робик содержала резерв для изучения парал- лельных программ. Программа могла включать/выключать разных исполни- телей, обладающих своими системами команд, и назначать исполнителей от- дельных действий. Этот резерв не был востребован в конце 1970-х годов, в наши дни он обретает актуальность.

Чуть позже, в конце 1980-х, увидел свет перевод на русский язык превос- ходной книги блестящего ученого-исследователя проблем правильности про- грам Т. Хоара «Взаимодействующие последовательные процессы», в кото- рой на простых примерах управления автоматами показано, что параллель- ные композиции внешне не сложнее последовательных, если не акцентировать внимание на том, что отладка взаимодействующих процессов много сложнее. Важно, что модель Хоара чувствительна к обнаружению до- статочно тонких ошибок при создании программ. Поэтому для целей обуче- ния примеры Хоара дополнены рассмотрением вопросов отладки и методов минимизации ее объема с помощью выделения типовых, многократно ис- пользуемых фрагментов, реализуемых с учетом синтаксической правильно- сти результата подстановки фрагментных переменных.

Ведущее понятие языка Синхро – исполнитель, способный выполнять ко- манды29, исполнителей может быть много и они могут обладать разными си- стемами команд.

 
Основные методы сжатого представления массовых вычислений обычно связаны с использованием неявных циклов, позволяющих избежать выписы- вания однотипных схем над стандартными структурами данных типа много- мерных векторов. Этот механизм в Синхро используется более широко рас- пространением на технику применения функций и вызова исполнителей, что повышает лаконизм выражений. Механизмы применения функций рассмат- риваются как операции, допускающие просачивание.

Кроме того, из бинарных операций можно конструировать фильтры. Ре- зультат фильтрации исчезает из аргумента – он переносится в другую струк- туру данных или сохраняется как промежуточное значение. Структура из фильтров дает структуру из результатов их применения к одному и тому же аргументу. Кроме обычных присваиваний имеются и пересылки, при кото- рых пересылаемые данные могут исчезать.

 

 

29 Унаследовано от языка Робик и школьного курса информатики. Используется как общий синоним терминов «автомат», «процессор», «робот».


 

 

 
При определении фрагментов кроме обычных переменных используются фрагментные, с помощью которых можно формировать синтаксические мак- росы, вид параметров которых задается как синтаксическое подобие (~~) вхождению фрагментной переменной. Вид такого параметра задается мета- лингвистической формулой используемого языка. Например, фрагментная переменная «b» синтаксически подобна вхождению барьера «b:» или по- следнего элемента списка «, b)» в определение функции «учет».

учет = ( n b ~~ { b: |, b) })

\\ параметризация барьера в заголовке функции

ЕСЛИ n ТО b: учет (n – 1, b)

\\ использование барьера в определении функции

учет (10 контр)

\\ задание имена барьера при вызове функции

Язык не поддерживает статической иерархии определений и областей действия имен. Локализация имен используется лишь при определении ис- полнителей и функций. Текст программы формируется как композиция дей- ствий и фрагментов. При организации сложных данных и действий исполь- зуются общие структуры или средства композиции, такие как списки, вектора и множества, обеспечивающие представление отношений «после», «одновре- менно» и «взаимоисключено», причем последовательность вычисления ком- понентов может не зависеть от порядка их размещения в программе или в памяти:

(a; b) – последовательный доступ к результатам вычисления a; b в по- рядке вхождения.

(a, b) – последовательный доступ к результатам вычисления a, b в про- извольном порядке.

(a | b) – первый из результатов успешного вычисления a; b в порядке вхождения.

[a, b] – индексный доступ к результатам вычисления a, b в произвольном порядке.

 
[a; b] – индексный доступ к результатам вычисления a; b в порядке вхож- дения.

[a | b] – пара из номера и первого успешно вычисленного результата a или

b.

{a; b} – произвольный доступ к различимым результатам вычисления a;

b в порядке вхождения.

{a, b} – доступ к различимым результатам вычисления a, b в произволь- ном порядке.


 

 

 
{a | b} – доступ к результату первого успешно вычисленного результата a или b.

Все команды допускают безусловное и условное выполнение. Действия в языке Синхро приспособлены к варьированию дисциплины доступа к дан- ным и схемы управления процессами обработки комплексов с помощью схемы обхода, выглядящей подобно оператору IF без ELSE. Действия, изме- няющие состояния памяти, подчинены механизму транзакций, т. е. призна- ние их безуспешными влечет восстановление памяти в состояние, предше- ствующее этому действию.

При отладке формируется ряд контекстов, на которых демонстрируются конкретные свойства фрагментов, из которых собирается полная программа. Это контексты для отдельных потоков, для пар синхронизованных потоков, для интегрированной из потоков программы, а кроме того, контексты для удостоверения наличия-отсутствия информационных связей между фрагмен- тами. Потоки могут отлаживаться и выполняться независимо друг от друга в предположении, что каждый из них можно располагать отдельно. Механизм разложения программы на потоки дает полигон для формирования навыков аспектно-ориентированной декомпозиции программ.

Барьеры выполняют роль точек синхронизации, разбивающих программу на слои. Каждый слой начинает выполняться одновременно и завершается до выполнения следующего слоя. Выражения одного слоя из разных потоков, помеченные одинаковыми барьерами, выполняются одновременно.

 
Описание учебной версии языка использует метафору «фабрика разно- типных роботов для конструирования программно-управляемых игрушек». По этой метафоре конструктор игрушки строит определенную обстановку (контекст) для комплекса взаимодействующих роботов. При создании иг- рушки конструктор может сценарии робота уточнить, включая изменение си- стемы команд. Каждый поток может выполняться отдельным роботом. Ро- боты могут различаться по системе команд и другим характеристикам. Име- ются общие универсальные команды, известные всем роботам. Для оперирования роботами выделяются команды уровня МикроРобота, устроен- ные как функции без параметров над простыми данными из общей памяти. Работа МакроРобота похожа на работу препроцессора в производственных системах программирования.

Показ общих моделей параллельных вычислений и связанных с их при- менением явлений выполнен на задачах, описанных в книге Хоара [16], олим- пиадных задачах, примерах программ из описаний языков параллельного программирования и учебных примеров из школьных и факультативных кур- сов информатики. При подго


Поделиться с друзьями:

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.112 с.