大多数数据处理可以作为部件的管道,一个数据输入另一个数据。 典型的加工管道是:
撰稿人
作为启动这一讨论的一个oil,请允许我考虑在每一部分都成为标的的情况下,以目标为导向的执行这一管道。 <代码>handler 物体既是指reader
,又指. .
s>,且有run
。 方法:
define handler.run:
while (reader.has_next) {
data = reader.next
output = ...some function of data...
writer.put(output)
}
Schematically the dependencies are:
reader <- handler -> writer
现在,我想在读者和手里之间讨论一个新的管道部分:
reader | tweaker | handler | writer
在此业务处实施过程中,<代码>tweaker <代码>reader Object and the tweaker/code> 方法可能看起来像(某些假冒的辅助法):
define tweaker.has_next:
return reader.has_next
define tweaker.next:
value = reader.next
result = ...some function of value...
return result
I m finding that this is not a very composable abstraction. Some issues are:
www.un.org/Depts/DGACM/index_spanish.htm 只能在<代码>handler左侧使用。 i.e. 我可以采用
tweaker<>/code>的上述实施方式形成这一管道:
读者: 牙齿
我想利用管道的相关财产,以便这一管道:
撰稿人
可以表示:
reader | p
<代码p为管道handler > 作家
。 在本业务处执行中,我必须部分地对<代码>handler进行即时处理。 物体
- Somewhat of a restatement of (1), the objects have to know if they "push" or "pull" data.
I m 寻找一个框架(不一定是业务处),用以建立处理这些问题的数据处理管道。
我将此附在<代码>Haskell和>>>功能式方案拟订代码>上,因为我觉得功能式方案拟订概念在这方面可能有用。
作为一个目标,能够建立这样一个管道:
handler1
/
reader | partition writer
/
handler2
从某种角度看,Unixhell管道在以下执行决定中解决了许多问题:
管道部件在不同的过程中同步运行。
管道反对在“推器”和“制片人”之间传递数据;即阻断撰写数据太快的作者和试图读得太快的读者。
您使用特别连接器<代码>和t;和
>
将被动部件(即文档)与管道连接起来。
我特别感兴趣的是,在代理人之间不使用校对或传递信息的做法。 或许这是这样做的最佳途径,但我想尽可能避免read。
感谢!