Языки программирования потоков данных

Что такое язык программирования потока данных? Зачем это использовать? И есть ли в этом польза?


person Anton    schedule 20.01.2009    source источник
comment
Спасибо, я только что узнал что-то новое   -  person JoshBerke    schedule 20.01.2009
comment
Программы потока данных могут выполняться в пространстве (представьте себе заводскую линию), тогда как стандартные программы потока управления выполняются во времени. Дополнительную информацию см. на странице openspl.org/what-is-openspl.   -  person Nemanja Trifunovic    schedule 02.08.2016


Ответы (10)


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

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

Некоторые примеры функций и языков потока данных:

Языки текста

Визуальные языки

Продукты, в которые встроен язык визуального потока данных:

person Community    schedule 04.06.2009
comment
Добавление в менее известный список: - person Beef; 25.02.2011
comment
другой называется expecco, в комплекте с графическим интерфейсом (погуглите и скачайте демо) - person blabla999; 02.04.2011
comment
Каков пример того, что НЕ является потоком данных? - person solvingPuzzles; 28.09.2012
comment
Большинство языков, не перечисленных выше. C++, Java, Python, COBOL и почти любой другой императивный язык, большинство объектно-ориентированных языков, большинство функциональных языков, языки логического программирования, такие как Prolog и т. д. и т. д. - person ; 29.12.2012
comment
Почему никто не упоминает конвейеры Unix в качестве распространенного примера программирования потоков данных? Даже Википедия не упоминает об этом. Есть ли что-то, что дисквалифицирует его? - person Sridhar Sarnobat; 13.08.2014
comment
@ Шридхар-Сарнобат просто не подумал об этом, но ты прав. Не стесняйтесь редактировать мой ответ. - person ; 16.08.2014
comment
Я нашел многие из них, когда изучал визуальное программирование. Парадигма потока данных кажется более подходящей для них, чем модели императивного программирования. - person masterxilo; 01.03.2017
comment
@masterxilo Я думаю, что большая часть этого заключается в том, что легко визуализировать поток данных с помощью статических инструкций, поэтому парадигма (или один из многих вариантов: поток данных - это действительно очень расплывчатый термин, относящийся ко многим разновидностям) хорошо подходит для визуального представление и поэтому часто представляется таким образом. Меня лично интересуют языки с текстовыми и визуальными взаимозаменяемыми представлениями. Для императивных языков сложнее визуализировать поток данных, поэтому лучшее, что вы можете сделать, — это визуализировать взаимосвязь между инструкциями (например, блок-схему). - person ; 05.07.2017
comment
считаются ли языки затенения высокого уровня, такие как GLSL/HLSL, языками программирования потока данных? - person tigrou; 12.12.2018
comment
@tigrou Я не думал об этом. Я ни в коем случае не эксперт, и определение очень субъективно, но я бы сказал, что сами языки не таковы, а их модель времени выполнения. Я имею в виду, что сам код GLSL/HLSL представляет собой стандартный поток управления: у вас есть поток инструкций, которые выполняются по очереди, и вы можете прыгать по этому потоку инструкций (условия, вызовы функций и циклы), однако модель времени выполнения выглядит как модель потока данных, поскольку объекты буфера (данные вершин/данные фрагментов) передаются через конвейер шейдера. Поток данных и управления — две стороны одной медали - person ; 20.12.2018
comment
Знаете ли вы какие-нибудь книги, посвященные программированию потоков данных? Я нахожу некоторые, но немногие актуальные на амазонке - person Webwoman; 29.01.2019
comment
Небольшая поправка: Esterel — это язык, ориентированный на поток управления. И Lustre, и Esterel относятся к синхронным языкам. Lustre — типичный пример языка потока данных в этой области, тогда как Esterel — пример языка управления потоком в этой области. - person mihca; 13.05.2019
comment
@mihca Ах, ты прав. Я удалил его. Интересно, что недавно я сам разработал синхронный язык (поток управления). Это хорошая модель (как для реализации, так и для работы), если вам это сойдет с рук. - person ; 09.06.2019

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

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

Типичным примером языка программирования потока данных является программа электронных таблиц, в которой есть столбцы данных, на которые влияют другие столбцы данных. Если данные в одном столбце изменятся, другие данные в других столбцах, вероятно, изменятся вместе с ним. Хотя программа электронных таблиц является наиболее распространенным примером языка программирования потока данных, большинство из них, как правило, являются графическими языками.

person Anton    schedule 15.03.2009
comment
+1, потому что вы поделились тем, что узнали с тех пор, как задали этот вопрос. - person edymtt; 03.01.2013
comment
Спасибо. Более понятный, чем принятый ответ. - person tomekwi; 12.12.2014

Одним из видов программирования потока данных является реактивное программирование. Когда этот стиль программирования используется на функциональном языке, он называется функциональное реактивное программирование. Примером функционального реактивного языка программирования для Интернета является Flapjax.

