Quels mécanismes de concurrence sont fournis par Raku et comment peuvent-ils être évalués? [fermé]
Je suis actuellement étudiant en train de travailler sur ma thèse sur Raku, pour laquelle j'ai décidé d'évaluer si Raku (Perl 6) est un bon langage face à une forte concurrence.
Je n'ai pu trouver aucun article sur la concurrence de Raku, à l'exception du site officiel. De plus, je n'ai aucune idée de la façon d'évaluer la concurrence de Raku (par exemple, quel programme dois-je utiliser, quelle langue doit être comparée à Raku, etc.).
Quels mécanismes de concurrence sont fournis par Raku? Où sont-ils documentés? Comment évaluer leur fonctionnalité et leurs performances?
Réponses
Raku fournit un certain nombre de mécanismes de simultanéité différents (et prévoit en outre un certain nombre d'approches de programmation parallèles, mais je suppose que la question est en réalité une question de concurrence). La majorité de ce qui est en Raku peut être trouvée dans d'autres langues; par example:
- Le mécanisme
gather
/take
pour produire paresseusement des valeurs. Ceci est vu dans divers langages comme des fonctions génératrices; dans Raku, cependant, il n'y a pas une seule limite de frame de pile, ils sont donc puissants. (Ce n'est dans aucun contexte impliquant une programmation asynchrone, mais cela répond toujours à la définition de la concurrence). - Le
Promise
mécanisme pour transmettre un seul résultat d'une opération asynchrone ressemble beaucoup àPromise
s en JavaScript ouTask
en .Net (la sémantique est un peu plus proche de ce dernier). - A
Supply
est un flux de valeurs asynchrones. Il a un peu en commun avec les extensions réactives (Rx) , mais a choisi une dénomination et une API qui correspondent à la conception globale du langage Raku (par exemple, les noms de méthodes correspondent à leurs duaux synchrones sur les séquences). - A
Channel
est une file d'attente simultanée, qui a un mécanisme pour transmettre l'achèvement et l'erreur, ce qui signifie que vous pouvez facilement passer entre les paradigmesSupply
etChannel
. La principale différence est que aChannel
dispose d' un stockage - vous pouvez y mettre des valeurs et passer immédiatement à autre chose - tandis que si vous émettez une valeur dans un,Supply
vous payez les coûts de traitement (ce qui donne un mécanisme de contre-pression). Diverses architectures peuvent être créées à l'aide deChannel
s, comme une architecture par étapes basée sur les événements .
Le concept le plus distinctif de Raku, qui n'existe pas directement dans d'autres langues, est la construction react
/ supply
/ whenever
. L'écriture de processeurs de plusieurs flux asynchrones est souvent difficile (gestion des abonnements, contrôle de la concurrence); le concept lui fournit une approche de programmation structurée. Au-delà de cela, c'est surtout une question d'intégration du langage un peu plus forte dans Raku, plutôt que de traiter ces choses comme des bibliothèques.
Comme d'autres l'ont noté, il n'y a pas encore beaucoup de documents officiels. Cependant, ces diapositives peuvent être intéressantes (avertissement: elles sont les miennes; j'ai contribué à la conception de la concurrence Raku et inventé react
/ supply
/ whenever
).
- 8 façons de faire de la concurrence et du parallélisme dans Perl 6
- Comprendre réagir, approvisionner et quand
- À l'intérieur de la concurrence Perl 6 - examen de la façon dont il est implémenté
Articles sur la concurrence de Raku : Si vous voulez une description du fonctionnement de la concurrence, je ne connais aucun article académique. Vous pouvez rechercher dans certaines publications du Calendrier de l'Avent, par exemple celle-ci sur la concurrence dans les serveurs HTTP . La plupart des livres sur Raku, comme mes propres recettes de Raku (publiées par Apress), contiennent un chapitre sur la concurrence, c'est donc quelque chose que vous pouvez également consulter. Enfin, cet article que j'ai co-écrit utilise la concurrence de Raku pour le calcul évolutif, pour de bons résultats.
Comment évaluer la concurrence de Raku: * Raku utilise des processus séquentiels communicants et utilise des canaux comme des objets de première classe. En ce sens, c'est similaire à Go . D'un autre côté, il est capable d'auto-threader les flux de données via hyper / race de la même manière que Julia le fait via des macros. Ce pourrait donc être deux cibles de comparaison.
Peut - être que la liste de diffusion des utilisateurs de perl6 serait un meilleur endroit pour poser des questions comme celle-ci.
Le CSP intégré à raku est un modèle de concurrence bien établi conçu par Tony (Anthony) Hoare. Vous voudrez peut-être aussi chercher du travail de Bill (William) Roscoe qui a continué la ligne de recherche de Tony. Notez que ce sera une recherche générale sur le CSP. Je doute qu'il y ait quelque chose de référençable encore fait spécifiquement sur Raku.