Rust 不使用线程实现管道

Rust 不使用线程实现管道,rust,pipe,pipeline,interpreter,Rust,Pipe,Pipeline,Interpreter,我正在研究一种小型语言,以获得乐趣,并尝试一些想法。我正在尝试实现的一个想法是像在shell中一样使用管道,但使用任意对象。举个例子可以让这一点更清楚 功能范围和显示管道可定义如下: 范围(n)=>{ x:=0; 当x{ 尽管如此{ x:=拉力; 如果x=完工管道,则{ 返回0 }否则{ 打印(x) }; } } push将一个值推送到管道的下一部分,并暂停该函数,直到需要另一个值为止,pull从管道中提取一个值并返回它,或者如果管道的上一部分已完成执行,FinishedPipe 然后,您可以

我正在研究一种小型语言,以获得乐趣,并尝试一些想法。我正在尝试实现的一个想法是像在shell中一样使用管道,但使用任意对象。举个例子可以让这一点更清楚

功能
范围
显示管道
可定义如下:

范围(n)=>{
x:=0;
当x{
尽管如此{
x:=拉力;
如果x=完工管道,则{
返回0
}否则{
打印(x)
};
}
}
push
将一个值推送到管道的下一部分,并暂停该函数,直到需要另一个值为止,
pull
从管道中提取一个值并返回它,或者如果管道的上一部分已完成执行,
FinishedPipe

然后,您可以将这两个函数与
range(10)| show_pipe()
连接在一起,后者将在控制台上显示数字0到9


我通过为管道的每个部分使用一个线程,并使用线程安全队列从管道的一部分向另一部分传递值来实现这一点。我真的很想找到一种不用线程实现管道的方法。我使用的是Rust,所以我不能使用协同程序。

也许你应该看看tokio?该模式让我想起迭代器模式,特别是C如何支持
收益返回
收益中断
。他们的方法包括将函数转换为状态机,但这是避免使用多线程的一种方法。本例中的Range是一个show_管道的构造函数,它有一个隐式参数,也是一个流。@Shepmaster可以。