85

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

4

10 回答 10

112

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

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

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

文本语言

视觉语言

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

于 2009-06-04T10:40:08.683 回答
29

数据流编程语言是专注于程序状态并根据状态的任何变化导致操作发生的语言。数据流编程语言本质上是并行的,因为操作依赖于输入,当满足时会导致操作执行。这意味着与一个操作之后是下一个操作的正常程序不同,在数据流中,只要满足输入,操作就会执行,因此没有设置顺序。

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

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

于 2009-03-15T06:10:51.563 回答
18

一种数据流编程是反应式编程。当这种编程风格在函数式语言中使用时,它被称为函数式反应式编程。用于 Web 的函数式反应式编程语言的一个示例是Flapjax

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

另一个例子是来自牛津的Martlet 。

于 2010-01-10T00:43:19.747 回答
11

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

这些参与者在其输入上使用数据令牌并在其输出上生成新数据。

这个定义并没有强加在实践中运行它的方法。但是,数据的生产/消费需要仔细分析:例如,如果参与者 B 的消费速度与生产数据的参与者 A 的速度不同,那么它们之间就需要潜在的无界内存 (FIFO) . 可能会出现许多其他问题,例如死锁

在许多情况下,这种分析会失败,因为内部行为的交织是难以处理的(超出了当今正式方法的范围)。

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

  • 例如定义视频编码的参考模型:纯 C 程序无法完成这项工作,因为它假设一切都作为一系列操作运行,这在计算机(管道、VLIW、多核和 VLSI)中是不正确的. 也许你可以看看这个:最近的博士论文。CAL 数据流语言被提议作为下一代视频编码器/解码器参考的统一语言。
  • 需要安全的关键任务:如果您对数据的生产/消费添加一些强有力的假设,那么您将获得一种在代码生成、证明等方面具有强大潜力的语言(请参阅同步语言
于 2011-07-21T11:02:29.140 回答
5

Excel(和其他电子表格)本质上是数据流语言。数据流语言很像函数式编程语言,不同之处在于整个程序图的叶子上的值根本不是值,而是变量(或值流),因此当它们发生变化时,变化会涟漪并向上流动.

于 2009-01-20T16:05:21.230 回答
5

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

于 2009-03-15T07:56:16.707 回答
3

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

它的伟大之处在于它与 Haskell 等惰性函数式语言的双重性。因此,如果您的处理步骤是纯函数式的,并且如果您有足够的处理单元来评估它们并传递结果,您将免费获得最大的并行性 - 自动且无需任何编程工作!

于 2010-08-16T19:41:20.837 回答
2

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

于 2010-01-17T16:43:53.400 回答
1

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

于 2011-12-12T15:20:57.817 回答
1

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

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

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

于 2014-04-25T13:46:23.607 回答