~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 7194431785AD6AF6054E672CA2A3D5F5__1716249420 ✰
Заголовок документа оригинал.:
✰ Flow-based programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Потоковое программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Flow-based_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/71/f5/7194431785ad6af6054e672ca2a3d5f5.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/71/f5/7194431785ad6af6054e672ca2a3d5f5__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:14:32 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 21 May 2024, at 02:57 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Потоковое программирование — Википедия Jump to content

Программирование на основе потока

Из Википедии, бесплатной энциклопедии

В компьютерном программировании программирование на основе потоков ( FBP ) — это парадигма программирования , которая определяет приложения как сети «черного ящика» процессов , которые обмениваются данными через предопределенные соединения посредством передачи сообщений , где соединения указываются вне процессов. Эти процессы «черного ящика» можно бесконечно повторно соединять для формирования различных приложений без необходимости внесения внутренних изменений. Таким образом, FBP естественным образом ориентирован на компоненты .

FBP — это особая форма программирования потоков данных , основанная на ограниченных буферах, информационных пакетах с определенным временем жизни, именованных портах и ​​отдельном определении соединений.

Введение [ править ]

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

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

Поскольку процессы FBP могут продолжать выполняться до тех пор, пока у них есть данные для работы и место для хранения результатов, приложения FBP обычно выполняются за меньшее время, чем обычные программы, и оптимально используют все процессоры на машине, не требуя специального программирования. для достижения этой цели. [1]

Определение сети обычно имеет схематический вид и преобразуется в список соединений на каком-либо языке или нотации более низкого уровня. FBP часто является языком визуального программирования на этом уровне. Более сложные определения сетей имеют иерархическую структуру, состоящую из подсетей с «прикрепленными» соединениями. Многие другие потоковые языки/среды выполнения построены на основе более традиционных языков программирования, наиболее заметным из которых является [ нужна цитата ] Примером является RaftLib , который использует операторы C++, подобные iostream, для указания графа потока.

FBP имеет много общего с Линдой. [2] язык в том смысле, что он, по терминологии Гелернтера и Каррьеро, является «координационным языком»: [3] по сути, он не зависит от языка. Действительно, при наличии планировщика, написанного на достаточно низкоуровневом языке, компоненты, написанные на разных языках, могут быть связаны между собой в единую сеть. Таким образом, FBP соответствует концепции предметно-ориентированных языков или «мини-языков».

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

FBP продвигает высокоуровневый функциональный стиль спецификаций, который упрощает понимание поведения системы. Примером этого является модель распределенного потока данных для конструктивного определения и анализа семантики распределенных многосторонних протоколов.

История [ править ]

Программирование на основе потоков было изобретено Дж. Полом Моррисоном в начале 1970-х годов и первоначально реализовано в программном обеспечении для канадского банка. [4] На момент своего создания FBP находился под сильным влиянием некоторых языков моделирования IBM того периода, в частности GPSS , но его корни уходят корнями в назвал основополагающую статью Конвея о том, что он сопрограммами . [5]

За прошедшие годы FBP претерпел ряд изменений в названии: первоначальная реализация называлась AMPS (Advanced Modular Processing System). Одно крупное приложение в Канаде было запущено в 1975 году и по состоянию на 2013 год постоянно использовалось в производстве, работая ежедневно, вот уже почти 40 лет. Поскольку IBM считала, что идеи, лежащие в основе FBP, «слишком похожи на закон природы», чтобы быть патентоспособными, они вместо этого сделали основные концепции FBP общедоступными с помощью Бюллетеня технической информации «Модульная система программирования с чередованием задач, реагирующая на данные». , [6] в 1971 году. [4] Статья, описывающая его концепции и опыт его использования, была опубликована в 1978 году в журнале IBM Research IBM Systems Journal под названием DSLM. [7] Вторая реализация была реализована как совместный проект IBM Canada и IBM Japan под названием «Менеджер разработки потоков данных» (DFDM) и некоторое время продавался в Японии в конце 80-х под названием «Менеджер программирования потоков данных».

Обычно в IBM эти концепции назывались «Потоком данных», но этот термин был сочтен слишком общим, и в конечном итоге было принято название «Программирование на основе потоков».

