【发布时间】:2010-12-07 21:29:03
【问题描述】:
在 Unix shell 编程中,pipe operator 是一个非常强大的工具。使用一小组核心实用程序、一种系统语言(如 C)和一种脚本语言(如 Python),您可以构建极其紧凑且功能强大的 shell 脚本,这些脚本由操作系统自动并行化。
显然,这是一个非常强大的编程范式,但除了 shell 脚本之外,我还没有将管道视为任何语言的一流抽象。使用管道复制脚本功能所需的代码似乎总是相当复杂。
所以我的问题是为什么我在 C#、Java 等现代高级语言中没有看到类似于 Unix 管道的东西?是否有支持一流管道的语言(除了 shell 脚本)?表达并发算法不是一种方便又安全的方式吗?
以防万一有人提出来,我看了一下F# pipe-forward 运算符(forward pipe operator),它看起来更像是一个函数应用程序运算符。据我所知,它将函数应用于数据,而不是将两个流连接在一起,但我愿意更正。
后记:在对实现协程进行一些研究时,我意识到存在某些相似之处。在blog postMartin Wolf 中描述了一个与我的问题类似的问题,但使用的是协程而不是管道。
【问题讨论】:
-
我真的很想知道同样的事情,但从没想过要问。
-
FWIW 你可能对en.wikipedia.org/wiki/Hartmann_pipeline感兴趣
-
请记住,F# 正向管道运算符应用函数的“数据”本身可以是一个函数,也可以是一个函数序列。
-
这也让我大吃一惊,很少有语言能做到这一点。 Java 中的链式迭代器是一个 PITA。
-
F# 中有
|>,R 中有%>%
标签: language-agnostic programming-languages concurrency shell pipe