Title: La Concurrence D
1La Concurrence Déclarativeet Quelques
Réflectionssur la Programmation
- Peter Van Roy
- Département dIngénierie Informatique, UCL
- pvr_at_info.ucl.ac.be
2Ce quon va voir aujourdhui
- La concurrence déclarative
- On peut prendre un programme déclaratif et le
rendre concurrent simplement en ajoutant des
threads, sans changer autre chose - La programmation multi-agent
- Un exercice de sémantique
- Quelques réflections sur les paradigmes de
programmation - Des consignes et des conseils pour lexamen
3La concurrencedéclarative
4La concurrence déclarative
- Les programmes multi-agents quon a vu la semaine
dernière sont déterministes - Avec les mêmes entrées, ils donnent les mêmes
résultats - Lagent Trans, avec lentrée 123_, donne
toujours la sortie 149_ - La concurrence ne change pas la valeur du
résultat, mais uniquement lordre du calcul
(quand le résultat est calculé) - Cette propriété facilite de beaucoup la
programmation - Par exemple, on peut ajouter des threads à un
programme existant sans que le résultat change
(la transparence de la concurrence) - Cette propriété est vraie uniquement pour la
programmation déclarative - Elle nest pas vraie pour la programmation avec
état - Regardons la propriété de plus près
5La concurrence déclarativeest transparente (1)
- fun Map Xs F
- case Xs
- of nil then nil
- XXr then
- F X Map Xr F
- end
- end
6La concurrence déclarativeest transparente (2)
- fun CMap Xs F
- case Xs
- of nil then nil
- XXr then
- thread F X end CMap Xr F
- end
- end
7La concurrence déclarativeest transparente (3)
thread end peut être utilisé comme expression
- fun CMap Xs F
- case Xs
- of nil then nil
- XXr then
- thread F X end CMap Xr F
- end
- end
8La concurrence déclarativeest transparente (4)
- fun CMap Xs F
- case Xs
- of nil then nil
- XXr then
- thread F X end CMap Xr F
- end
- end
-
- Quest-ce qui se passe si on fait
- declare F
- Browse CMap 1 2 3 4 F
9La concurrence déclarativeest transparente (5)
- fun CMap Xs F
- case Xs
- of nil then nil
- XXr then
- thread F X end CMap Xr F
- end
- end
-
- Le browser montre _ _ _ _
- CMap calcule le squelette de la liste
- Les nouveaux threads attendent que F soit lié
10La concurrence déclarativeest transparente (6)
- fun CMap Xs F
- case Xs
- of nil then nil
- XXr then
- thread F X end CMap Xr F
- end
- end
-
- Quest-ce qui se passe si on fait
- F fun X X1 end
11La concurrence déclarativeest transparente (7)
- fun CMap Xs F
- case Xs
- of nil then nil
- XXr then
- thread F X end CMap Xr F
- end
- end
-
- Le browser montre 2 3 4 5
12La concurrencepour les nuls (1)
- On peut ajouter des threads à un programme
existant sans que le résultat change - Par conséquence, il est très facile de prendre un
programme déclaratif et de le rendre concurrent - Il suffit dinsérer linstruction thread end là
où on a besoin de la concurrence
13La concurrencepour les nuls (2)
- fun Fib X
- if X0 then 0 elseif X1 then 1 else
- thread Fib X-1 end Fib X-2 end
- end
14Pourquoi cela marche?
- fun Fib X
- if X0 then 0 elseif X1 then 1
- else F1 F2 in
- F1 thread Fib X-1 end F2
Fib X-2 -
- F1 F2end
- end
Dépendance dataflow
15Exécution de Fib 6
F2
Créer un thread
F1
F3
F2
F4
Synchroniser avec le résultat
F2
F5
F1
F3
F2
F1
F3
Thread actif
F6
F4
F2
16Observer lexécution de Fib
17La programmationmulti-agent
18Encore des agents!
- La semaine dernière on a vu quelques exemples
simples de programmes multi-agents - Producteur-consommateur
- Producteur-transformateur-consommateur (pipeline)
- Regardons maintenant un exemple plus sophistiqué
19Le crible dEratosthènes
-2k
-3k
-5k
2345678
711131719
3579111315
5711131719
- Le crible dEratosthènes est un algorithme pour
faire la séquence des nombres premiers - On commence avec une séquence dentiers, on la
passe par un pipeline dagents dont chaque agent
enlève les multiples du premier élément
20Un agent pour enleverdes multiples
- Voici un programme qui enlève les multiples de
kfun Filtre Xs K case Xs of XXr then if
X mod K \ 0 then XFiltre Xr K else Filtre
Xr K end else nil endend - Pour en faire un agent, il faut le mettre dans un
threadthread YsFiltre Xs K end
21Le programme principal
- Voici le programme principalfun Crible
Xs case Xs of nil then nil XXr then
XCrible thread Filtre Xr X end
endenddeclare Xs Ys inthread XsProd 2
endthread YsCrible Xs endBrowse Ys
22Une optimisation
- Sinon on crée beaucoup trop dagents!fun
Crible2 Xs M case Xs of nil then nil XXr
then if XltM then XCrible2 thread
Filtre Xr X end M else Xs end endend - On appelle alors Crible2 Xs 316 pour une liste
avec des nombres premiers jusquau 100000
(pourquoi?)
23Un exercice de sémantique
24Facilité avec la sémantique
- La sémantique est une partie importante de ce
cours - Il ne sagit pas seulement de savoir programmer
avec les concepts - Il sagit de les comprendre, et donc de connaître
leur sémantique - Jattends que vous puissiez faire des calculs
rapides avec la sémantique des programmes - Il faut faire des exercices pour gagner cette
facilité
25Lénoncé
- Quel est létat à la fin de lexécution
delocal MakeBumper B Y in fun MakeBumper
CNewCell 0 in fun C_at_C1 _at_C
end end BMakeBumper YBend - Montrez quelques pas dexécution représentatifs
26Traduction partielleen langage noyau
- local MakeBumper B Y in proc MakeBumper R
CNewCell 0 in Rproc K C_at_C1
K_at_C end end MakeBumper B B Yend
s1
s2
Solution au tableau
27Létat final
Une cellule
- ( , mp1, bp2, y1, cx, i0, cy )
- avec
- p1(proc R CNewCell 0 in end, )
- p2(proc K C_at_C1 K_at_C end, C c)
28Les paradigmes de programmation
29Les paradigmes de LINF1251
- Dans ce cours nous avons vu quelques des concepts
les plus importants dans la programmation - Nous avons aussi vu quelques paradigmes de
programmation - Programmation déclarative (programmation
fonctionnelle) - Programmation avec état
- Programmation orientée objet
- Programmation concurrente avec dataflow
- Programmation multi-agent
- Il y a beaucoup dautres paradigmes intéressants
30Les trois mondes du cours
Programmation déclarative
état (cellules)
concurrence (threads)
Programmation orientée objet Abstraction Polymorph
isme Héritage
Programmation multi-agent Concurrence et
dataflow Flots et agents Messages asynchrones
- Dans ce cours, nous avons vu trois mondes très
différents, chacun avec sa manière de penser - Pour voir comment la programmation orientée objet
et multi-agent se retrouvent, il faut suivre le
cours INGI2131!
31Paradigmes de programmation
Programmation déclarative Programmation
fonctionnelle stricte, Scheme, ML Programmation
logique déterministe concurrence
synchronisation selon besoin Concurrence
dataflow (déclarative) Prog. fonctionnelle
paresseuse, Haskell choix
nondéterministe Programmation logique
concurrente traitement dexceptions
état explicite Programmation orientée
objet (OO), Java, C, Smalltalk
recherche Prog. logique classique, Prolog
Programmation OO concurrente (envoi de
messages, Erlang, E) (état partagé, Java)
espaces de calcul Programmation par contraintes
- Ce schéma donne un résumé des différents
paradigmes avec les relations entre eux - Chaque paradigme a ses avantages et désavantages
et un domaine où il est le meilleur
32La coexistence des paradigmes
- Chaque paradigme a sa place
- Avec plus de concepts on peut exprimer plus, mais
le raisonnement devient plus compliqué - Avec moins de concepts on peut satisfaire des
conditions dutilisation plus stricte - Les différents paradigmes ne sont pas meilleurs
ou pires, mais simplement différents - Dans vos programmes, je vous conseille de bien
réfléchir et de choisir le paradigme approprié - Maintenant, je vous conseille de relire le début
du premier cours! - Pourquoi on a organisé le cours autour des
concepts
33Des consignes et des conseils pour lexamen
34Lexamen
- Lexamen sera de 3h, à livre fermé
- Il y aura une division égale entre théorie et
pratique - Attention à la précision pour la théorie (voir le
livre!) - Attention à la syntaxe pour la pratique!
- Il y aura certainement un exercice sur la
sémantique - Où vous devez faire lexécution dun programme
sans sombrer dans les détails - La matière est tout ce qui a été vu dans les
cours magistraux et les séances pratiques - Une définition précise des concepts se trouve
dans le livre du cours - Les notes ne seront pas sur une courbe
- Jespère vous pouvoir donner tous de bonnes notes
35Résumé
36Résumé
- La concurrence déclarative
- On peut prendre nimporte quel programme
déclaratif et le rendre concurrent - Attention ceci ne marche pas pour les programmes
avec état! - La programmation multi-agent
- Un exemple plus compliqué le crible
dEratosthènes - Un exercice de sémantique
- Les paradigmes de programmation
- Une réflection sur le contenu du cours
- Des consignes et des conseils pour lexamen
- Attention aux définitions précises!
- Il y aura certainement un exercice sur la
sémantique
37- Fin du cours
- Jespère que ce survol
- de la programmation vous a plu
- Bonne chance pour lexamen!