Peter Van Roy Département d’Ingénierie Informatique, UCL

Slides:



Advertisements
Présentations similaires
Piles, files et listes: notions théoriques
Advertisements

Portée des variables VBA & Excel
Fonctions & procédures
Calculs de complexité d'algorithmes
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Cours dinformatique théorique INF f5 Alain Lecomte novembre 2005.
LI.A ça ressemble à ça… des fois…. Ou pas… Rappels et définition de lIA – Lidée quon sen fait – Jusquoù on va aujourdhui / dans le futur? – Petit Etat.
Diagrammes de communication
Programmes de calculs en 3ème
Qu’est-ce qu’un ordinateur ?
FSAB1402: Informatique 2 Techniques de Programmation Orientée Objet
18/10/2004 P. Van Roy, InfoT4, S5 1 Informatique T4 Solutions au Test du 18 octobre Peter Van Roy Département dIngénierie Informatique, UCL
ALGORITHMES RECURSIFS
OCaml - Les listes L3 MI.
9/11/2004 P. Van Roy, InfoT4, S8 1 Informatique T4 (FSAC1450) LEtat et lAbstraction de Données Peter Van Roy Département dIngénierie Informatique, UCL.
Récursivité.
12/10/2004 P. Van Roy, InfoT4, S4 1 Informatique T4 (FSAC1450) Récursion sur les Entiers Peter Van Roy Département dIngénierie Informatique, UCL
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 La Concurrence Déclarative Peter Van Roy Département dIngénierie Informatique, UCL
Expressions et assignations
Programmation logique Logique des prédicats du premier ordre
Python La structure itérative
1.2 COMPOSANTES DES VECTEURS
28 novembre 2012 Grégory Petit
7.1 TRANSFORMATION LINÉAIRE Cours 19. Au dernier cours nous avons vus Le déterminant dune matrice carré Les propriétés du déterminant La matrice adjointe.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Sémantique Formelle Peter Van Roy Département dIngénierie Informatique, UCL
Addition vectorielle de vecteurs
© 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 LEtat et lAbstraction de Données Peter Van Roy Département dIngénierie Informatique,
© 2005 P. Van Roy. All rights reserved. 1 FSAB 1402: Informatique 2 Concurrence et Systèmes Multi-Agents Peter Van Roy Département dIngénierie Informatique,
© 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Algorithmes sur les Listes Peter Van Roy Département dIngénierie Informatique, UCL
2/11/2004 P. Van Roy, InfoT4, S7 1 Informatique T4 (FSAC1450) Sémantique Peter Van Roy Département dIngénierie Informatique, UCL
© 2007 P. Van Roy. All rights reserved. 1 FSAB 1402: Informatique 2 Récursion sur les Entiers Peter Van Roy Département dIngénierie Informatique, UCL
LINF1251: Concurrence et Systèmes Multi-Agents
Introduction à l’algorithmique
Semaine #1 INF130 par Frédérick Henri.
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Récursion sur les Listes Peter Van Roy Département dIngénierie Informatique, UCL
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Enregistrements et Arbres Peter Van Roy Département dIngénierie Informatique, UCL
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Programmer avec des Types Abstraits Peter Van Roy Département dIngénierie Informatique,
FSAB 1402: Informatique 2 Complexité Calculatoire
FSAB1402: Informatique 2 L’État et l’Abstraction de Données
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Programmer avec lEtat Peter Van Roy Département dIngénierie Informatique, UCL
P. Van Roy, LINF LINF1251: Algorithmes sur les Listes Peter Van Roy Département dIngénierie Informatique, UCL
© 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Enregistrements et Arbres Peter Van Roy Département dIngénierie Informatique, UCL
29/9/2005 © 2005 P. Van Roy. All rights reserved. 1 FSAB 1402: Informatique 2 Récursion sur les Entiers Peter Van Roy Département dIngénierie Informatique,
26/10/2004 P. Van Roy, InfoT4, S6 1 Informatique T4 (FSAC1450) Récursion sur les Listes Peter Van Roy Département dIngénierie Informatique, UCL
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
P. Van Roy, LINF LINF1251: Objets, Classes, Polymorphisme et Héritage Peter Van Roy Département dIngénierie Informatique, UCL
P. Van Roy, LINF LINF1251: Enregistrements et Arbres Peter Van Roy Département dIngénierie Informatique, UCL
I&G- chapitre 11-La logique Logarithmique -Mme Roulaud
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Parallel Programming in C with MPI and OpenMP
Partie II Sémantique.
Sémantique dénotationnelle
2.2 PRODUIT SCALAIRE ET CALCUL D’ANGLES
P. Van Roy, LINF LINF1251: Sémantique Formelle Peter Van Roy Département d’Ingénierie Informatique, UCL
P. Van Roy, LINF LINF1251: LEtat et lAbstraction de Données Peter Van Roy Département dIngénierie Informatique, UCL
Le langage C Structures de données
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
19/11/2004 P. Van Roy, InfoT4, S9 1 Informatique T4 (FSAC1450) Concurrence et Systèmes Multi-Agents Peter Van Roy Département d’Ingénierie Informatique,
Expressions logiques Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Algorithmique et programmation en
Algorithmique et programmation (1)‏
Un survol du language C.
Les tests.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Le langage Racket (Lisp)
LINF 1251: Introduction à l’Algorithmique et la Programmation II
CPI/BTS 2 Algorithmique & Programmation La récursivité Algo – Prog CPI/BTS2 – M. Dravet – 14/09/2003 Dernière modification: 14/09/2003.
6/10/2005 © 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Récursion sur les Listes Peter Van Roy Département d’Ingénierie Informatique,
LINF 1251: Récursion sur les Listes
Transcription de la présentation:

