37
P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département d’Ingénierie Informatique, UCL [email protected]

P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

Embed Size (px)

Citation preview

Page 1: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 1

La Concurrence Déclarativeet Quelques Réflections

sur la Programmation

Peter Van Roy

Département d’Ingénierie Informatique, UCL

[email protected]

Page 2: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 2

Ce qu’on va voir aujourd’hui

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 l’examen

Page 3: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 3

La concurrencedéclarative

Page 4: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 4

La concurrence déclarative Les programmes multi-agents qu’on a vu la semaine dernière

sont déterministes Avec les mêmes entrées, ils donnent les mêmes résultats L’agent Trans, avec l’entrée 1|2|3|_, donne toujours la sortie 1|4|9|_

La concurrence ne change pas la valeur du résultat, mais uniquement l’ordre 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 n’est pas vraie pour la programmation avec état

Regardons la propriété de plus près

Page 5: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 5

La concurrence déclarativeest transparente (1)

fun {Map Xs F}

case Xs

of nil then nil

[] X|Xr then

{F X} | {Map Xr F}

end

end

Page 6: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 6

La concurrence déclarativeest transparente (2)

fun {CMap Xs F}

case Xs

of nil then nil

[] X|Xr then

thread {F X} end | {CMap Xr F}

end

end

Page 7: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 7

La concurrence déclarativeest transparente (3)

fun {CMap Xs F}

case Xs

of nil then nil

[] X|Xr then

thread {F X} end | {CMap Xr F}

end

end

thread … end peut être utilisé

comme expression

Page 8: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 8

La concurrence déclarativeest transparente (4)

fun {CMap Xs F}

case Xs

of nil then nil

[] X|Xr then

thread {F X} end | {CMap Xr F}

end

end

Qu’est-ce qui se passe si on fait:declare F{Browse {CMap [1 2 3 4] F}}

Page 9: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 9

La concurrence déclarativeest transparente (5)

fun {CMap Xs F}

case Xs

of nil then nil

[] X|Xr 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é

Page 10: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 10

La concurrence déclarativeest transparente (6)

fun {CMap Xs F}

case Xs

of nil then nil

[] X|Xr then

thread {F X} end | {CMap Xr F}

end

end

Qu’est-ce qui se passe si on fait:F = fun {$ X} X+1 end

Page 11: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 11

La concurrence déclarativeest transparente (7)

fun {CMap Xs F}

case Xs

of nil then nil

[] X|Xr then

thread {F X} end | {CMap Xr F}

end

end

Le browser montre [2 3 4 5]

Page 12: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 12

La 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 d’insérer l’instruction thread … end là où on a besoin de la concurrence

Page 13: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 13

La concurrencepour les nuls (2)

fun {Fib X} if X==0 then 0

elseif X==1 then 1 else

thread {Fib X-1} end + {Fib X-2} end

end

Page 14: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 14

Pourquoi cela marche?

fun {Fib X}

if X==0 then 0 elseif X==1 then 1

else F1 F2 in

F1 = thread {Fib X-1} end F2 = {Fib X-2}

F1 + F2end

end

Dépendance dataflow

Page 15: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 15

Exécution de {Fib 6}

F6

F5

F4 F2

F3

F2

F1

F2

F3

F2

F1

F4

F1F3

F2

Créer un thread

Synchroniseravec le résultat

Thread actif

Page 16: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 16

Observer l’exécution de Fib

Page 17: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 17

La programmationmulti-agent

Page 18: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 18

Encore 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é

Page 19: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 19

Le crible d’Eratosthènes

Le crible d’Eratosthènes est un algorithme pour faire la séquence des nombres premiers

On commence avec une séquence d’entiers, on la passe par un pipeline d’agents dont chaque agent enlève les multiples du premier élément

-2k -3k -5k2|3|4|5|6|7|8|…

3|5|7|9|11|13|15|… 5|7|11|13|17|19|…

7|11|13|17|19|…

Page 20: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 20

Un agent pour enleverdes multiples

