La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

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

2 P. Van Roy, LINF12512 Ce 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

3 P. Van Roy, LINF La concurrence déclarative

4 P. Van Roy, LINF12514 La 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 1|2|3|_, donne toujours la sortie 1|4|9|_ 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

5 P. Van Roy, LINF12515 La concurrence déclarative est transparente (1) fun {Map Xs F} case Xs of nil then nil [] X|Xr then {F X} | {Map Xr F} end

6 P. Van Roy, LINF12516 La concurrence déclarative est transparente (2) fun {CMap Xs F} case Xs of nil then nil [] X|Xr then thread {F X} end | {CMap Xr F} end

7 P. Van Roy, LINF12517 La concurrence déclarative est transparente (3) fun {CMap Xs F} case Xs of nil then nil [] X|Xr then thread {F X} end | {CMap Xr F} end thread … end peut être utilisé comme expression

8 P. Van Roy, LINF12518 La concurrence déclarative est transparente (4) fun {CMap Xs F} case Xs of nil then nil [] X|Xr then thread {F X} end | {CMap Xr F} end Quest-ce qui se passe si on fait: declare F {Browse {CMap [ ] F}}

9 P. Van Roy, LINF12519 La concurrence déclarative est transparente (5) fun {CMap Xs F} case Xs of nil then nil [] X|Xr then thread {F X} end | {CMap Xr F} end Le browser montre [ _ _ _ _ ] CMap calcule le squelette de la liste Les nouveaux threads attendent que F soit lié

10 P. Van Roy, LINF La concurrence déclarative est transparente (6) fun {CMap Xs F} case Xs of nil then nil [] X|Xr then thread {F X} end | {CMap Xr F} end Quest-ce qui se passe si on fait: F = fun {$ X} X+1 end

11 P. Van Roy, LINF La concurrence déclarative est transparente (7) fun {CMap Xs F} case Xs of nil then nil [] X|Xr then thread {F X} end | {CMap Xr F} end Le browser montre [ ]

12 P. Van Roy, LINF La concurrence pour 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

13 P. Van Roy, LINF La concurrence pour 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

14 P. Van Roy, LINF 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 + F2 end end Dépendance dataflow

15 P. Van Roy, LINF Exécution de {Fib 6} F6 F5 F4F2 F3 F2 F1 F2 F3 F2 F1 F4 F1F3 F2 Créer un thread Synchroniser avec le résultat Thread actif

16 P. Van Roy, LINF Observer lexécution de Fib

17 P. Van Roy, LINF La programmation multi-agent

18 P. Van Roy, LINF 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é

19 P. Van Roy, LINF Le crible dEratosthènes 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 -2k-3k-5k 2|3|4|5|6|7|8|… 3|5|7|9|11|13|15|…5|7|11|13|17|19|… 7|11|13|17|19|… …

20 P. Van Roy, LINF Un agent pour enlever des 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 nil end end Pour en faire un agent, il faut le mettre dans un thread: thread Ys={Filtre Xs K} end

21 P. Van Roy, LINF Le programme principal Voici le programme principal: fun {Crible Xs} case Xs of nil then nil [] X|Xr then X|{Crible thread {Filtre Xr X} end} end end declare Xs Ys in thread Xs={Prod 2} end thread Ys={Crible Xs} end {Browse Ys}

22 P. Van Roy, LINF Une optimisation Sinon on crée beaucoup trop dagents! fun {Crible2 Xs M} case Xs of nil then nil [] X|Xr then if X=

23 P. Van Roy, LINF Un exercice de sémantique

24 P. Van Roy, LINF Facilité 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é

25 P. Van Roy, LINF Lénoncé Quel est létat à la fin de lexécution de: local MakeBumper B Y in fun {MakeBumper} C={NewCell 0} in fun end end B={MakeBumper} Y={B} end Montrez quelques pas dexécution représentatifs

26 P. Van Roy, LINF Traduction partielle en langage noyau local MakeBumper B Y in proc {MakeBumper R} C={NewCell 0} in R=proc {$ K} end end {MakeBumper B} {B Y} end s1s1 s2s2 Solution au tableau

27 P. Van Roy, LINF Létat final ( [], {m=p 1, b=p 2, y=1, c=, i=0, c:y} ) avec: p 1 =(proc {$ R} C={NewCell 0} in … end, {}) p 2 =(proc {$ K} end, {C c}) Une cellule

28 P. Van Roy, LINF Les paradigmes de programmation

29 P. Van Roy, LINF 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 dautres paradigmes intéressants

30 P. Van Roy, LINF 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 objet Abstraction Polymorphisme Héritage Programmation multi-agent Concurrence et dataflow Flots et agents Messages asynchrones + état (cellules)+ concurrence (threads)

31 P. Van Roy, LINF Paradigmes 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

32 P. Van Roy, LINF 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 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

33 P. Van Roy, LINF Des consignes et des conseils pour lexamen

34 P. Van Roy, LINF Lexamen 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

35 P. Van Roy, LINF Résumé

36 P. Van Roy, LINF Ré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 P. Van Roy, LINF Fin du cours Jespère que ce survol de la programmation vous a plu Bonne chance pour lexamen!


Télécharger ppt "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."

Présentations similaires


Annonces Google