С начала 80-х по 1993 год Дж. Пол Моррисон и архитектор IBM Уэйн Стивенс усовершенствовали и продвигали концепции, лежащие в основе FBP. Стивенс написал несколько статей, описывающих и поддерживающих концепцию FBP, и включил материалы о ней в несколько своих книг. [8] [9] [ нужен неосновной источник ] [10] [ нужен неосновной источник ] . В 1994 году Моррисон опубликовал книгу, описывающую FBP и предоставляющую эмпирические доказательства того, что FBP приводит к сокращению времени разработки. [11]

Концепции [ править ]

На следующей диаграмме показаны основные объекты диаграммы FBP (кроме информационных пакетов). Такая диаграмма может быть преобразована непосредственно в список соединений, который затем может быть выполнен соответствующим механизмом (программным или аппаратным).

Простая диаграмма ФБП

A, B и C — процессы, выполняющие компоненты кода. O1, O2 и два IN — это порты, соединяющие соединения M и N с соответствующими процессами. Процессам B и C разрешено выполнять один и тот же код, поэтому каждый процесс должен иметь свой собственный набор рабочей памяти, блоков управления и т. д. Независимо от того, используют ли они общий код, B и C могут свободно использовать один и тот же порт. имена, поскольку имена портов имеют значение только внутри компонентов, ссылающихся на них (и, конечно, на сетевом уровне).

M и N — это то, что часто называют « ограниченными буферами », и имеют фиксированную емкость с точки зрения количества IP-адресов, которые они могут хранить в любой момент времени.

Концепция портов позволяет использовать один и тот же компонент в нескольких местах сети. В сочетании с возможностью параметризации, называемой пакетами исходной информации (IIP), порты предоставляют FBP возможность повторного использования компонентов, что делает FBP архитектурой на основе компонентов . Таким образом, FBP демонстрирует то, что Рауль де Кампо и Нейт Эдвардс из IBM Research назвали настраиваемой модульностью .

Информационные пакеты или IP-адреса распределяются в так называемом «пространстве IP» (точно так же, как кортежи Линды распределяются в «пространстве кортежей») и имеют четко определенный срок жизни до тех пор, пока они не будут удалены и их пространство не будет освобождено - в FBP это должно быть явным действием со стороны процесса-владельца. IP-адреса, перемещающиеся по данному соединению (на самом деле это их «дескрипторы»), составляют «поток», который генерируется и потребляется асинхронно — таким образом, эта концепция имеет сходство с концепцией ленивых минусов , описанной в статье Фридмана и Уайза 1976 года. [12]

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

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

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

Реализации FBP могут быть невытесняющими или вытесняющими — более ранние реализации имели тенденцию быть невытесняющими (мэйнфрейм и язык C), тогда как последняя реализация Java (см. ниже) использует класс Java Thread и является вытесняющей.

Примеры [ править ]

Проблема с Telegram [ править ]

Компоненты FBP часто образуют дополнительные пары. В этом примере используются две такие пары. Описанная проблема кажется очень простой на словах, но на самом деле ее удивительно сложно решить, используя традиционную процедурную логику. Задача, названная «проблемой телеграммы», первоначально описанная Питером Науром , состоит в том, чтобы написать программу, которая принимает строки текста и генерирует выходные строки, содержащие как можно больше слов, где количество символов в каждой строке не превышает определенного длина. Слова не могут быть разделены, и мы предполагаем, что ни одно слово не длиннее, чем размер выходных строк. Это аналогично проблеме переноса слов в текстовых редакторах. [13]

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

  • «Слова» явно упоминаются в описании проблемы, поэтому разработчику разумно рассматривать слова как информационные пакеты (IP).
  • В FBP нет единой иерархии вызовов, поэтому у программиста нет соблазна сделать подшаблон решения высшим уровнем.

Вот наиболее естественное решение в FBP (в FBP не существует единственного «правильного» решения, но оно кажется естественным):

Проблема с телеграммой Питера Наура

где DC и RC означают «DeCompose» и «ReCompose» соответственно.

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

Пакетное обновление [ править ]

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

Каноническая структура «пакетного обновления»

