O Python adicionou as construções assíncronas / aguardadas na versão 3.5 em 2015. A comunidade Javascript deu passos nesse sentido por um zilhão de anos e finalmente adicionou uma implementação muito semelhante ao rascunho no ES8 lançado em 2017 (pelo meu entendimento). O TypeScript também adicionou métodos assíncronos em 2015 na versão 1.7 que, aos olhos não treinados, se parecem exatamente com os métodos js async.
C # Adicionados métodos assíncronos em 2012 que se parecem com todas as outras implementações de async / waitit e foram baseados nos fluxos de trabalho assíncronos com comportamento semelhante, mas com aparência diferente, que foram introduzidos no F # 2.0 em 2010. Este é o exemplo mais antigo que conheço de linguagem criada em programação assíncrona - C # com o par assíncrono / aguardado e F # com fluxos assíncronos.
Existem exemplos anteriores das palavras-chave usadas neste contexto como construções de linguagem (ou biblioteca)? Pelas minhas informações limitadas, parece que todos imitaram as partes boas da implementação do C #, mas o C # o copiou de outra pessoa?
async
await
em uma linguagem de programação, isso é bastante recente. Porém, a programação assíncrona do tipo praticadoasync
await
já existe há muito tempo.Respostas:
A codificação de uma entrevista de Anders Hejlsberg para o Canal 9 sobre Programação assíncrona
async/await
em C # inspira-se em fluxos assíncronos em F #.Caso você não saiba, Anders Hejlsberg é o principal arquiteto do C # e também trabalhou em outras linguagens, incluindo o TypeScript.
De acordo com Don Syme, em seu blog , os fluxos de trabalho assíncronos do F # se inspiram na implementação da mônada assíncrona para haskell. Em particular papel de Peng Li e papel "de um homem pobre Concorrência Monad" do Koen Claessen .
Caso você não saiba, Don Syme é o principal arquiteto do F #, entre outras coisas.
O artigo de Koen Claessen é a implementação mais antiga de operações com um resultado e continuações que posso encontrar, datadas de 1999. Implementa a simultaneidade definindo operações atômicas, continuações e um agendador de rodízio. A abordagem monaida seria a motivação para a mudança da passagem de mensagens para a espera de resultados.
Trabalhos anteriores de concorrência em Haskell usam algum tipo de canal ou passagem de mensagens para comunicação.
Por falar em trabalho anterior, devo mencionar o Concurrent Haskell, ao qual "Mônada de simultaneidade de um pobre homem" é uma alternativa ...
E o artigo "Programação paralela implícita e explícita em Haskell", de Mark P. Jones e Paul Hudak. Este artigo lançou as bases para o artigo de Koen Claessen.
No artigo "Programação paralela implícita e explícita em Haskell", Mark e Paul analisam as propriedades do "garfo" e o problema dos efeitos colaterais na concorrência, entre outras coisas. Eles fazem referência ao artigo "Uma semântica para primitivas de simultaneidade de ML", que seleciona um conjunto de primitivas simultâneas com base no ML simultâneo e fornece uma prova de que elas preservam propriedades de execução seqüencial.
fonte
Acredito que a Microsoft não levaria palavras já existentes, portanto, as palavras
async
eawait
podem ser atribuídas aos horários a que você se refere. No entanto, as idéias de Coroutines e multitarefa cooperativa são muito antigas.fonte