Кроме того, anic недавно стал языком потока данных обсуждается в Hacker News.

Другой пример — Martlet из Оксфорда.

person Jeff Hammerbacher    schedule 10.01.2010
comment
+1 за упоминание реактивного программирования. - person Jus12; 21.03.2014
comment
Интересно, что этот ответ привел к обсуждению SO: stackoverflow.com/questions/30685707/. Это может зависеть от академического определения, являются ли реактивное программирование и поток данных одним и тем же. Я могу согласиться с тем, что это один из видов программирования потока данных. - person mihca; 13.05.2019

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

Эти акторы потребляют токены данных на своих входах и производят новые данные на своих выходах.

Это определение не навязывает средства для выполнения этого на практике. Однако производство/потребление данных необходимо тщательно анализировать: например, если актор B не потребляет с той же скоростью, что и актор A, производящий данные, то между ними требуется потенциально неограниченная память (FIFO). . Могут возникнуть многие другие проблемы, такие как взаимоблокировки.

Во многих случаях этот анализ потерпит неудачу, потому что чередование внутренних поведений неразрешимо (за пределами досягаемости сегодняшних формальных методов).

Несмотря на это, языки программирования потоков данных остаются привлекательными во многих областях:

  • например, для определения эталонных моделей для кодирования видео: программа на чистом C не будет выполнять эту работу, потому что она предполагает, что все выполняется как последовательность операций, что неверно для компьютеров (конвейер, VLIW, mullicores и VLSI) . Может быть, вы могли бы взглянуть на это: последняя докторская диссертация. Язык потока данных CAL предлагается в качестве унифицирующего языка для справочника по видеокодировщикам/декодерам следующего поколения.
  • Критически важен там, где требуется безопасность: если вы добавите несколько строгих предположений о производстве/потреблении данных, то вы получите язык с большим потенциалом с точки зрения генерации кода, доказательств и т. д. (см. синхронные языки)
person JCLL    schedule 21.07.2011

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

person Barry Kelly    schedule 20.01.2009
comment
я не согласен; Решатели ограничений обычно работают, обнаруживая оптимумы в пространствах поиска путем распространения ограничений. Электронные таблицы распространяют значения, а не ограничения. - person Barry Kelly; 20.01.2009
comment
Solve — это дополнительная функция, которую большинство людей не использует. И деревья — это тоже графы; более того, если любые две клетки ссылаются на одну и ту же третью ячейку, они образуют даг и уже не являются деревом. - person Barry Kelly; 21.01.2009
comment
Электронные таблицы распространяют значения, а не ограничения. Да, именно поток значений делает его потоком данных. - person ; 30.07.2009

Mozart поддерживает синхронизацию наподобие потока данных и имеет несколько коммерческих приложений. Вы также можете возразить, что make — это язык программирования потока данных.

person JesperE    schedule 15.03.2009
comment
Спасибо, что упомянули make. Это то, что привело меня сюда. Cunieform кажется ее обобщением. - person masterxilo; 01.03.2017

Многие инструменты ETL также относятся к этой области. Хорошим примером являются задачи потока данных в MS SSIS. Графический инструмент в данном случае.

person Teun D    schedule 17.01.2010

На самом деле это довольно старая концепция — в 1970-х годах был даже создан язык + машина для эффективного программирования и выполнения потоков данных (Манчестерский поток данных Машина).

Самое замечательное в нем — его двойственность по отношению к ленивым функциональным языкам, таким как Haskell. Таким образом, если ваши шаги обработки чисто функциональны, и если у вас достаточно процессорных блоков для их оценки и передачи результатов, вы получаете максимальную параллельность бесплатно - автоматически и без каких-либо усилий по программированию!

person blabla999    schedule 16.08.2010

Есть определенные области, в которых программирование потоков данных имеет гораздо больше смысла. Мультимедиа в реальном времени является одним из примеров, и две широко используемые графические среды программирования потоков данных, Pure Data и Max/MSP, ориентированы на программирование мультимедиа в реальном времени. Я предполагаю, что их визуальная природа также прекрасно соответствует программированию потока данных.

person Hans-Christoph Steiner    schedule 12.12.2011

Вы можете попробовать Cameleon: www.shinoe.org/cameleon, который кажется быть простым в использовании. Это графический язык для функционального программирования, который использует подход потока данных (работы).

Он написан на C++, но может вызывать любые локальные или удаленные программы, написанные на любом языке программирования.

Он имеет многомасштабный подход и кажется Turing Complete (это расширение сети Петри).

person Myosis.sh    schedule 25.04.2014
comment
а |› ж знак равно ж а . Является ли этот поток данных в Haskell (он получает среднее значение списка элементов от 1 до 200)? [1..200] |› map (*5) |› filter (› 66) |› dup ( сумма, длина) |› uncurry (div) где dup (f1, f2) v = (f1 v, f2 v) - person aoeu256; 20.07.2019