В FBP компонент многократного использования (Collate), основанный на идее модульной записи в Collator, значительно упрощает написание этого типа приложения, поскольку Collate объединяет два потока и вставляет IP-адреса скобок для обозначения уровней группировки, что значительно упрощает логику последующего процесса. Предположим, что один поток («главные» в данном случае) состоит из IP-адресов со значениями ключей 1, 2 и 3, а IP-адреса второго потока («детали») имеют значения ключей 11, 12, 21, 31, 32, 33. и 41, где первая цифра соответствует значениям главного ключа. Используя символы скобок для представления IP-адресов в скобках, сопоставленный выходной поток будет следующим:

( м1 д11 д12 ) ( м2 д21 ) ( м3 д31 д32 д33 ) (д41)
 

Поскольку мастера со значением 4 не было, то последняя группа состоит из одной детали (плюс скобки).

Структуру вышеуказанного потока можно кратко описать, используя BNF -подобную нотацию, например:

{ ( [м] d* ) }*
 

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

Мультиплексирование процессов [ править ]

Программирование на основе потоков естественным образом поддерживает мультиплексирование процессов. Поскольку компоненты доступны только для чтения, любое количество экземпляров данного компонента («процессов») может работать асинхронно друг с другом.

Пример мультиплексирования

Когда компьютеры обычно имели один процессор, это было полезно при большом количестве операций ввода-вывода; теперь, когда машины обычно имеют несколько процессоров, это начинает становиться полезным, когда процессы также нагружают процессор. На диаграмме в этом разделе показан один процесс «Балансировщик нагрузки», распределяющий данные между тремя процессами, обозначенными S1, S2 и S3 соответственно, которые являются экземплярами одного компонента, которые, в свою очередь, передаются в один процесс по принципу «первым пришел». по принципу «первым обслужен».

Простая интерактивная сеть [ править ]

Схема общего интерактивного приложения

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

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

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

Сравнение с другими парадигмами и методологиями [ править ]

программирование Джексона (JSP) и Разработка систем Джексона ( Структурное JSD )

Эта методология предполагает, что программа должна быть структурирована как единая процедурная иерархия подпрограмм. Его отправной точкой является описание приложения как набора «основных строк», основанных на структурах входных и выходных данных. Затем одна из этих «основных линий» выбирается для управления всей программой, а остальные необходимо «инвертировать», чтобы превратить их в подпрограммы (отсюда и название «инверсия Джексона»). Иногда это приводит к так называемому «конфликту», требующему разделения программы на несколько программ или сопрограмм. При использовании FBP этот процесс инверсии не требуется, поскольку каждый компонент FBP можно рассматривать как отдельную «основную линию».

FBP и JSP разделяют концепцию обработки программы (или некоторых компонентов) как анализатора входного потока.

В более поздней работе Джексона « Разработка системы Джексона» (JSD) эти идеи получили дальнейшее развитие. [14] [15]

В JSD проект сохраняется как проект сети до заключительного этапа реализации. Затем модель преобразуется в набор последовательных процессов по количеству доступных процессоров. Джексон обсуждает возможность прямого выполнения сетевой модели, существовавшей до этого шага, в разделе 1.3 своей книги (курсив добавлен):

Спецификация, созданная в конце этапа системного синхронизации, в принципе, может быть выполнена напрямую. Необходимая среда будет содержать процессор для каждого процесса, устройство, эквивалентное неограниченному буферу для каждого потока данных, а также некоторые устройства ввода и вывода, с помощью которых система подключается к реальному миру. Такую среду, конечно, можно обеспечить с помощью подходящего программного обеспечения, работающего на достаточно мощной машине. Иногда такое прямое выполнение спецификации возможно и даже может быть разумным выбором. [15]

FBP был признан М. А. Джексоном как подход, следующий его методу «Разложение программы на последовательные процессы, взаимодействующие с помощью механизма, подобного сопрограмме». [16]

Аппликативное программирование [ править ]

У. Б. Акерман определяет аппликативный язык как язык, который выполняет всю свою обработку посредством операторов, применяемых к значениям. [17] Самым ранним известным аппликативным языком был LISP.

Компонент FBP можно рассматривать как функцию, преобразующую входной поток(и) в выходной поток(и). Затем эти функции объединяются для выполнения более сложных преобразований, как показано здесь:

Две функции, питающие одну

Если мы обозначим потоки, как показано, строчными буквами, то приведенную выше диаграмму можно кратко представить следующим образом:

в = G(F(a),F(b));
 

