누가 먼저 비동기 / 기다렸습니까?


21

파이썬은 2015 년 3.5에서 async / await 구문을 추가했습니다. Javascript 커뮤니티는 1 년 동안 그것을 향한 발걸음을 내딛었으며 마침내 2017 년에 릴리스 된 ES8 초안과 매우 유사한 구현을 추가했습니다 (내 이해에서). Typescript는 2015 년 버전 1.7의 비동기 메소드를 추가하여 훈련되지 않은 눈에 js 비동기 메소드와 똑같이 보입니다.

C # 2012 년에 비동기 / 대기의 다른 모든 구현과 비슷하게 보이는 비동기 메서드를 추가했으며 2010 년에 F # 2.0에 도입 된 F #과 비슷하지만 다른 모양의 비동기 워크 플로를 기반으로합니다. 이것은 비동기 프로그래밍에 내장 된 언어에 대한 가장 오래된 예입니다. -비동기 / 대기 쌍이있는 C # 및 비동기 흐름이있는 F #

이 문맥에서 언어 구성 (또는 라이브러리)으로 사용되는 키워드의 이전 예가 있습니까? 내 제한된 정보에서 모든 사람이 C # 구현의 좋은 부분을 모방 한 것처럼 보이지만 C #은 다른 사람으로부터 복사 했습니까?


3
async await프로그래밍 언어에서 단어의 사용법을 찾고 있다면 꽤 최근입니다. 그러나 이런 종류의 비동기 프로그래밍은 async await오랫동안 사용되어 왔습니다.
Robert Harvey

답변:


27

C #의 비동기 프로그래밍 async/await대한 채널 9Anders Hejlsberg 인터뷰 에서 F #의 비동기 worflow에 대한 영감을 얻습니다.

모르는 경우 Anders Hejlsberg는 C #의 수석 아키텍트이며 TypeScript를 포함한 다른 언어로도 작업했습니다.

Don Syme의 블로그 에서 F # 비동기 워크 플로우는 haskell을위한 비동기 모나드 구현에서 영감을 얻었습니다. 특히 Peng Li의 논문Koen Claessen의 "A Poor Man 's Concurrency Monad"논문 .

모르는 경우 Don Syme는 무엇보다도 F #의 수석 아키텍트입니다.

Koen Claessen의 논문은 1999 년에 발견 된 결과와 연속성을 사용하여 이전 작업을 구현 한 것입니다. 원자 작업, 연속 및 라운드 로빈 스케줄러를 정의하여 동시성을 구현합니다. 모나 이드 접근 방식은 메시지 전달에서 대기중인 결과로 전환하는 동기가 될 것입니다.

Haskell의 동시성에 대한 이전 작업은 통신을 위해 특정 형식의 채널 또는 메시지 전달을 사용합니다.


이전 작업에 대해 말하면, "가난한 사람의 동시성 모나드"가 대안 인 동시성 하스켈에 대해 언급해야합니다.

그리고 Mark P. Jones와 Paul Hudak 의 논문 "하스켈에서의 암시 적 및 명시 적 병렬 프로그래밍" . 이 논문은 Koen Claessen의 논문의 토대를 마련했습니다.

논문 "하스켈에서의 암시 적 및 명시 적 병렬 프로그래밍"에서 Mark와 Paul은 "포크"의 속성과 동시성의 부작용 문제를 분석합니다. 이들은 동시 ML을 기반으로 설정된 동시 프리미티브를 선택하고 순차적 실행 속성을 보존한다는 증거를 제공하는 "ML 동시성 프리미티브에 대한 의미론" 이라는 논문을 참조합니다 .


이것은 정말 좋은 대답입니다. Haskell & ML (둘 다 F #에서 영감을 얻음)을 언급하게되어 기쁩니다. 내가 알고 당신이 "계속 스타일"에 대해 이야기 하스켈 사람들을 듣게 될 것입니다. async / await는 그 개념 위에 컴파일러 마법 / 구문 설탕입니다.
RubberDuck

1

나는 마이크로 소프트 단어 때문에, 기존의 말을하지 않을 것이라고 생각 async하고 await당신이 참조하는 시간에 기인 할 수있다. 그러나 코 루틴협동 멀티 태스킹 의 아이디어 는 매우 오래되었습니다.


2
나는 코 루틴과 비동기 프로그래밍을 비교하는 것이 옳다고 생각하지 않습니다. 그들은 매우 다른 유형의 추상화를 제공합니다.
wondra

3
"저는 Microsoft가 기존 단어를 사용하지 않을 것이라고 생각합니다."-그 믿음에 대한 근거가 있습니까? 성공적인 언어의 디자이너는 일반적으로 그보다 실용적입니다.
Sebastian Redl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.