“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 16 — #26
i
i
i
i
i
i
i
i
16
1
• Introduction aux concepts de programmation
Le premier Browse affiche tout de suite start. La multiplication X * X attend jusqu’à ce que X soit liée. Le deuxième Browse attend la multiplication, alors il n’affichera encore rien. L’appel {Delay 10000} fait une pause d’au moins 10000 ms
(10 secondes). X ne sera liée qu’après ce délai. Quand X est liée, alors la multiplication
continue et le deuxième Browse affiche 9801. Les deux opérations X=99 et X * X
peuvent être faites dans n’importe quel ordre avec n’importe quel délai ; l’exécution
dataflow donnera toujours le même résultat. Le seul effet possible d’un délai est un
ralentissement, pas un changement de la valeur du résultat. Par exemple, faisons un
changement dans l’ordre des opérations :
declare X in
thread {Browse start} {Browse X * X} end
{Delay 10000} X=99
Le comportement est exactement comme avant : le Browse affiche 9801 après
10 secondes. Cet exemple montre deux propriétés agréables de l’exécution dataflow.
Premièrement, les calculs sont corrects indépendamment de leur partitionnement entre
fils. Deuxièmement, les calculs sont patients : ils ne signalent pas d’erreurs, mais
attendent.
L’ajout des fils et des délais à un programme peut radicalement changer son apparence. Mais aussi longtemps que les mêmes opérations sont appelées avec les mêmes
arguments, les résultats du programme ne changeront pas du tout. C’est la propriété
majeure de la concurrence dataflow. C’est pourquoi elle possède la plupart des avantages de la programmation concurrente sans les difficultés qui y sont typiquement
associées. La concurrence dataflow est traitée dans le chapitre 4.
1.11 L’ÉTAT EXPLICITE
Comment pouvons-nous définir une fonction qui peut apprendre de son passé ? C’està-dire une fonction ayant une sorte de mémoire interne qui l’aide à faire son travail.
Ce genre de mémoire est appelée l’état explicite. Tout comme la concurrence, l’état
explicite modélise un aspect essentiel du fonctionnement du monde réel. Nous voudrions pouvoir faire cela à l’intérieur du système. Nous verrons ultérieurement des
raisons plus profondes d’utiliser l’état explicite (voir chapitre 5). Pour le moment,
nous nous contenterons de voir comment il fonctionne, par exemple si nous voulons
savoir combien de fois la fonction FastPascal est appelée. Pouvons-nous modifier
FastPascal pour qu’elle se souvienne combien de fois elle a été appelée ? On peut
le faire avec l’état explicite.
Une cellule de mémoire
Il y a beaucoup de manières de définir un état explicite. La manière la plus simple est
de définir une cellule de mémoire. C’est une sorte de boîte dans laquelle vous pouvez
Précédent

- 31/370

Suivant