数据流编程语言


76

什么是数据流编程语言?为什么要使用它?有什么好处吗?


1
谢谢,我才学到新东西
JoshBerke

数据流程序可以在空间(想象中的工厂生产线)中执行,在该空间中,标准Controlflow程序可以及时执行。请参阅:openspl.org/what-is-openspl了解更多信息。
Nemanja Trifunovic

Answers:


106

在控制流语言中,您有一系列对外部数据进行操作的指令流。条件执行,跳转和过程调用会更改要执行的指令流。这可以看作是指令在数据中流动(例如,指令在由指令加载数据的寄存器上操作-数据是静态的,除非指令流将其移动)。控制流“ if”语句跳转到指令流中的正确分支,但数据不会移动。

在数据流语言中,您有一条数据流,该数据流从指令传递到要处理的指令。条件执行,跳转和过程调用会将数据路由到不同的指令。这可以看作是数据流经其他静态指令,例如电信号如何流经电路或水如何流经管道。数据流“ if”语句会将数据路由到正确的分支。

数据流功能和语言的一些示例:

文字语言

视觉语言

嵌入可视数据流语言的产品:


添加到鲜为人知的列表:
牛肉

另一个叫做expecco,带有GUI(谷歌并下载演示)
blabla999

什么不是数据流的例子?
solvingPuzzles

上面未列出的大多数语言。C ++,Java,Python,COBOL和几乎所有其他命令式语言,大多数OO语言,大多数功能语言,逻辑编程语言(例如Prolog等)

1
为什么没有人提到Unix管道作为数据流编程的常见示例?甚至维基百科也没有提及。是否有取消比赛资格的内容?
Sridhar Sarnobat

27

数据流编程语言是一种专注于程序状态并导致根据状态的任何更改进行操作的语言。数据流编程语言在本质上是并行的,因为操作依赖于输入,当这些输入满足时将导致该操作执行。这意味着与普通程序不同,在普通程序中,一个操作之后是下一个操作,在数据流程序中,只要满足输入条件,就将执行操作,因此没有设置顺序。

通常,数据流编程语言使用大型哈希表,其中键是程序的数据,表的值是指向程序操作的指针。这使多核程序更容易用数据流编程语言创建,因为每个核仅需要哈希表即可工作。

数据流编程语言的一个常见示例是电子表格程序,该程序具有受其他数据列影响的数据列。如果一列中的数据发生更改,则其他列中的其他数据可能也会随之更改。尽管电子表格程序是数据流编程语言的最常见示例,但其中大多数倾向于图形语言。


1
+1是因为您分享了自提出此问题以来所学到的知识。
edymtt

2
谢谢。比接受的答案更容易理解。
tomekwi 2014年

17

一种数据流编程是反应式编程。在函数式语言中使用这种编程样式时,称为函数式反应式编程。Web的功能性反应式编程语言的一个示例是Flapjax

另外,anic是最近在Hacker News上讨论的一种数据流语言。

另一个例子是牛津大学的Martlet


1
+1代表反应式程式设计。
2014年

有趣的是,这个答案导致了对SO的讨论:“ stackoverflow.com/questions/30685707/… ”。反应式编程和数据流是否相同可能取决于学术定义。我可以同意这是“一种数据流编程”。
mihca

9

数据流编程语言建议在所谓的“参与者”中隔离一些本地行为,这些行为应该并行运行并通过点对点通道交换数据。与计算机冯·诺依曼模型不同,没有中央存储器(用于代码和数据)的概念。

这些参与者在其输入上消耗数据令牌,并在其输出上产生新数据。

该定义并不强加在实践中运行此方法的手段。但是,必须仔细分析数据的产生/消耗:例如,如果参与者B的消耗速度与产生数据的参与者A的消耗速度不同,则它们之间需要潜在的无限制内存(FIFO) 。可能还会出现许多其他问题,例如死锁

在许多情况下,这种分析将失败,因为内部行为的交织是棘手的(超出了当今形式方法的范围)。

尽管如此,数据流编程语言仍然在许多领域具有吸引力

  • 例如,定义用于视频编码的参考模型:纯C程序将无法完成工作,因为它假设所有内容都是按一系列操作运行的,这在计算机(管道,VLIW,多核和VLSI)中是不正确的。也许您可以看一下:最近的博士学位论文。CAL数据流语言被建议作为下一代视频编码器/解码器参考的统一语言。
  • 需要安全性的关键任务:如果在数据的生产/使用上添加一些强有力的假设,那么您将获得一种在代码生成,证明等方面具有强大潜力的语言(请参见同步语言)。

5

Excel(和其他电子表格)本质上是数据流语言。数据流语言与功能编程语言非常相似,不同之处在于整个程序图的叶子上的值根本不是值,而是变量(或值流),因此,当它们改变时,变化会起伏并向上流动。 。


1
我不同意 约束求解器通常通过传播约束条件在搜索空间内发现最优值来工作。电子表格传播值,而不是约束。
巴里·凯利2009年

1
解决是大多数人不使用的补充功能。树木也是图。此外,如果任何两个单元格引用相同的第三个单元格,它们将形成dag,不再是树。
巴里·凯利

4
“电子表格传播值,而不是约束。” 是的,值的流动使它成为“数据流”。

5

Mozart支持类似数据流的同步,并且确实有一些商业应用。您还可以说make是一种数据流编程语言。


感谢您提及make。是什么把我带到这里的。Cunieform似乎是它的概括。
masterxilo

2

在这个领域中也有许多ETL工具。MS SSIS中的数据流任务就是一个很好的例子。在这种情况下为图形工具。


2

实际上,这是一个相当古老的概念-在1970年代,甚至有一台语言+机器为高效的数据流编程和执行而构建(曼彻斯特数据流 机器)。

伟大的事情是它对像Haskell这样的惰性函数语言具有双重性。因此,如果您的处理步骤是纯功能性的,并且您有足够的处理单元来评估它们并传递结果,那么您将免费获得最大的并行度-自动且无需任何编程工作!


1

在某些领域,数据流编程更有意义。实时媒体就是一个例子,Pure Data和Max / MSP这两种广泛使用的图形数据流编程环境都专注于实时媒体编程。我想它们的视觉特性也可以很好地映射到数据流编程中。


1

您可以尝试Cameleonwww.shinoe.org/cameleon,它似乎很容易使用。这是用于函数式编程的图形语言,具有数据(工作)流方法。

它是用C ++编写的,但可以调用以任何编程语言编写的任何类型的本地或远程程序。

它具有多尺度方法,并且似乎是Turing完整的(这是Petri网络扩展)。


a |> f = fa。该数据流是否在Haskell中(它从1..200获取项目列表的平均值)?[1..200] |>映射(* 5)|>过滤器(> 66)|> dup(总和,长度)|>无毛(div),其中dup(f1,f2)v =(f1 v,f2 v)
aoeu256
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.