Quem assinou / aguardou primeiro?


20

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?


3
Se você está apenas procurando o uso das palavras async awaitem uma linguagem de programação, isso é bastante recente. Porém, a programação assíncrona do tipo praticado async awaitjá existe há muito tempo.
Robert Harvey

Respostas:


27

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.


Esta é uma resposta muito boa. Fico feliz que você tenha mencionado Haskell & ML (ambos os quais o F # se inspira). Eu sei que você ouvirá o pessoal de Haskell falando sobre "estilo de continuação". o async / waitit é apenas o açúcar mágico / sintaxe do compilador sobre esse conceito.
precisa

1

Acredito que a Microsoft não levaria palavras já existentes, portanto, as palavras asynce awaitpodem 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.


2
Eu não acho correto comparar corotinas e programação assíncrona - elas oferecem um tipo muito diferente de abstração.
Wondra

3
"Acredito que a Microsoft não aceite palavras já existentes" - Você tem alguma base para essa crença? Os designers de idiomas de sucesso geralmente são mais pragmáticos do que isso.
Sebastian Redl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.