什么是数据流编程语言?为什么要使用它?它有什么好处吗?
10 回答
在控制流语言中,您有一个对外部数据进行操作的指令流。条件执行、跳转和过程调用会改变要执行的指令流。这可以看作是流经数据的指令(例如,指令对寄存器进行操作,这些寄存器通过指令加载数据——除非指令流移动数据,否则数据是静态的)。控制流“if”语句跳转到指令流中的正确分支,但数据不会移动。
在数据流语言中,您有一个数据流,它从指令传递到要处理的指令。条件执行、跳转和过程调用将数据路由到不同的指令。这可以看作是流经其他静态指令的数据,例如电信号如何流经电路或水如何流经管道。数据流“if”语句会将数据路由到正确的分支。
数据流功能和语言的一些示例:
文本语言
视觉语言
- LabVIEW (截图[来源])
- Max/MSP (截图[来源])
- 纯数据(截图[来源])
- Reaktor (截图[来源])
- SCADE ( screenshot [ source ]),Lustre的图形化编程环境
- SynthMaker ( screenshot [ source ]) 和FlowStone
- vvvv (截图[来源])
- Expecco (截图[来源])
- 摇一摇(截图[来源])
- [BLOK](截图[来源])
- Quartz Composer(截图[来源])
- AudioMulch (截图[来源])
嵌入可视化数据流语言的产品:
数据流编程语言是专注于程序状态并根据状态的任何变化导致操作发生的语言。数据流编程语言本质上是并行的,因为操作依赖于输入,当满足时会导致操作执行。这意味着与一个操作之后是下一个操作的正常程序不同,在数据流中,只要满足输入,操作就会执行,因此没有设置顺序。
数据流编程语言通常使用大型哈希表,其中键是程序的数据,表的值是指向程序操作的指针。这使得多核程序更容易在数据流编程语言中创建,因为每个核只需要哈希表即可工作。
数据流编程语言的一个常见示例是电子表格程序,该程序具有受其他数据列影响的数据列。如果一列中的数据发生变化,其他列中的其他数据可能会随之发生变化。尽管电子表格程序是数据流编程语言的最常见示例,但它们中的大多数往往是图形语言。
数据流编程语言建议在所谓的“参与者”中隔离一些本地行为,这些参与者应该并行运行并通过点对点通道交换数据。与冯诺依曼计算机模型不同,没有中央存储器(代码和数据)的概念。
这些参与者在其输入上使用数据令牌并在其输出上生成新数据。
这个定义并没有强加在实践中运行它的方法。但是,数据的生产/消费需要仔细分析:例如,如果参与者 B 的消费速度与生产数据的参与者 A 的速度不同,那么它们之间就需要潜在的无界内存 (FIFO) . 可能会出现许多其他问题,例如死锁。
在许多情况下,这种分析会失败,因为内部行为的交织是难以处理的(超出了当今正式方法的范围)。
尽管如此,数据流编程语言在许多领域仍然具有吸引力:
Excel(和其他电子表格)本质上是数据流语言。数据流语言很像函数式编程语言,不同之处在于整个程序图的叶子上的值根本不是值,而是变量(或值流),因此当它们发生变化时,变化会涟漪并向上流动.
许多 ETL 工具也在这个领域。MS SSIS 中的数据流任务就是一个很好的例子。本例中的图形工具。
在某些领域,数据流编程更有意义。实时媒体就是一个例子,两个广泛使用的图形数据流编程环境 Pure Data 和 Max/MSP 都专注于实时媒体编程。我想它们的视觉性质也很好地映射到数据流编程。
你可以试试Cameleon:www.shinoe.org/cameleon,它似乎很容易使用。它是一种用于函数式编程的图形语言,具有数据(工作)流方法。
它是用 C++ 编写的,但它可以调用以任何编程语言编写的任何类型的本地或远程程序。