Так же, как в функциональной нотации F может использоваться дважды, поскольку он работает только со значениями и, следовательно, не имеет побочных эффектов, в FBP два экземпляра данного компонента могут работать одновременно друг с другом, и поэтому компоненты FBP не должны иметь побочных эффектов. или. Функциональная нотация может явно использоваться для представления хотя бы части сети FBP.

Тогда возникает вопрос, могут ли сами компоненты FBP быть выражены с использованием функциональной записи. У.Х. Бердж показал, как потоковые выражения могут быть разработаны с использованием рекурсивного аппликативного стиля программирования, но эта работа проводилась в терминах атомарных значений (потоков). [18] В FBP необходимо уметь описывать и обрабатывать фрагменты структурированных данных (IP-адреса FBP).

Более того, большинство аппликативных систем предполагают, что все данные доступны в памяти одновременно, тогда как приложения FBP должны иметь возможность обрабатывать длительные потоки данных, используя при этом ограниченные ресурсы. концепцию «ленивых минусов» Фридман и Уайз предложили способ сделать это, добавив к работе Берджа . Это устранило требование, чтобы оба аргумента «против» были доступны в один и тот же момент времени. «Ленивые минусы» фактически не создают поток до тех пор, пока не будут реализованы оба его аргумента — перед этим он просто записывает «обещание» сделать это. Это позволяет динамически реализовать поток спереди, но с нереализованной внутренней частью. Конец потока остается нереализованным до самого конца процесса, а начало представляет собой постоянно удлиняющуюся последовательность элементов.

Линда [ править ]

Многие концепции FBP, по-видимому, были открыты независимо в разных системах на протяжении многих лет. Линда, упомянутая выше, является одной из таких. Разницу между этими двумя методами иллюстрирует метод балансировки нагрузки «школы пираний» Линды — в FBP для этого требуется дополнительный компонент «балансировщика нагрузки», который направляет запросы к компоненту в списке, который имеет наименьшее количество IP-адресов, ожидающих быть обработаны. Очевидно, что FBP и Linda тесно связаны, и один из них можно легко использовать для моделирования другого.

Объектно-ориентированное программирование [ править ]

Объект в ООП можно описать как полуавтономную единицу, содержащую как информацию, так и поведение. Объекты взаимодействуют посредством «вызовов методов», которые по сути представляют собой вызовы подпрограмм, выполняемые косвенно через класс, к которому принадлежит принимающий объект. Доступ к внутренним данным объекта возможен только посредством вызовов методов, поэтому это форма сокрытия информации или «инкапсуляции». Однако инкапсуляция появилась раньше ООП — Дэвид Парнас написал одну из основополагающих статей об этом в начале 70-х годов. [19] - и является базовой концепцией в вычислительной технике. Инкапсуляция — это сама суть компонента FBP, который можно рассматривать как черный ящик , выполняющий некоторое преобразование входных данных в выходные данные. В FBP частью спецификации компонента являются форматы данных и структуры потоков, которые он может принимать и которые он будет генерировать. Это представляет собой форму проектирования по контракту . Кроме того, к данным IP-адреса может получить прямой доступ только процесс, владеющий им в данный момент. Инкапсуляцию также можно реализовать на сетевом уровне, если внешние процессы защищают внутренние.

В статье К. Эллиса и С. Гиббса проводится различие между активными и пассивными объектами. [20] Пассивные объекты содержат информацию и поведение, как указано выше, но они не могут определить время этого поведения. С другой стороны, активные объекты могут это сделать. В своей статье Эллис и Гиббс утверждают, что активные объекты имеют гораздо больший потенциал для разработки обслуживаемых систем, чем пассивные объекты. Приложение FBP можно рассматривать как комбинацию этих двух типов объектов, где процессы FBP будут соответствовать активным объектам, а IP-адреса будут соответствовать пассивным объектам.

Модель актера [ править ]

FBP рассматривает Карла Хьюитта как актор асинхронный процесс с двумя портами: один для входных сообщений и один для управляющих сигналов. Управляющий сигнал излучается самим актером после каждого раунда выполнения. Цель этого сигнала — избежать параллельного выполнения тела актера и, таким образом, обеспечить доступ к полям объекта актера без синхронизации.

См. также [ править ]

