数据stream编程语言

什么是数据stream编程语言? 为什么使用它? 有没有什么好处呢?

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

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

数据streamfunction和语言的一些示例:

  • 电子表格本质上是数据stream
  • Unixpipe道
  • 期货和承诺是在许多现代语言中发现的数据stream或类似数据stream的结构
  • actor模型中的消息传递是数据stream
  • 某些语言具有数据streamfunction:
    • Oz有数据streamvariables
    • Groovy有GPars
    • Clojure有clojure.contrib.dataflow , Reagi和Javelin

文本语言

  • VHDL , Verilog和其他硬件描述语言本质上是数据stream
  • Cunieform
  • 光泽 ,用于国防,航空航天和电厂行业
  • 托勒密二世
  • 爱斯特尔
  • 奈奎斯特

视觉语言

  • LabVIEW ( 截图 [ source ])
  • Max / MSP ( 截图 [ 来源 ])
  • 纯数据 ( 截图 [ 来源 ])
  • Reaktor ( 截图 [ 来源 ])
  • SCADE ( 截图 [ 来源 ]),Lustre的graphics编程环境
  • SynthMaker ( 截图 [ 源 ])和FlowStone
  • vvvv ( 截图 [ 来源 ])
  • Expecco ( 截图 [ 来源 ])
  • 摇 ( 截图 [ 来源 ])
  • [BLOK] ( 截图 [ 来源 ])
  • Quartz Composer ( 截图 [ source ])
  • AudioMulch ( 截图 [ 来源 ])

embedded可视化数据stream语言的产品:

  • 搅拌器 ( 截图 )
  • Voreen ( 截图 )
  • 虚幻引擎的Kismet ( 截图 )
  • ANKHOR FlowSheet ( 截图 )
  • Dynamo for Autodesk Revit( 截图 )
  • LiveBlox ( 截图 )

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

通常,数据stream编程语言使用大的散列表,其中键是程序的数据,表的值是指向程序操作的指针。 这使得多核程序更易于在数据stream编程语言中创build,因为每个核心只需要散列表就可以工作。

数据stream编程语言的常见示例是电子表格程序,其具有受其他数据列影响的数据列。 如果一列中的数据发生变化,其他列中的其他数据可能会随之改变。 虽然电子表格程序是数据stream编程语言最常见的例子,但是它们大多数都是graphics语言。

一种数据stream编程是反应式编程 。 当这种编程风格用于function语言时,它被称为function性反应式编程 。 Flapjax是一个function反应式编程语言的例子。

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

另一个例子是牛津的Martlet 。

Excel(和其他电子表格)本质上是数据stream语言。 数据stream语言与函数式编程语言非常相似,只是整个程序图的叶子上的值根本不是数值,而是variables(或数值stream),所以当它们发生变化时,变化就会波动并向上stream动。

数据stream编程语言提出将所谓的“ 参与者 ”中的一些本地行为隔离开来,这些行为本来是并行运行的,并通过点对点通道交换数据。 与计算机的冯·诺依曼模型不同,没有中央记忆(代码和数据)的概念。

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

这个定义并没有强制在实践中运行这个方法。 然而,数据的产生/消耗需要仔细分析:例如,如果一个参与者B不以与产生数据的参与者A相同的速度消耗,则他们之间需要潜在的无限存储器(fifo) 。 许多其他问题会出现,如死锁 。

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

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

  • 例如为video编码定义参考模型:纯粹的C程序不会做这项工作,因为它假定所有事情都是作为一系列操作运行的,在计算机(stream水线,VLIW,mutlicores,VLSI)中并不是这样。 也许你可以看看这个: 最近的博士论文 。 CAL数据stream语言被提议作为下一代video编码器/解码器参考的统一语言。
  • 在需要安全的情况下,任务至关重要:如果在数据的生产/消费方面增加一些有力的假设,那么您将获得一种在代码生成,certificate等方面具有很大潜力的语言(参见同步语言 )

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

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

实际上,这是一个古老的概念 – 在70年代,甚至还有一个为高效的数据stream编程和执行而build立的语言+机器(manchester data flow machine)。

关于它的伟大之处在于它像Haskell这样的懒惰函数语言的双重性。 因此,如果您的处理步骤是纯function的,并且由于您有足够的处理单元来评估它们并将结果传递给您,您可以免费获得最大的并行性 – 无需任何编程工作!

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

你可以尝试Cameleonhttp://www.shinoe.org/cameleon这似乎很容易使用。; 这是一种function性编程的graphics化语言,它具有数据(工作)stream程方法。

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

它有一个多尺度的方法,似乎是彻底完成的(这是一个petri网的扩展)。