¿Qué mecanismos de concurrencia proporciona Raku y cómo se pueden evaluar? [cerrado]

Dec 28 2020

Soy un estudiante que actualmente trabaja en mi disertación sobre Raku, por lo que he decidido evaluar si Raku (Perl 6) es un buen lenguaje cuando se trata de una alta concurrencia.

No he podido encontrar ningún artículo sobre la concurrencia de Raku, excepto el sitio web oficial. Además, no tengo idea de cómo evaluar la concurrencia de Raku (por ejemplo, qué programa debo usar, qué idioma se debe comparar con Raku, etc.).

¿Qué mecanismos de concurrencia proporciona Raku? ¿Dónde están documentados? ¿Cómo se puede evaluar su funcionalidad y desempeño?

Respuestas

14 JonathanWorthington Dec 29 2020 at 05:39

Raku proporciona varios mecanismos de concurrencia diferentes (y, además, también proporciona varios enfoques de programación paralela, pero asumiré que la pregunta es realmente sobre concurrencia). La mayor parte de lo que hay en Raku se puede encontrar en otros idiomas; por ejemplo:

  • El mecanismo gather/ takepara producir valores de forma perezosa. Esto se ve en varios lenguajes como funciones generadoras; en Raku, sin embargo, no hay un límite de marco de pila único, por lo que son potentes como rutinas. (Esto no es de ningún contexto que involucre programación asincrónica, pero aún cumple con la definición de concurrencia).
  • El Promisemecanismo para transmitir un único resultado de una operación asincrónica es muy parecido a Promises en JavaScript o Tasken .Net (la semántica está un poco más cerca de la última).
  • A Supplyes un flujo de valores asincrónicos. Tiene bastante en común con las extensiones reactivas (Rx) , sin embargo, ha elegido un nombre y una API que encaja con el diseño general del lenguaje Raku (por ejemplo, los nombres de los métodos coinciden con sus duales síncronos en las secuencias).
  • A Channeles una cola concurrente, que tiene un mecanismo para transmitir finalización y error, lo que significa que puede realizar una transición fácil entre los paradigmas Supplyy Channel. La diferencia clave es que a Channeltiene almacenamiento: puede poner valores en él e inmediatamente pasar a hacer otra cosa, mientras que si emite un valor en a Supply, paga los costos de procesamiento (lo que proporciona un mecanismo de contrapresión). Se pueden construir varias arquitecturas usando Channels, como una arquitectura basada en eventos por etapas .

El concepto más distintivo en Raku, que no existe directamente en otros lenguajes, es el constructo react/ supply/ whenever. Escribir procesadores de múltiples flujos asíncronos a menudo es un desafío (administración de suscripciones, control de concurrencia); la construcción le proporciona un enfoque de programación estructurada. Más allá de eso, se trata principalmente de que la integración del lenguaje sea un poco más fuerte en Raku, en lugar de tratar estas cosas solo como bibliotecas.

Como han señalado otros, todavía no hay muchos documentos formales. Sin embargo, estas diapositivas pueden ser de interés (descargo de responsabilidad: son mías; contribuí al diseño de concurrencia de Raku e inventé react/ supply/ whenever).

  • 8 formas de hacer concurrencia y paralelismo en Perl 6
  • Entender reaccionar, suministrar y cuando sea
  • Dentro de la concurrencia de Perl 6 : análisis de cómo se implementa
9 jjmerelo Dec 28 2020 at 17:53

Artículos sobre la concurrencia de Raku : Si desea una descripción de cómo funciona la concurrencia, no conozco artículos académicos. Puede buscar en algunas publicaciones del Calendario de Adviento, por ejemplo, esta sobre concurrencia en servidores HTTP . La mayoría de los libros sobre Raku, como mi propio Raku Recipes (publicado por Apress), contienen un capítulo sobre Concurrencia, así que eso es algo que también puedes consultar. Finalmente, este artículo del que soy coautor utiliza la concurrencia de Raku para el cálculo evolutivo, con buenos resultados.

Cómo evaluar la concurrencia de Raku: * Raku usa procesos secuenciales de comunicación y usa canales como objetos de primera clase. En ese sentido, es similar a Go . Por otro lado, es capaz de enhebrar automáticamente los flujos de datos a través de hiper / carrera de la misma manera que lo hace Julia a través de macros. Entonces esos podrían ser dos objetivos para comparar.

Quizás la lista de correo de usuarios de perl6 sería un mejor lugar para hacer preguntas como esta.

5 p6steve Dec 29 2020 at 04:10

El CSP integrado en raku es un modelo de concurrencia bien establecido concebido por Tony (Anthony) Hoare. Es posible que también desee buscar un trabajo de Bill (William) Roscoe que continúe con la línea de investigación de Tony. Tenga en cuenta que esta será una investigación de CSP general. Dudo que haya algo referenciable todavía hecho específicamente en Raku.