Хто асинхронізував / чекав першим?


21

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

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

Чи є більш ранні приклади ключових слів, які використовуються в цьому контексті як мовні конструкції (або бібліотека)? З моєї обмеженої інформації виглядає так, що всі наслідували хороші частини реалізації C #, але чи C # копіював це від когось іншого?


3
Якщо ви просто шукаєте використання слів async awaitу мові програмування, це зовсім недавно. Але асинхронне програмування такого роду практикується async awaitвже давно.
Роберт Харві

Відповіді:


27

Якщо кодувати інтерв'ю Андерса Хейльсберга для 9 каналу про асинхронне програмування async/await в C #, то це надихає на потоки асинхронізації у F #.

Якщо ви цього не знаєте, Андер Хейльсберг є головним архітектором C #, а також працював на інших мовах, включаючи TypeScript.

За словами Дон Сима, у своєму блозі робочі процеси F # async беруть натхнення від впровадження асинхронної монади для haskell. Зокрема паперу Пен Лі і паперу Koen Классен «А бідняка Паралелізм Монада» .

Якщо ви цього не знаєте, серед інших речей, Дон Сайм - головний архітектор F #.

Документ Коена Клаессена - це старіша реалізація операцій з результатом і продовженнями, які я можу знайти, починаючи з 1999 року. Він реалізує паралельність, визначаючи атомні операції, продовження та плановий кругообіг. Монаїдний підхід буде мотивацією для переходу від передачі повідомлення до очікуваних результатів.

Попередня робота щодо одночасності роботи в Haskell використовує певну форму каналів або передачі повідомлень для спілкування.


Говорячи про попередню роботу, я повинен згадати одночасного Хаскелла, якому "Монада злиденності бідного чоловіка" є альтернативою ...

І стаття "Неявне та явне паралельне програмування в Хаскеллі" Марка П. Джонса та Пола Гудака. Цей документ заклав основу для роботи Коена Классена.

У роботі "Неявне та явне паралельне програмування в Haskell" Марк і Пол аналізують, серед іншого, властивості "вилки" та проблему побічних ефектів у паралельності. Вони посилаються на статтю "Семантика для паралельних примітивів одночасності ML", яка вибирає набір одночасних примітивів на основі одночасного ML та надає доказ того, що вони зберігають властивості послідовного виконання.


Це дійсно гарна відповідь. Я радий, що ви згадали про Haskell & ML (обидва з яких F # черпає натхнення). Я знаю, що ви почуєте людей Хаскелла, які говорять про "стиль продовження". async / await - це лише компілятор магії / синтаксичного цукру, що знаходиться на вершині цієї концепції.
RubberDuck

1

Я вважаю , що Microsoft не братиме вже існуючі слова, так що слова asyncі awaitможе бути віднесена до тих часів , які ви посилаєтесь. Однак ідеї Coroutines і Cooperative multitasking дуже давні.


2
Я не думаю, що правильно порівнювати взаємопрограми та асинхронне програмування - вони пропонують дуже різний тип абстракції.
wondra

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