“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 208 — #218
i
i
i
i
i
i
i
i
208
4
• La programmation concurrente dataflow
fun {Sieve Xs M}
case Xs of nil then nil
[] X|Xr then Ys in
if X=
thread Ys={Filter Xr
fun {$ Y} Y mod X \= 0 end} end
else Ys=Xr end
X|{Sieve Ys M}
end
end
Avec une liste de 100 000 éléments, nous l’appelons comme {Sieve Xs 316}
(parce que 316 =
√
100 000). Cela crée le pipeline de filtres montré dans la
figure 4.12. Parce que les petits facteurs sont plus fréquents que les grands, l’essentiel
du travail de filtrage sera fait au début du pipeline.
{Sieve Xs 316}
Filter
Filter
Filter
Filter
...
313
7
3
5
2
Xs
Filter
Figure 4.12 Le pipeline de filtres généré par {Sieve Xs 316}.
4.4 LES PRINCIPALES LIMITATIONS DE LA PROGRAMMATION
DÉCLARATIVE
Cette section explique les deux principales limitations de la programmation déclarative,
relatives à la modularité et au non-déterminisme.
4.4.1 La modularité
Nous disons qu’un programme est modulaire par rapport à un changement d’une partie
si le changement peut être fait sans changer le reste du programme. La modularité
ne peut pas être réalisée dans un modèle déclaratif, mais elle pourra être réalisée si
le modèle est étendu avec l’état explicite. Voici deux exemples où les programmes
déclaratifs ne sont pas modulaires :
1. Le premier exemple est une mémoire cache de mémoisation. C’est une mémoire
à l’intérieur d’une fonction qui garde un ensemble de paires d’arguments et leurs
résultats. À l’appel, si l’argument est dans la mémoire cache le résultat pourra
i
i
i
i
i
i
i
i
208
4
• La programmation concurrente dataflow
fun {Sieve Xs M}
case Xs of nil then nil
[] X|Xr then Ys in
if X=
fun {$ Y} Y mod X \= 0 end} end
else Ys=Xr end
X|{Sieve Ys M}
end
end
Avec une liste de 100 000 éléments, nous l’appelons comme {Sieve Xs 316}
(parce que 316 =
√
100 000). Cela crée le pipeline de filtres montré dans la
figure 4.12. Parce que les petits facteurs sont plus fréquents que les grands, l’essentiel
du travail de filtrage sera fait au début du pipeline.
{Sieve Xs 316}
Filter
Filter
Filter
Filter
...
313
7
3
5
2
Xs
Filter
Figure 4.12 Le pipeline de filtres généré par {Sieve Xs 316}.
4.4 LES PRINCIPALES LIMITATIONS DE LA PROGRAMMATION
DÉCLARATIVE
Cette section explique les deux principales limitations de la programmation déclarative,
relatives à la modularité et au non-déterminisme.
4.4.1 La modularité
Nous disons qu’un programme est modulaire par rapport à un changement d’une partie
si le changement peut être fait sans changer le reste du programme. La modularité
ne peut pas être réalisée dans un modèle déclaratif, mais elle pourra être réalisée si
le modèle est étendu avec l’état explicite. Voici deux exemples où les programmes
déclaratifs ne sont pas modulaires :
1. Le premier exemple est une mémoire cache de mémoisation. C’est une mémoire
à l’intérieur d’une fonction qui garde un ensemble de paires d’arguments et leurs
résultats. À l’appel, si l’argument est dans la mémoire cache le résultat pourra
