Cet article propose des bases de multiprogrammation en Erlang.
Remarques | Code |
---|---|
Pour débuter, examinons le module echo.erl proposé à droite. On y trouve les fonctions echo/0 et youhou/2. Leurs rôles respectifs vont comme suit :
|
|
La raison pour la déclinaison spéciale de youhou/2 avec le message exit est que le destinataire (probablement echo/0) terminera alors son exécution et ne répondra pas. Une alternative aurait été de retourner le message exit avant de fermer boutique dans echo/0.
Quelques éléments nouveaux :
Remarques | Code |
---|---|
Un exemple d'utilisation des fonctions du module echo est proposé à droite :
|
|
Il est possible, comme le montre youhou/2, d'adjoindre un bloc after à un bloc receive tel que receive .. after N ... end provoque un timeout si aucun message n'est reçu après une attente de N millisecondes. Les instructions dans le bloc after sont alors exécutées.
Examinons maintenant un SCS permettant à un processus d'exécuter des fonctions dans un autre processus.
Remarques | Code |
---|---|
Le module rproc (car rpc est un module système) exposera les fonctions rpc/0, envoyer/2 et envoyer/3. Le rôle de rpc/0 est de recevoir des messages composés de fonctions et des paramètres, et d'appliquer la fonction au(x) paramètre(s) puis de retourner les résultats. Dans le cas où le paramètre est une liste, rpc/0 appliquera la fonction à chacun des paramètres (par List Comprehension) et enverra à l'émetteur original la liste de résultats correspondante. Un peu comme youhou/2 plus haut, envoyer/3 enverra une fonction et ses paramètres à un processus donné, puis affichera le résultat renvoyé par ce tiers, alors que envoyer/2 servira surtout à signaler à ce tiers qu'il est temps de se mettre au rencart. |
|
Quelques exemples d'utilisation de ces fonctions suivent.
Remarques | Code |
---|---|
L'instruction 2> fait exécuter un fun au processus Pid en lui passant en paramètre la valeur 10. Le fun ayant pour rôle d'évaluer le double de la valeur du paramètre reçu, cet appel retourne 20, sans surprises. L'instruction 3> répète le test avec une autre valeur. L'instruction 4> fait exécuter un fun au processus Pid en lui passant en paramètre la liste [1,2,3,4,5]. Le fun ayant pour rôle d'évaluer le double de la valeur du paramètre reçu, et rpc/0 offrant une version spécialisée pour des listes qui applique une fonction à chaque élément de la liste par voie de List Comprehension, cet appel retourne [2,4,6,8,10]. L'instruction 5> ferme le serveur rpc/0, puis 6> cherche à redémarrer une nouvelle instance de ce processus pour en associer l'identifiant à Pid; cette variable étant déjà associée à un Pattern (l'identifiant de l'instance précédente de rpc/0), ceci échoue. Notez que l'évaluation de la faisabilité de faire correspondre les Patterns précède l'évaluation des expressions impliquées, donc aucun processus n'est démarré ici. L'instruction 7>, f(Pid), signifie Forget Pid, ce qui dissocie une variable connue du shell de son Pattern. Suite à cet oubli volontaire, les instructions 8> et 9> reprennent leur sens.
|
|
Ceci vous donne un aperçu des mécanismes de communication de base du langage. Cela dit, il y a bien plus...