Quais mecanismos de simultaneidade são fornecidos pelo Raku e como eles podem ser avaliados? [fechado]

Dec 28 2020

Atualmente, sou um estudante que está trabalhando em minha dissertação sobre Raku, para a qual decidi avaliar se Raku (Perl 6) é uma boa linguagem para lidar com alta concorrência.

Não consegui encontrar nenhum artigo sobre a concorrência de Raku, exceto no site oficial. Além disso, não tenho ideia de como avaliar a simultaneidade de Raku (por exemplo, qual programa devo usar, qual linguagem deve ser comparada com Raku, etc.).

Quais mecanismos de simultaneidade são fornecidos pelo Raku? Onde estão documentados? Como sua funcionalidade e desempenho podem ser avaliados?

Respostas

14 JonathanWorthington Dec 29 2020 at 05:39

Raku fornece vários mecanismos de simultaneidade diferentes (e, além disso, fornece várias abordagens de programação paralela também, mas assumirei que a questão é realmente apenas sobre simultaneidade). A maior parte do que está em Raku pode ser encontrada em outras línguas; por exemplo:

  • O mecanismo gather/ takepara valores de produção preguiçosa. Isso é visto em várias linguagens como funções geradoras; no Raku, no entanto, não há um único limite de frame de pilha, então eles são poderosos na co-rotina. (Isso não ocorre em nenhum contexto que envolva programação assíncrona, mas ainda atende à definição de simultaneidade).
  • O Promisemecanismo para transmitir um único resultado de uma operação assíncrona é muito parecido com Promises em JavaScript ou Taskem .Net (a semântica é um pouco mais próxima do último).
  • A Supplyé um fluxo de valores assíncronos. Ele tem um pouco em comum com as extensões reativas (Rx) , no entanto, escolheu uma nomenclatura e API que se ajusta ao design geral da linguagem Raku (por exemplo, nomes de métodos correspondem a seus duais síncronos em sequências).
  • A Channelé uma fila simultânea, que possui um mecanismo para transmitir conclusão e erro, o que significa que você pode facilmente fazer a transição entre os paradigmas Supplye Channel. A principal diferença é que a Channeltem armazenamento - você pode colocar valores nele e imediatamente seguir em frente para fazer outra coisa - enquanto se você emitir um valor em um, Supplyvocê paga os custos de processamento (dando um mecanismo de contrapressão). Várias arquiteturas podem ser construídas usando Channels, como uma arquitetura baseada em eventos em estágios .

O conceito mais distinto em Raku, que não existe diretamente em outras línguas, é o construto react/ supply/ whenever. Escrever processadores de vários fluxos assíncronos costuma ser um desafio (gerenciamento de assinaturas, controle de simultaneidade); a construção fornece uma abordagem de programação estruturada para ele. Além disso, é principalmente uma questão de integração da linguagem ser um pouco mais forte no Raku, em vez de tratar essas coisas apenas como bibliotecas.

Como outros notaram, não há muito na forma de documentos formais ainda. No entanto, esses slides podem ser de interesse (isenção de responsabilidade: eles são meus; eu contribuí para o design de simultaneidade Raku e inventei react/ supply/ whenever).

  • 8 maneiras de fazer simultaneidade e paralelismo em Perl 6
  • Compreender reagir, fornecer e quando
  • Dentro da simultaneidade do Perl 6 - ver como ela é implementada
9 jjmerelo Dec 28 2020 at 17:53

Artigos sobre a concorrência de Raku : Se você quiser uma descrição de como a concorrência funciona, não há artigos acadêmicos que eu conheça. Você pode pesquisar em algumas publicações do Calendário do Advento, por exemplo, esta sobre concorrência em servidores HTTP . A maioria dos livros sobre Raku, como minhas próprias Receitas Raku (publicadas pela Apress), contém um capítulo sobre Simultaneidade, então isso é algo que você também pode verificar. Finalmente, este artigo que sou coautor usa a simultaneidade de Raku para computação evolutiva, com bons resultados.

Como avaliar a simultaneidade de Raku: * Raku usa processos sequenciais de comunicação e usa canais como objetos de primeira classe. Nesse sentido, é semelhante ao Go . Por outro lado, é capaz de encadear automaticamente os fluxos de dados via hiper / corrida da mesma forma que Julia faz via macros. Portanto, esses poderiam ser dois alvos para comparação.

Talvez a lista de discussão perl6-users seja um lugar melhor para fazer perguntas como esta.

5 p6steve Dec 29 2020 at 04:10

O CSP embutido no raku é um modelo de concorrência bem estabelecido, concebido por Tony (Anthony) Hoare. Você também pode procurar um trabalho de Bill (William) Roscoe que deu continuidade à linha de pesquisa de Tony. Observe que esta será uma pesquisa geral de CSP. Duvido que haja algo referenciável feito especificamente em Raku.