]]> ]]>

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# включен в новый диалект и не развивается самостоятельно.


Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам