我正在阅读Polyphonic C#的介绍,第一页包含以下示例:
示例:一个简单的缓冲区
这是 Polyphonic C# 类的最简单有趣的示例:
public class Buffer { public String get() & public async put(String s) { return s; } }
我完全不明白。方法和方法之间
的含义是什么?&
get()
put()
我正在阅读Polyphonic C#的介绍,第一页包含以下示例:
示例:一个简单的缓冲区
这是 Polyphonic C# 类的最简单有趣的示例:
public class Buffer { public String get() & public async put(String s) { return s; } }
我完全不明白。方法和方法之间
的含义是什么?&
get()
put()
这不是合法的 C#。那是复音 C#。这是微软的一个研究项目。遗憾的是它没有精确定义1但重点是:
然而,在 Polyphonic C# 中,主体可能与一组(同步和/或异步)方法相关联。我们把这样的定义称为和弦,一个特定的方法可能出现在几个和弦的标题中。和弦的主体只能在其标头中的所有方法都被调用后才能执行。
因此&
,将这些方法“绑定”在一起成为一个 chord,直到 chord 中的所有方法都被调用后才会被调用。
在同一篇文章中更进一步:
这两个方法出现在单个和弦的标题中(由 & 号分隔),其主体由 return 语句组成。现在假设这
b
是一个实例Buffer
,生产者和消费者线程希望通过b
. 生产者调用put()
,由于该方法是异步的,因此不会阻塞。消费者调用get()
,由于该方法是同步的,因此将阻塞,直到或除非有匹配的 put() 调用。一旦b
接收到 aput()
和 aget()
,主体就会运行,并且put()
作为对 的调用的结果返回的参数get()
。多个呼叫get()
可能在put()
put()
接收到以重新唤醒其中一个,并且可以在其参数被后续get()
s消耗之前进行多次调用。
1:但是,这就是尖端的本质。我明白了。
它只是指定组成和弦的多种方法的语法。在调用标头中的所有方法之前,正文不会执行。