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