Python dodał konstrukcje async / await w wersji 3.5 w 2015 roku. Społeczność Javascript robiła kroki w tym kierunku przez bazzillion lat i wreszcie dodała bardzo podobną implementację do wersji roboczej ES8 wydanej w 2017 roku (z mojego zrozumienia). Maszynopis dodał także metody asynchroniczne w 2015 r. W wersji 1.7, które dla niewprawnego oka wyglądają dokładnie tak, jak metody asynchroniczne js.
C # Dodano metody asynchroniczne w 2012 roku, które wyglądają jak wszystkie inne implementacje async / czekają i były oparte na podobnie zachowujących się F #, ale różniących się wyglądających asynchronicznych przepływach pracy, które zostały wprowadzone w wersji F # 2.0 w 2010 roku. Jest to najwcześniejszy przykład, jaki znam język wbudowany w programowanie asynchroniczne - C # z parą async / Oczekiwanie i F # z przepływami asynchronicznymi.
Czy istnieją wcześniejsze przykłady słów kluczowych używanych w tym kontekście jako konstrukcje językowe (lub biblioteki)? Z moich ograniczonych informacji wynika, że każdy naśladował dobre części implementacji C #, ale czy C # skopiował to od kogoś innego?
async
await
w języku programowania, to dość niedawno. Ale asynchroniczne programowanie w rodzaju praktykowanym przezasync
await
istnieje już od dawna.Odpowiedzi:
Przyznaję się do wywiadu Andersa Hejlsberga dla Channel 9 na temat programowania asynchronicznego
async/await
w C #, który czerpie inspirację z asynchronicznych przepływów w F #.Jeśli nie wiesz, Anders Hejlsberg jest głównym architektem C #, a także pracował w innych językach, w tym TypeScript.
Według Dona Syme'a na jego blogu przepływy pracy asynchronicznych F # czerpią inspirację z implementacji asynchronicznej monady dla haskell. W szczególności papieru Peng Li i „biedny człowiek jest współbieżności Monad” papier Koen Claessen użytkownika .
Jeśli nie wiesz, Don Syme jest między innymi głównym architektem F #.
Artykuł Koena Claessena to starsza implementacja operacji z wynikiem i kontynuacjami, które mogę znaleźć, datowana na rok 1999. Implementuje współbieżność poprzez zdefiniowanie operacji atomowych, kontynuacji i harmonogramu rundy. Podejście monaidów byłoby motywacją do przejścia od przekazywania wiadomości do oczekujących wyników.
Wcześniejsze prace nad współbieżnością w Haskell wykorzystywały jakąś formę kanałów lub przekazywanie wiadomości do komunikacji.
Mówiąc o wcześniejszych pracach, muszę wspomnieć o Współbieżnym Haskellu, dla którego „Monada współbieżności biednego człowieka” jest alternatywą ...
Oraz artykuł „Programowanie równoległe niejawne i jawne w Haskell” autorstwa Marka P. Jonesa i Paula Hudaka. Ten dokument położył podwaliny pod artykuł Koena Claessena.
W artykule „Implicit and Explicit Parallel Programming in Haskell” Mark i Paul analizują między innymi właściwości „rozwidlenia” i problem skutków ubocznych w współbieżności. Odwołują się do artykułu „Semantyka dla prymitywów współbieżności ML”, który wybiera zestaw współbieżnych prymitywów opartych na współbieżnym ML i stanowi dowód, że zachowują właściwości wykonywania sekwencyjnego.
źródło
Wierzę, że Microsoft nie weźmie już istniejące słowa, więc słowa
async
iawait
może być przypisana do czasów, którego dotyczą. Jednak pomysły Coroutines i spółdzielni wielozadaniowości są bardzo stare.źródło