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 # ее кому-то еще?
async
await
в языке программирования, это довольно недавно. Но асинхронное программирование, которое практикуется,async
await
существует уже давно.Ответы:
Согласно интервью с Андерсом Хейлсбергом для 9-го канала об асинхронном программировании
async/await
на C #, черпает вдохновение из асинхронных потоков в F #.Если вы не знаете, Андерс Хейлсберг является ведущим архитектором C #, а также работал на других языках, включая TypeScript.
По словам Дона Сайма, в своем блоге асинхронные рабочие процессы F # черпают вдохновение в реализации асинхронной монады для haskell. В частности бумаги Пэн Ли и бумаги Koen Классен «А бедняка Параллелизм Монада» .
Если вы не знаете, Дон Сайм, среди прочего, является ведущим архитектором F #.
Документ Коэна Клессена является более старой реализацией операций с результатом и продолжениями, которые я могу найти, начиная с 1999 года. Он реализует параллелизм путем определения атомарных операций, продолжений и циклического планировщика. Монаидный подход был бы мотивом для перехода от передачи сообщений к ожиданию результатов.
В предыдущей работе по параллелизму в Haskell для связи используйте какую-либо форму каналов или передачу сообщений.
Говоря о предыдущей работе, я должен упомянуть Concurrent Haskell, альтернативой которой является «Монада параллелизма бедняков» ...
И статья «Неявное и явное параллельное программирование в Haskell» Марка П. Джонса и Пола Худака. Эта статья заложила основу для работы Коэна Клессена.
В статье «Неявное и явное параллельное программирование в Haskell» Марк и Пол, среди прочего, анализируют свойства «форка» и проблему побочных эффектов в параллелизме. Они ссылаются на статью «Семантика для примитивов параллелизма ML», которая выбирает набор параллельных примитивов на основе Concurrent ML и предоставляет доказательство того, что они сохраняют свойства последовательного выполнения.
источник
Я считаю , что Microsoft не будет принимать уже существующие слова, так что слова
async
иawait
может быть отнесена к тем временам , которые вы ссылаетесь. Однако идеи сопрограмм и совместной многозадачности очень стары.источник