¿Qué mecanismos de concurrencia proporciona Raku y cómo se pueden evaluar? [cerrado]
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
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
/take
para 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
Promise
mecanismo para transmitir un único resultado de una operación asincrónica es muy parecido aPromise
s en JavaScript oTask
en .Net (la semántica está un poco más cerca de la última). - A
Supply
es 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
Channel
es 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 paradigmasSupply
yChannel
. La diferencia clave es que aChannel
tiene almacenamiento: puede poner valores en él e inmediatamente pasar a hacer otra cosa, mientras que si emite un valor en aSupply
, paga los costos de procesamiento (lo que proporciona un mecanismo de contrapresión). Se pueden construir varias arquitecturas usandoChannel
s, 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
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.
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.