Ссылки [ править ]

  1. ^ «Потоковое программирование» .
  2. ^ Каррьеро, Николас; Гелернтер, Дэвид (1989). «Линда в контексте» . Коммуникации АКМ . 32 (4): 444–458. дои : 10.1145/63334.63337 . S2CID   5900105 .
  3. ^ Гелернтер, Дэвид; Каррьеро, Николас (1992). «Координационные языки и их значение». Коммуникации АКМ . 35 (2): 97–107. дои : 10.1145/129630.129635 . S2CID   7748555 .
  4. ^ Перейти обратно: а б Гейб Стейн (август 2013 г.). «Как загадочный метод кодирования банковского программного обеспечения 1970-х годов может спасти здравомыслие веб-разработчиков во всем мире» . Проверено 24 января 2016 г.
  5. ^ Конвей, Мелвин Э. (1963). «Проектирование сепарабельного компилятора диаграмм переходов» . Коммуникации АКМ . 6 (7): 396–408. дои : 10.1145/366663.366704 . S2CID   10559786 .
  6. ^ Дж. Пол Моррисон, Модульная система реагирования на данные, система программирования с чередованием задач, Бюллетень технической информации IBM, Vol. 13, № 8, 2425-2426, январь 1971 г.
  7. ^ Моррисон, JP (1978). «Механизм связи потоков данных». Системный журнал IBM . 17 (4): 383–408. дои : 10.1147/sj.174.0383 .
  8. ^ Стивенс, WP (1982). «Как поток данных может повысить продуктивность разработки приложений». Системный журнал IBM . 21 (2): 162–178. дои : 10.1147/sj.212.0162 .
  9. ^ WP Стивенс, Использование потока данных для разработки приложений , Байт, июнь 1985 г.
  10. ^ WP Стивенс, Проектирование программного обеспечения - концепции и методы , Серия «Практическая разработка программного обеспечения», под ред. Аллен Макро, Прентис Холл, 1990 г., ISBN   0-13-820242-7
  11. ^ Джонстон, Уэсли М.; Ханна, младший Пол; Миллар, Ричард Дж. (2004). «Достижения в языках программирования потоков данных». Обзоры вычислительной техники ACM . 36 (1): 1–34. CiteSeerX   10.1.1.99.7265 . дои : 10.1145/1013208.1013209 . S2CID   5257722 .
  12. ^ Д. П. Фридман и Д. С. Уайз, CONS не должна оценивать свои аргументы, Автоматы, языки и программирование, Edinburgh University Press, Эдинбург, 1976.
  13. ^ «Проблема с телеграммой» Питера Наура » . Архивировано из оригинала 6 сентября 2014 г. Проверено 6 сентября 2014 г.
  14. ^ « Программирование » М.А. Джексона, опубликовано в «Трудах семинара по программному обеспечению в физике высоких энергий», страницы 1–12 , ЦЕРН, Женева, 4–6 октября 1982 г.
  15. ^ Перейти обратно: а б « Метод разработки системы. Архивировано 6 февраля 2012 г. в Wayback Machine », М. А. Джексон, опубликовано в журнале « Инструменты и понятия для построения программ: продвинутый курс» , Издательство Кембриджского университета, 1982 г.
  16. ^ « JSP в перспективе » Майкл Джексон; JSP в перспективе; в «Пионерах программного обеспечения: вклад в разработку программного обеспечения»; Манфред Брой, редакторы Эрнста Денерта; Спрингер, 2002 г.
  17. ^ В. Б. Акерман, Языки потока данных , Материалы Национальной компьютерной конференции, стр. 1087-1095, 1979.
  18. ^ WH Burge, Методы рекурсивного программирования , Аддисон-Уэсли, Ридинг, Массачусетс, 1975.
  19. ^ Парнас, Д.Л. (1972). «О критериях разложения систем на модули» . Коммуникации АКМ . 15 (12): 1053–1058. дои : 10.1145/361598.361623 . S2CID   53856438 .
  20. ^ К. Эллис и С. Гиббс, Активные объекты: реальность и возможности , в «Объектно-ориентированные концепции, базы данных и приложения» , ред. В. Ким и Ф. Х. Лоховский, ACM Press, Аддисон-Уэсли, 1989 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 7194431785AD6AF6054E672CA2A3D5F5__1716249420
URL1:https://en.wikipedia.org/wiki/Flow-based_programming
Заголовок, (Title) документа по адресу, URL1:
Flow-based programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)