Polyphonic C#
Диалект языка программирования C#Polyphonic C# — экспериментальный диалект C#, добавляющий в язык абстракции асинхронной многопоточности, созданные на основе исчисления процессов join calculus.
Polyphonic C# был разработан Ником Бентоном (Nick Benton), Лукой Карделли (Luca Cardelli) и Седриком Форнетом (Cédric Fournet), сотрудниками Microsoft Research, Кэмбридж.
Диалект полностью повторяет все возможности C#, добавляя два новых элемента:
асинхронные методы (ключевое слово
async
) — методы, вызов которых немедленно возвращает управление вызывающему коду, а тело метода ставится в очередь на выполнение другим потоком — новым, созданным специально для этого задания, или одним из некоего набора существующих потоков.хорды (chords, они же паттерны синхронизации или паттерны объединения) — объявления, состоящие из заголовка и тела. Заголовок является списком объявлений методов, разделенных амперсендом
&
. Тело хорды выполняется только тогда, когда вызваны все методы, перечисленные в заголовке (не обязательно в том же порядке, в котором они приведены). Необработанные вызовы методов хранятся в очереди, пока для них не подберется соответствующий вызов. Типичным примером паттерна синхронизации является следующий код:public class Buffer { public string Get() & public async Put(string s) { return s; } }
Класс
Buffer
позволяет асинхронно поместить строку в буфер и синхронно получить ее оттуда. Тело паттерна выполнится при вызовеGet
в том же потоке, откуда этот метод вызван.
Программы на Polyphonic C# интерпретируются путем их трансляции в код на обычном C#, повторяющий логику программы и дополняющий ее приватными методами и полями, необходимыми для реализации механизма многопоточности.
В настоящее время Polyphonic C# включен в новый диалект Cω и не развивается самостоятельно.
Комментарии
]]>blog comments powered by Disqus
]]>