Voici un programme qui enlève les multiples de k:

fun {Filtre Xs K}case Xs of X|Xr then

if X mod K \= 0 then X|{Filtre Xr K}else {Filtre Xr K} end

else nilend

end

Pour en faire un agent, il faut le mettre dans un thread:

thread Ys={Filtre Xs K} end

Page 21: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 21

Le programme principal

Voici le programme principal:

fun {Crible Xs}case Xsof nil then nil[] X|Xr then X|{Crible thread {Filtre Xr X} end} end

end

declare Xs Ys inthread Xs={Prod 2} endthread Ys={Crible Xs} end{Browse Ys}

Page 22: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 22

Une optimisation Sinon on crée beaucoup trop d’agents!

fun {Crible2 Xs M}case Xsof nil then nil[] X|Xr then if X=<M then X|{Crible2 thread {Filtre Xr X} end M} else Xs endend

end

On appelle alors {Crible2 Xs 316} pour une liste avec des nombres premiers jusqu’au 100000 (pourquoi?)

Page 23: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 23

Un exercice de sémantique

Page 24: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 24

Facilité avec la sémantique

La sémantique est une partie importante de ce cours Il ne s’agit pas seulement de savoir programmer avec

les concepts Il s’agit de les comprendre, et donc de connaître leur

sémantique

J’attends que vous puissiez faire des calculs rapides avec la sémantique des programmes

Il faut faire des exercices pour gagner cette facilité

Page 25: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 25

L’énoncé

Quel est l’état à la fin de l’exécution de:

local MakeBumper B Y infun {MakeBumper} C={NewCell 0}in fun {$} C:=@C+1 @C endendB={MakeBumper}Y={B}

end

Montrez quelques pas d’exécution représentatifs

Page 26: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 26

Traduction partielleen langage noyau

local MakeBumper B Y inproc {MakeBumper R} C={NewCell 0}in R=proc {$ K} C:=@C+1 K=@C

endend{MakeBumper B}{B Y}

end

s1 s2

Solution au tableau

Page 27: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 27

L’état final

( [], {m=p1, b=p2, y=1, c=, i=0, c:y} )

avec:p1=(proc {$ R} C={NewCell 0} in … end, {})

p2=(proc {$ K} C:=@C+1 K=@C end, {C c})

Une cellule

Page 28: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 28

Les paradigmes de programmation

Page 29: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 29

Les 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 d’autres paradigmes intéressants

Page 30: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 30

Les trois “mondes” du cours

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!

Programmation déclarative

Programmation orientée objetAbstractionPolymorphismeHéritage

Programmation multi-agentConcurrence et dataflowFlots et agentsMessages asynchrones

+ état (cellules) + concurrence (threads)

Page 31: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 31

Paradigmes de programmationProgrammation déclarativeProgrammation fonctionnelle stricte, Scheme, MLProgrammation logique déterministe

+ concurrence + synchronisation selon besoin Concurrence dataflow (déclarative) Prog. fonctionnelle paresseuse, Haskell + choix nondéterministe Programmation logique concurrente

+ traitement d’exceptions + é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 calculProgrammation 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

Page 32: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 32

La 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

d’utilisation 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

Page 33: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 33

Des consignes et des conseils pour l’examen

Page 34: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 34

L’examen L’examen 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 l’exécution d’un 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

J’espère vous pouvoir donner tous de bonnes notes

Page 35: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 35

Résumé

Page 36: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 36

Résumé La concurrence déclarative

On peut prendre n’importe 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 d’Eratosthènes

Un exercice de sémantique Les paradigmes de programmation

Une réflection sur le contenu du cours Des consignes et des conseils pour l’examen

Attention aux définitions précises! Il y aura certainement un exercice sur la sémantique

Page 37: P. Van Roy, LINF1251 1 La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département dIngénierie Informatique, UCL

P. Van Roy, LINF1251 37

Fin du cours

J’espère que ce survol

de la programmation vous a plu

Bonne chance pour l’examen!