Si j'ai un langage de programmation avec des fonctions de première classe. Quelle devrait être la sémantique quand une fonction de générateur est partagée?Que devrait-il se passer lorsqu'une fonction de générateur est assignée?
Par exemple:
var f = function() {
foreach (i in 0..42)
yield i;
}
int a = f(); // 0
int b = f(); // 1
// Assigning the generator function
var g = f;
int c = g(); // ??
int d = f(); // ??
Je peux imaginer trois choses:
- c == 2, d == 3 sens que la fonction génératrice est partagée
- c == 0, d == 2 signifiant qu'une nouvelle fonction de générateur est créée, avec les valeurs initialisées
- c == 2, d == 2 signifiant qu'une nouvelle fonction de générateur est créée en copiant l'état actuel du générateur
La meilleure réponse à mon avis, fournirait l'argument le plus convaincant pour faire un mécanisme ou un autre. Souvent, je trouve que l'art antérieur est l'argument le plus convaincant.
Et pour les points bonus, ce sur différents sujets? – leppie
Différents threads est un problème indépendant. Cela se produit même si vous n'attribuez pas de générateurs (en supposant que les threads puissent accéder aux mêmes variables). –