19

我正在阅读Polyphonic C#的介绍,第一页包含以下示例:

示例:一个简单的缓冲区

这是 Polyphonic C# 类的最简单有趣的示例:

public class Buffer {
    public String get() & public async put(String s) {
        return s;    
    } 
}

我完全不明白。方法和方法之间
的含义是什么?&get()put()

4

2 回答 2

6

这不是合法的 C#。那是复音 C#。这是微软的一个研究项目。遗憾的是它没有精确定义1但重点是:

然而,在 Polyphonic C# 中,主体可能与一组(同步和/或异步)方法相关联。我们把这样的定义称为和弦,一个特定的方法可能出现在几个和弦的标题中。和弦的主体只能在其标头中的所有方法都被调用后才能执行。

因此&,将这些方法“绑定”在一起成为一个 chord,直到 chord 中的所有方法都被调用后才会被调用。

在同一篇文章中更进一步:

这两个方法出现在单个和弦的标题中(由 & 号分隔),其主体由 return 语句组成。现在假设这b是一个实例Buffer,生产者和消费者线程希望通过b. 生产者调用put(),由于该方法是异步的,因此不会阻塞。消费者调用get(),由于该方法是同步的,因此将阻塞,直到或除非有匹配的 put() 调用。一旦b接收到 aput()和 a get(),主体就会运行,并且put()作为对 的调用的结果返回的参数get()多个呼叫get()可能在put()put()接收到以重新唤醒其中一个,并且可以在其参数被后续get()s消耗之前进行多次调用。

1:但是,这就是尖端的本质。我明白了。

于 2013-07-09T20:29:50.733 回答
1

它只是指定组成和弦的多种方法的语法。在调用标头中的所有方法之前,正文不会执行。

于 2013-07-09T20:27:36.170 回答