Question

Je suis intéressé par la définition d'un opérateur de carte parallèle pour ma langue. Cela transforme une liste en une nouvelle liste à partir d'une expression. Il aurait une syntaxe similaire à celle d'un générateur. Contrairement aux générateurs en C # et en Python, il serait potentiellement évalué en parallèle si le compilateur le souhaite (par exemple, il y a un noyau inactif et la liste est vraiment longue). Il serait appelé witheach pour le distinguer de foreach qui est exécuté de manière séquentielle.

Par exemple, considérez:

var f = function(int x) : int { return x * 2; }
var my_list = 0..1000000;
var my_mapped_list = witheach (i in mylist) yield f(i);

Ma question est la suivante: est-ce que cela va être trop peu intuitif pour les programmeurs qui peuvent créer des effets secondaires dans f ? Bien sûr, je dirais de ne pas faire cela dans la documentation, mais la plupart des programmeurs ne lisent pas la documentation en langage. : -)

Je suppose que la plus grande question est la suivante: les programmeurs modernes peuvent-ils s’adapter à la sémantique implicite du traitement des listes parallèles dans leur langage, ou ont-ils besoin que les choses soient plus explicites?

Était-ce utile?

La solution

Vous avez raison de dire que la plupart des utilisateurs ne liront pas la documentation et, en tant que tels, mettront probablement du code non sécurisé pour les threads dans un bloc avec chaque (en particulier avec un nom et une syntaxe similaires à foreach ). Vous devrez soit faire confiance à vos utilisateurs, soit effectuer une analyse statique sur la sécurité simultanée de ce bloc. Si vous choisissez la dernière option, vous pouvez également ne pas vous soucier de avec chaque - parallélisez automatiquement pour chaque lorsque cela est possible.

Quant à savoir si les utilisateurs sont prêts à assumer la responsabilité de choisir d’être potentiellement dangereux, je parierais "oui", tant qu’ils savent à l’avance ce qui est sûr. De nombreuses langues vous obligent à faire ce choix chaque jour (pointeurs, gestion manuelle de la mémoire, accès simultané à la mémoire partagée). Vous voudrez peut-être rendre votre syntaxe moins ambiguë (par exemple, appelez-la parallelforeach ), afin que les utilisateurs sachent à quoi ils souscrivent.

Autres conseils

Vous voulez dire quelque chose comme pmap ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top