【问题标题】:Dataflow Programming - Patterns and Frameworks数据流编程 - 模式和框架
【发布时间】:2010-09-09 11:25:01
【问题描述】:

我刚刚遇到了提议的Boost::Dataflow 库。 这似乎是一种有趣的方法,我想知道是否还有其他类似的 C++ 替代框架,以及是否有任何相关的设计模式。 我没有排除 Boost::Dataflow,我只是在寻找任何可用的替代方案,以便更好地了解域和我的选择(或在必要时自行选择)。

【问题讨论】:

  • 请注意,这是一个提议的库,还不是 Boost 的一部分。
  • 基于 C++ 模板的单子。他们从基于 FP 的语言中复制了这个概念,甚至使用了类似 Haskell 的符号。不过,他们似乎避免使用“monad”这个名字。有人知道这是不是故意的吗?
  • 我知道这已经过时了,但如果你仍然对此感兴趣,基于流的编程相对于数据流范式来说是一个非常有趣的方法,关于替代 C++ 框架,我开发了一个名为“ DSPatch”你可能想看看:flowbasedprogramming.com

标签: c++ design-patterns dataflow


【解决方案1】:

我发现了一些数据流 C++ 库:

  • cellspp - 允许使用电子表格评估模型。
  • DSPatchRoute11 - C++ 数据流框架。允许以数据流方式编写程序。看起来很有趣。

【讨论】:

    【解决方案2】:

    您可以在这里查看我的数据流实现:http://ambient.comp-phys.org

    它支持 MPI 和线程,并基于通过运行时对象版本控制系统工作的自定义数据流类型(即环境::向量)。

    【讨论】:

      【解决方案3】:

      维基百科

      维基百科上有几篇关于数据流编程理论的好文章:

      这些文章是不同作者写的,所以有一些重叠,也漏掉了一些重要的东西,但这是一个很好的起点。

      TinyOS

      这是一个基于数据流原理的开源操作系统。我对此有不好的感觉:他们甚至没有提到“数据流”这个词。好吧,就是这样,也许是worth studying it

      【讨论】:

      • 感谢编辑!现在有一本很有前途的书,几个月后会发货:dataflowbook.com 宣传视频也很好地介绍了该主题。
      【解决方案4】:

      Visual Studio 并发运行时包含 C++ 中的异步数据流框架。

      图像处理数据流示例:http://msdn.microsoft.com/en-us/library/ff398050.aspx

      【讨论】:

        【解决方案5】:

        您还可以查看两个主要的开源机器人框架,ROSOrocos。还有Rock,不过它是基于Orocos的,所以如果你只是在找一个C++组件框架,它是等价的。

        【讨论】:

          【解决方案6】:

          也许 Pure Data (pd) 有一个 C++ API...

          http://en.wikipedia.org/wiki/Pure_Data

          【讨论】:

            【解决方案7】:

            查看Intel Threading Building Blocks,特别是它的tbb::flow 命名空间。

            【讨论】:

              【解决方案8】:

              Dataflow programming 是潜伏了数十年但从未完全起飞的东西之一……无论如何,对于软件而言;在 VHDL/Verilog 世界中,您会发现自己更容易自然地采用数据流思维方式。但在软件世界中……不知何故,它似​​乎永远不会扩展到玩具系统之外,也许是因为人们坚持将它与可视化编程结合在一起(我看到了 boost dataflow also treads this path)。有些人希望通过数据流编程来解决软件危机,使其更像是具有可插拔组件和可互连引脚的硬件设计......但等等,硬件设计也真的很难!(有趣的是,在硬件世界的可视化编程系统做exist,没有人实际上用它们来构建任何大的东西)。

              据我所知,使用数据流原理的最有趣、最活跃的现代示例是PureData 视听编程环境。

              【讨论】:

              • 数据流编程已经为 National Instruments 的 Labview (ni.com/labview) 成功起飞。我几乎不会称 Labview 为“玩具系统”。 ;-P 我很惊讶没有人提到它。
              • 我忘记了 LabView;谢谢,是的,这是一个很好的例子。我看到它是由 TIOBE 注册的,虽然只是在未排名的 #51-100 中的某个位置。我很好奇用它构建的最复杂的系统是什么?
              • 我从经验中知道,在 Labview 中编写复杂的算法行为是很痛苦的。 IMO,它最适合用于将它们本身很好地用于数据流范式的问题。它非常适合非程序员(科学家、工程师)快速实现实验、原型和测试台的信号处理、可视化和控制。不幸的是,可视化编程范式使许多人难以使用现有的软件版本控制工具并行工作。
              【解决方案9】:

              仅作记录,您还可以考虑gstreamermm,它是gstreamer 的C++ 包装器。

              【讨论】:

                【解决方案10】:

                如果您的领域是声音生成/处理,请使用http://www.synthedit.com/

                看起来很有希望,我在 SDK 文档(复音)中找到了一个很好的解决方案。有趣,但他们没有提到 dataflow 这个词。

                【讨论】:

                  【解决方案11】:

                  如果你想要这个设计用于图像处理或可视化,你可以在itk 找到一个很好的资源。如果你想要这个(数据/工作)流的 gui,你可以使用devide。 我的2美分, 约翰

                  【讨论】:

                    猜你喜欢
                    • 2011-09-07
                    • 1970-01-01
                    • 2017-06-04
                    • 2018-05-24
                    • 2015-08-21
                    • 2013-09-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多