1
6
在Erlang中可以很容易地执行管道类型并行。下面是2008年1月我的blogpost的无耻复制/粘贴。 也, Glasgow Parallel Haskell 允许并行函数组合,相当于相同的东西,给你隐含的并行化。
|
2
10
哈哈!感谢我的google fu,我发现 an SO answer 你可能会感兴趣。基本上,答案是与“除非你真的必须这样做,否则不要重载操作符”相反的,通过重载按位或操作符来提供类似于shell的管道,从而产生这样的python代码:
从概念上讲,它的作用是将数字列表从2排到99排(
这将生成范围,然后将所有这些值从数字转换为字符串,然后过滤掉所有不以5开头的值。
文章显示了一个基本的父类,它允许您重载两个方法,
它相当聪明,虽然这可能意味着它不是很蟒蛇,但它展示了你所追求的,以及一种很容易应用到其他语言的技巧。 |
3
5
你可以在C语言和Java中找到一些类似管道的东西,例如,你在那里连接一个连接流并把它放在另一个连接流的构造函数中。 你在Java中有:
您可能需要查找链接输入流或输出流。 |
4
3
结合
|
5
3
通常你不需要它,没有它程序运行得更快。 基本上,管道是消费者/生产商模式。写这些消费者和生产者并不难,因为他们不共享太多的数据。
|
6
2
感谢所有伟大的回答和评论,以下是我学到的总结: 事实证明,有一个完整的范例与我感兴趣的所谓 Flow-based programming .专门为基于流的编程设计的语言的一个很好的例子是 Hartmann pipelines . Hartamnn管道概括了Unix和其他操作系统中使用的流和管道的概念,以允许多个输入和输出流(而不仅仅是一个输入流和两个输出流)。 Erlang 包含强大的抽象,使以类似管道的方式表示并发进程变得容易。Java提供 PipedInputStream 和 PipedOutputStream 它可以与线程一起使用,以更详细的方式实现相同的抽象。 |
7
2
你在看f gt;接线员吗?我想你真的想要接线员。 |
8
1
我认为最根本的原因是因为C和Java往往被用来构建更多的单片系统。在文化上,甚至想做类似管道的事情都是不常见的——您只是让应用程序实现必要的功能。构建大量简单工具然后以任意方式将它们粘在一起的概念在这些上下文中并不常见。 如果你看一些脚本语言,比如python和ruby,有一些非常好的工具可以从这些脚本中执行类似管道的操作。例如,查看python子进程模块,该模块允许您执行以下操作:
|
9
1
目标C具有 NSPipe 班级。我经常用它。 |
10
1
我在python中构建了很多有趣的管道函数。我有一个我写的图书馆,我放了内容和一个样本运行 here . 最适合我的是XML处理,如下面所述 Wikipedia article . |
11
1
基于协程的流库已经在haskell中存在了一段时间。两个流行的例子是 conduit 和 pipes . 这两个图书馆都写得很好,有很好的文档记录,并且相对成熟。这个 Yesod Web框架是基于管道的, pretty damn fast .Yesod在性能上与node竞争,甚至在一些地方击败它。 有趣的是,默认情况下,所有这些库都是单线程的。这是因为管道的单一激励用例是服务器,它是I/O绑定的。 |
12
0
通过链接/筛选/转换迭代器,可以在Java中执行类似管道的操作。 你可以使用谷歌的 Guava Iterators . 我会说,即使是非常有用的番石榴库和静态导入,其结果仍然是大量的Java代码。 在scala中,很容易创建自己的管道操作员。 |
13
0
如果你仍然对答案感兴趣… 您可以查看因子,或者查看旧的joy和forth以了解串联范式。 输入参数和输出参数是隐式的,转储到堆栈。然后下一个单词(函数)获取数据并对其进行处理。 语法是后缀。 “123”字 其中print接受一个参数,堆栈中的任何参数。 |
Sudhanva c · 如何提高编码技能?[已关闭] 6 年前 |
hoffm · 为什么Ruby找不到调用方类中定义的常量? 7 年前 |
Thamme Gowda · “lambda”关键字的较短替代项? 7 年前 |
AlphaModder · 有没有带有“不寻常”访问修饰符的编程语言? 9 年前 |
lucasasecas · 有可能静态地使用动态语言吗? 10 年前 |
Eugenio Laghi · 仅由括号、加号和感叹号组成的语言 10 年前 |
dallin · 数组中的逗号运算符是否有名称? 10 年前 |