Что такое язык программирования потока данных? Зачем использовать это? И есть ли в этом какие-то преимущества?
Языки программирования потока данных
Ответ 1
На языке потока управления у вас есть поток инструкций, которые работают с внешними данными. Условное выполнение, переходы и вызовы процедур изменяют поток команд для выполнения. Это можно рассматривать как инструкции, проходящие через данные (например, инструкции работают с регистрами, которые загружаются данными с помощью инструкций - данные являются статическими, если поток команд не перемещает их). Оператор "if" потока управления переходит на правильную ветвь в потоке команд, но данные не перемещаются.
На языке потока данных у вас есть поток данных, который передается от инструкции к инструкции для обработки. Условное выполнение, переходы и вызовы процедур направляют данные к различным инструкциям. Это можно рассматривать как данные, проходящие через статические инструкции, например, как электрические сигналы проходят по контурам или вода течет по трубам. Оператор потока данных if будет направлять данные в правильную ветвь.
Некоторые примеры функций потока данных и языков:
- Таблицы по сути являются потоком данных
- Unix трубы
- Фьючерсы и обещания - это потоки данных или конструкции, подобные потоку данных, встречающиеся во многих современных языках.
- Обмен сообщениями в актерской модели является потоком данных
- Некоторые языки имеют функции потока данных:
- Оз имеет переменные потока данных
- Groovy имеет GPars
- Clojure имеет clojure.contrib.dataflow, Reagi и Javelin
Текстовые языки
- VHDL, Verilog и другие языки описания аппаратного обеспечения по сути являются потоком данных
- цыпленок
- Cunieform
- Блеск, используемый в оборонной, аэрокосмической и энергетической промышленности
- Птолемей II
- Найквиста
Визуальные языки
- LabVIEW (скриншот [ источник ])
- Макс/MSP (скриншот [ источник ])
- Чистые данные (скриншот [ источник ])
- Реактор (скриншот [ источник ])
- SCADE (скриншот [ источник ]), графическая среда программирования для Luster
- SynthMaker (скриншот [ источник ]) и FlowStone
- vvvv (скриншот [ источник ])
- Expecco (скриншот [ источник ])
- Shake (скриншот [ источник ])
- [BLOK] (скриншот [ источник ])
- Кварцевый Композитор (скриншот [ источник ])
- AudioMulch (скриншот [ источник ])
Продукты, которые встраивают визуальный язык потока данных:
Ответ 2
Языки программирования потока данных - это те, которые фокусируются на состоянии программы и вызывают операции в соответствии с любым изменением состояния. Языки программирования потока данных по своей сути параллельны, поскольку операции полагаются на входы, которые, когда они встречаются, вызовут выполнение операции. Это означает, что в отличие от обычной программы, где за одной операцией следует следующая операция, в программе обработки потока данных операции будут выполняться до тех пор, пока входы будут выполнены и, следовательно, не будет установлен порядок.
Часто языки программирования потока данных используют большую хэш-таблицу, где ключи являются данными программы, а значения этой таблицы являются указателями на операции программы. Это упрощает создание многоядерных программ на языке программирования потока данных, поскольку для каждого ядра потребуется только работа хеш-таблицы.
Общим примером языка программирования потока данных является программа с расширенными листами, которая имеет столбцы данных, на которые влияют другие столбцы данных. Если данные в одном столбце меняются, другие данные в других столбцах, вероятно, будут изменены вместе с ним. Хотя программа распространения листов является наиболее распространенным примером языка программирования потока данных, большинство из них, как правило, являются графическими языками.
Ответ 3
Одним из видов программирования потока данных является реактивное программирование. Когда этот стиль программирования используется на функциональном языке, он называется функциональным реактивным программированием. Примером функционального реактивного языка программирования для Интернета является Flapjax.
Кроме того, anic является языком потока данных в последнее время обсуждается в новостях Hacker.
Другим примером является Martlet из Оксфорда.
Ответ 4
Языки программирования потоков данных предлагают изолировать некоторые локальные поведения в так называемых " актерах ", которые должны работать параллельно и обмениваться данными по каналам точка-точка. Нет понятия центральной памяти (как для кода, так и для данных) в отличие от модели компьютеров фон Неймана.
Эти субъекты потребляют маркера данных на свои входы и производят новые данные о своих выходах.
Это определение не навязывает средства для применения этого на практике. Однако производство/потребление данных необходимо тщательно анализировать: например, если субъект B не потребляет с той же скоростью, что и субъект A, который создает данные, то между ними требуется потенциально неограниченная память (FIFO)., Многие другие проблемы могут возникнуть как тупики.
Во многих случаях этот анализ потерпит неудачу, потому что чередование внутренних поведений трудноразрешимо (вне досягаемости современных формальных методов).
Несмотря на это, языки программирования потоков данных остаются привлекательными во многих областях:
- например, чтобы определить эталонные модели для кодирования видео: программа на чистом C не будет выполнять эту работу, потому что она предполагает, что все выполняется как последовательность операций, что неверно для компьютеров (конвейер, VLIW, mutlicores и VLSI), Может быть, вы могли бы взглянуть на это: недавняя кандидатская диссертация. Язык потока данных CAL предлагается в качестве унифицирующего языка для справочников видеокодеров/декодеров следующего поколения.
- Критическое значение там, где требуется безопасность: если вы добавите некоторые строгие предположения относительно производства/потребления данных, то вы получите язык с большим потенциалом в плане генерации кода, проверок и т.д. (См. Синхронные языки)
Ответ 5
Excel (и другие электронные таблицы) - это, по сути, языки потока данных. Языки потока данных во многом похожи на языки функционального программирования, за исключением того, что значения в листьях всего графика программы не являются значениями, а переменными (или потоками значений), так что, когда они меняются, изменения пульсируют и текут график.
Ответ 6
Моцарт поддерживает синхронизацию, подобную потоку данных, и у него есть некоторые коммерческие приложения. Вы также можете утверждать, что make - это язык программирования потока данных.
Ответ 7
Многие инструменты ETL также входят в эту область. Хорошим примером являются задачи потока данных в MS SSIS. Графический инструмент в этом случае.
Ответ 8
Это на самом деле довольно старая концепция - в 1970-х годах был даже создан язык + машина для эффективного программирования и выполнения потоков данных (Manchester Dataflow Machine).
Самое замечательное в этом - это двойственность ленивых функциональных языков, таких как Haskell. Поэтому, если ваши этапы обработки являются чисто функциональными, и если у вас есть достаточно блоков обработки для их оценки и передачи результатов, вы получаете максимальную параллельность бесплатно - автоматически и без каких-либо усилий по программированию!
Ответ 9
Существуют определенные домены, где программирование потока данных имеет гораздо больше смысла. В качестве примера можно привести медиаресурсы в реальном времени, и две широко используемые графические среды программирования потока данных Pure Data и Max/MSP ориентированы на программирование в реальном времени. Я полагаю, их визуальный характер также хорошо сочетается с программированием потока данных.
Ответ 10
Вы можете попробовать Cameleon: www.shinoe.org/cameleon, который кажется простым в использовании. Это графический язык для функционального программирования, который использует подход данных (работы) -flow.
Он написан на C++, но может вызывать любой тип локальных или удаленных программ, написанных на любом языке программирования.
Он имеет многомасштабный подход и, кажется, завершен по Тьюрингу (это расширение сети Петри).