Подтвердить что ты не робот

Полифонические методы С#, разделенные амперсандом?

Я читаю это введение в Polyphonic С#, и первая страница содержит этот пример:

Пример: простой буфер

Вот простейший интересный пример полифонического класса С#:

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

Я не понимаю. Что означает & между методами get() и put()?

4b9b3361

Ответ 1

Это не законный С#. Этот полифонический С#. Это исследовательский проект от Microsoft. Стыдно это не точно определено 1 но дело в следующем:

В Polyphonic С#, однако, тело может быть связано с набором (синхронных и/или асинхронных) методов. Мы называем такое определение аккордом, и конкретный метод может появляться в заголовке нескольких аккордов. Тело аккорда может выполняться только после вызова всех методов в его заголовке.

Итак, & "связывает" эти методы вместе в аккорд, который не будет вызываться до тех пор, пока не будут вызваны все методы в аккорде.

Немного дальше в той же статье:

Эти два метода появляются (разделяются амперсандом) в заголовке одного аккорда, тело которого состоит из оператора return. Предположим теперь, что b является экземпляром Buffer, и потоки производителей и потребителей хотят общаться через b. Производители совершают вызовы put(), которые, так как метод асинхронен, не блокируются. Потребители совершают вызовы get(), которые, поскольку метод является синхронным, будут блокироваться до тех пор, пока не будет найден соответствующий вызов put(). Как только b получил как put(), так и get(), тело запускается, а аргумент put() возвращается в результате вызова get(). Несколько вызовов до get() может быть отложено до получения put() для повторного пробуждения одного из них, и несколько вызовов на put() могут быть сделаны до того, как их аргументы будут потребляться последующими get() s.

1: Но такова природа режущей кромки. Я понимаю.

Ответ 2

Это просто синтаксис для указания нескольких методов, составляющих аккорд. Тело не будет выполняться до тех пор, пока не будут вызваны все методы в заголовке.