4

我了解数据流编程的基础知识,并且在Clojure APIsJonas Boner 的演讲、 Groovy 中的GPars等中遇到过它。我知道它在 Io 等语言中很普遍(尽管我没有研究过 Io)。

我缺少的是在构建并发程序时关注数据流作为范例的令人信服的理由。为什么我要使用数据流模型而不是可变状态+线程+锁模型(在 Java、C++ 等中很常见)或演员模型(在 Erlang 或 Scala 中很常见)或其他什么?

特别是,虽然我知道上述语言(以及 Scala 和 Ruby)的库支持,但我不知道有哪个程序或库是该模型的典型子用户。谁在使用它?为什么他们发现它比我提到的其他模型更好?

4

4 回答 4

4

我也有一个错误的例子。它没有实现一个干净的actor模型,也没有并发问题,但是它使用了DF架构,并且非常流行:任何电子表格软件(例如MS Excel)。

当您修改一个单元格时,它会向引用它的单元格发送“重新计算”信号。尽管如此,当你在处理一个越来越大的工作表时,你可以感受到数据流编程的真正味道——工作的重点会改变:

  • 创建公式失去了它最初的重要性(你会发现自己只是克隆了相同的 3-4 个公式),
  • 布局变得更加重要:重新组织引用,将长公式拆分为较短的公式,隐藏参数,最后从数据中形成图表。

如果我们意识到,公式是组件,引用是消息,我们就会得到数据流编程的通常方式:首先,我们创建一些组件,然后我们使用它们构建数据流图。如果组件太大,我们将它们分成更小的组件。最后,我们选择了一个可视化组件来展示视觉效果。

于 2010-06-18T12:07:16.083 回答
2

我有一个很好的“典型代表”(我喜欢这个词)给你。我想,你以前从未见过它,但你可能听说过。

我认为,几乎所有现代数字合成器和采样器内部都有某种数据流架构。让我告诉你它们是如何工作的。

我不确定Roland JV-1080是否是第一款,但它是最著名的具有 4 层声音发生器方案的合成器。当您按下键盘上的某个键时,Patch 正在启动。它由 1..4 个声音发生器组成。声音发生器是一系列组件:振荡器、滤波器、包络、放大器。JV-1080 可同时播放 64 个发声器。有源声音发生器的输出进入效果配置。声音发生器路径是“硬连线”的,您可以选择效果总线的入口点和数量。

Roland JV-1080 的效果总线有 4 个入口点:干式、自定义效果、合唱、混响,还有主输出。效果总线是固定的,但所有效果的输出都连接到最右边的所有其他效果,因此您可以通过将数量设置为零来“删除”它们之间的连接。

Alesis QS系列(QuadraSynth、QS6-7-8-R 和 x.1 版本)具有接近一些声音架构,效果系统类似......除了,您可以从 3 FX 配置中选择一个。一种 FX 配置用于风琴(QS 具有令人难以置信的 Leslie 仿真):Leslie、合唱团、混响;另一个 FX 配置有两个混响。您可以更自由地利用齿轮的马力。

这些合成器很棒,但是当您遇到Clavia Nord Modular时,您会忘记它们。它没有 4 层架构,也没有 FX 配置。它带有一个win32程序,一个数据流编辑器。有各种组件:振荡器、滤波器、包络发生器等,您可以绘制您的配置。您应该画一个传统的 4 层发声器,但如果您愿意,您甚至可以画一个 99 层的发声器。它只是摇滚。(不得不说,DF 不是一切:Roland JV 有 44.1 kHz 采样频率,QS 有 48k,Modular 有 96k。)

Clavia 有另一个合成器系列:Nord Lead。里面有Modular的引擎(参数和声音都是一样的),但是你不能为那个模型使用数据流编程器。他们有一个固定的路径,有很多参数,但你不能改变路线。此外,还有用于 Modular 的 Nord Lead 补丁集:所有路径在编辑器中看起来都相同,只有参数不同。

这是一个模块化补丁示例http://www.clavia.se/pictures/nordmodular/patchwindowlarge.jpg

如果您对合成器示例不满意,比如说,因为您是 C 程序员,那么这里有另一个更熟悉的示例:

使-j

令我惊讶的是,make 是一个数据流系统,因此它可以同时运行“组件”,这意味着在多核机器上编译速度更快。试试看!

于 2010-06-06T21:39:45.390 回答
1

如果您考虑一下,关系数据库就是典型的代表。考虑任何评估计划,其中每个操作员处理来自其他操作员/表的行流并生成馈送到其他操作员的流。

从网络上窃取的随机图像:( 来源:mathcs.slu.edu 上的 goldwasser替代文字

于 2010-06-03T15:50:05.560 回答
0

看看这个:http ://www.synthedit.com/

它是 VSTi 的音频相关框​​架和组件集。我不知道它到底是怎么回事,但看起来作者发布了带有自己标准组件的软件,然后其他人可以通过编译 DLL 来附加他们的组件。

另外,我刚刚在附近发现了一个人,我们在同一个邮件列表中,他创建了一个不错的 TB303 模拟器(著名的模拟复古合成器),并且他使用 SynthEdit 作为框架创建了它。因此,如图所示,它可以用作框架,没有技术(或商业模型)困难。

所以,值得一看,我在浏览文档时发现了很好的实现实践。尽管如此,该站点不包含单词dataflow,并且文档应该更好地编辑,该项目的精神还可以。还有几个“第三方”组件开发人员。至少它有很好的 GUI 前端。

于 2010-09-03T22:37:43.347 回答