Кто сделал async / await первым?


21

Python добавил конструкции async / await в 3.5 в 2015 году. Сообщество Javascript сделало шаги в этом направлении на протяжении целого миллиарда лет и, наконец, добавило очень похожую реализацию к проекту в ES8, выпущенном в 2017 году (из моего понимания). Typescript также добавил асинхронные методы в 2015 году в версии 1.7, которые на первый взгляд выглядят в точности как асинхронные методы js.

C # Добавлены асинхронные методы в 2012 году, которые похожи на все другие реализации async / await и основаны на сходном поведении F #, но отличаются асинхронными рабочими процессами, которые были введены в F # 2.0 в 2010 году. Это самый ранний из известных мне примеров языка, встроенного в асинхронное программирование - C # с парой async / await и F # с асинхронными потоками.

Существуют ли ранее примеры использования ключевых слов в этом контексте в качестве языковых конструкций (или библиотеки)? Из моей ограниченной информации кажется, что все подражали хорошим частям реализации C #, но копировал ли C # ее кому-то еще?


3
Если вы просто ищете использование слов async awaitв языке программирования, это довольно недавно. Но асинхронное программирование, которое практикуется, async awaitсуществует уже давно.
Роберт Харви

Ответы:


27

Согласно интервью с Андерсом Хейлсбергом для 9-го канала об асинхронном программированииasync/await на C #, черпает вдохновение из асинхронных потоков в F #.

Если вы не знаете, Андерс Хейлсберг является ведущим архитектором C #, а также работал на других языках, включая TypeScript.

По словам Дона Сайма, в своем блоге асинхронные рабочие процессы F # черпают вдохновение в реализации асинхронной монады для haskell. В частности бумаги Пэн Ли и бумаги Koen Классен «А бедняка Параллелизм Монада» .

Если вы не знаете, Дон Сайм, среди прочего, является ведущим архитектором F #.

Документ Коэна Клессена является более старой реализацией операций с результатом и продолжениями, которые я могу найти, начиная с 1999 года. Он реализует параллелизм путем определения атомарных операций, продолжений и циклического планировщика. Монаидный подход был бы мотивом для перехода от передачи сообщений к ожиданию результатов.

В предыдущей работе по параллелизму в Haskell для связи используйте какую-либо форму каналов или передачу сообщений.


Говоря о предыдущей работе, я должен упомянуть Concurrent Haskell, альтернативой которой является «Монада параллелизма бедняков» ...

И статья «Неявное и явное параллельное программирование в Haskell» Марка П. Джонса и Пола Худака. Эта статья заложила основу для работы Коэна Клессена.

В статье «Неявное и явное параллельное программирование в Haskell» Марк и Пол, среди прочего, анализируют свойства «форка» и проблему побочных эффектов в параллелизме. Они ссылаются на статью «Семантика для примитивов параллелизма ML», которая выбирает набор параллельных примитивов на основе Concurrent ML и предоставляет доказательство того, что они сохраняют свойства последовательного выполнения.


Это действительно хороший ответ. Я рад, что вы упомянули Haskell & ML (оба черпали вдохновение в F #). Я знаю, вы услышите, как ребята из Haskell говорят о «стиле продолжения». async / await - это просто магия синтаксиса компилятора в дополнение к этой концепции.
RubberDuck

1

Я считаю , что Microsoft не будет принимать уже существующие слова, так что слова asyncи awaitможет быть отнесена к тем временам , которые вы ссылаетесь. Однако идеи сопрограмм и совместной многозадачности очень стары.


2
Я не думаю, что правильно сравнивать сопрограммы и асинхронное программирование - они предлагают совершенно другой тип абстракции.
Wondra

3
«Я считаю, что Microsoft не примет уже существующие слова» - есть ли у вас основания для этого убеждения? Дизайнеры успешных языков обычно более прагматичны, чем это.
Себастьян Редл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.