La Concurrence Déclarative et Quelques Réflections sur la Programmation Peter Van Roy Département d’Ingénierie Informatique, UCL pvr@info.ucl.ac.be P. Van Roy, LINF1251

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

La concurrence déclarative P. Van Roy, LINF1251

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

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

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

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

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 Qu’est-ce qui se passe si on fait: declare F {Browse {CMap [1 2 3 4] F}} P. Van Roy, LINF1251

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

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 Qu’est-ce qui se passe si on fait: F = fun {$ X} X+1 end P. Van Roy, LINF1251

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 [2 3 4 5] P. Van Roy, LINF1251

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 d’insérer l’instruction thread … end là où on a besoin de la concurrence P. Van Roy, LINF1251

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

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

Exécution de {Fib 6} Créer un thread Synchroniser avec le résultat Thread actif F6 F4 F2 P. Van Roy, LINF1251

Observer l’exécution de Fib P. Van Roy, LINF1251

La programmation multi-agent P. Van Roy, LINF1251

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

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

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

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} P. Van Roy, LINF1251

Une optimisation Sinon on crée beaucoup trop d’agents! fun {Crible2 Xs M} case Xs of nil then nil [] X|Xr then if X=<M then X|{Crible2 thread {Filtre Xr X} end M} else Xs end end end On appelle alors {Crible2 Xs 316} pour une liste avec des nombres premiers jusqu’au 100000 (pourquoi?) P. Van Roy, LINF1251

Un exercice de sémantique P. Van Roy, LINF1251

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

L’énoncé Quel est l’état à la fin de l’exécution de: local MakeBumper B Y in fun {MakeBumper} C={NewCell 0} in fun {$} C:=@C+1 @C end end B={MakeBumper} Y={B} end Montrez quelques pas d’exécution représentatifs P. Van Roy, LINF1251

Traduction partielle en langage noyau local MakeBumper B Y in proc {MakeBumper R} C={NewCell 0} in R=proc {$ K} C:=@C+1 K=@C end end {MakeBumper B} {B Y} end s1 s2 ® Solution au tableau P. Van Roy, LINF1251

L’état final ( [], {m=p1, b=p2, y=1, c=x, i=0, c:y} ) avec: Une cellule ( [], {m=p1, b=p2, y=1, c=x, i=0, c:y} ) avec: p1=(proc {$ R} C={NewCell 0} in … end, {}) p2=(proc {$ K} C:=@C+1 K=@C end, {C ® c}) P. Van Roy, LINF1251

Les paradigmes de programmation P. Van Roy, LINF1251

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

Les trois “mondes” du cours Programmation déclarative + état (cellules) + concurrence (threads) Programmation orientée objet Abstraction Polymorphisme 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! P. Van Roy, LINF1251

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

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

Des consignes et des conseils pour l’examen P. Van Roy, LINF1251

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

Résumé P. Van Roy, LINF1251

Résumé La concurrence déclarative La programmation multi-agent 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 P. Van Roy, LINF1251

de la programmation vous a plu Bonne chance pour l’examen! Fin du cours J’espère que ce survol de la programmation vous a plu Bonne chance pour l’examen! P. Van Roy, LINF1251