Les langages de programmation

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

Cours n° 1 Introduction à la programmation
Présentation du prototype :
Erratum C Surcharge For(int x=0; … 2.
Rappels C.
Introduction au langage C
Cours n° 6 Standard Template Library I.
Structures de données et complexité
A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à l’Algorithmique
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Cours n° 8 Conception et Programmation à Objets
Joscelin OUDRY IR2000 année
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
la programmation en langage C
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
JOME, un Composant Logiciel pour le Télé-Enseignement des Mathématiques via le WEB, Compatible OpenMath et MathML Laurent DIRAT OVE / I3S-UNSA.
Cours Systèmes logiques
OCaml - Les listes L3 MI.
Démarche de résolution de problèmes
Paradigmes de Programmation
OCaml – Les arbres L3 MI.
II. Chaînage, SDD séquentielles
Le lambda-calcul : réductions, causalité et déterminisme
Classes abstraites et Interfaces
La nécessaire mais délicate coopération de modèles Gérard Berry Collège de France Chaire Informatique et sciences numériques Cours 8 du 27 janvier 2010.
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
Interprétation de séquences dimages pour des applications MédiaSpace Alberto AVANZI François BREMOND Monique THONNAT Projet ORION INRIA de Sophia Antipolis.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Programmation concurrente
CSI2520, Hiver 2007 Python Un langage de programmation par scripting et plus…
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre 3 Syntaxe et sémantique.
Chapitre 1 Préliminaires.
1-1 Chapitre 5: Les variables Introduction Les noms Les variables Les attributions (bindings) Portée et durée de vie L'environnement de référence Les noms.
Partie II Sémantique.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COMPOSANTS PROGRAMMABLES
Programmation non procédurale Le projet ECOLE 2000
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI Jean-Jacques DUMÉRY -1-
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Les différents langages de programmation
Structures des données
Stage 2A CS80 pour Origin 1/28. 1) Presentation of the internship 2) The Multi-Oscillator 3) Connection-GUI’s API Conclusion Stage 2A CS80 pour Origin.
Test logiciel Xavier Baril.
CALENDRIER-PLAYBOY 2020.
Spécification de programmes et de systèmes
LES PILES ET FILES.
Projet de stage d’année IIR4 sous le thème:
Paradigmes des Langages de Programmation
Langages de programmation Ordinateurs = Machines à exécution.  D’où la nécessité d’outils de communication qui s’adaptent le mieux aux utilisateurs. Comment.
IFT 232 Méthodes de Conception Orientées Objets Introduction.
CSI 3525, Histoire, page 1 Aperçu historique Voir le chapitre 2 du livre pour plus de détails.
Le langage Racket (Lisp)
Pour les nuls débutants
Histoire de la programmation
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
IFT 232 Méthodes de Conception Orientées Objets Introduction.
La programmation par objets Principes et concepts Etude de Smalltalk.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Transcription de la présentation:

Les langages de programmation Gérard Berry Gerard.Berry@college-de-france.fr Xavier Leroy Xavier.Leroy@inria.fr Chaire d'innovation technologique Liliane Bettencourt Collège de France 8 février 2008 1

Le logiciel Utiliser la machine pour programmer plus sûr ! Un circuit ne fait que des choses très simples Il en fait des milliards par seconde, et sans erreur Le logiciel : spécifier quoi faire, dans tous les détails Très long texte dans un langage très technique Circuits peu variés, logiciels très variés Circuits très rigides, logiciels très souples Mais de plus en plus gros (millions de lignes) Et pas de loi de Moore.... Utiliser la machine pour programmer plus sûr ! 2

Les fonctions du langage L'outil d'écriture des programmes par des hommes ou des programmes pour la machine ou les autres hommes (cf an 2000) à différents niveaux d'abstraction Le support d'interaction avec la pensée les langages induisent des styles distincts impératif, fonctionnel, logique, temporel, etc... Le support de guerres de religions rares sont ceux qui aiment deux styles... et ceux qui font abstraction du NIH (Not Invented Here) 3

50 60 70 80 90 00 sh Perl Php Forth PostScript Basic Visual Basic Fortran PL1 Modula CSP Pascal Algol Ada Java CPL C C++ C# Simula Eiffel Smalltalk LISP Scheme Haskell ML Caml O'Caml ISWIM Prolog Prolog 4 Esterel Lustre Esterel v7 Scade Scade 6 4

The Programming Language Poster http://www.oreilly.com/news/graphics/prog_lang_poster.pdf 5

Pourquoi tant de langages ? Beaucoup d'aspects à traiter ensemble données, actions = programming in the small architecture = programming in the large comment réduire et détecter les bugs Beaucoup d'innovations successives fonctionnel, polymorphisme, modules, objets, parallélisme,... Enormément de compromis possibles plusieurs grandes classes et beaucoup de dialectes Mais, heureusement, des théories solides automates, grammaires, lambda-calcul, logiques 6

Les composants d'un langage Des principes de calcul et d'architecture calcul : impératif, fonctionnel, logique, temporel, etc. architecture : modularité, héritage, polymorphisme, etc Une syntaxe et un style syntaxique détermine les programmes bien construits Un systèmes de types évite d'additionner des choux et des carottes Une sémantique plus ou moins formelle définit le sens des programmes Un outillage compilateurs, débogueurs, manuels, exemples, librairies interfaces avec d'autres langages ou systèmes Une communauté d'utilisateurs 7

Les compilateurs Esterel CAML VHDL C Verilog assembleur circuits langage binaire Une exigence fondamentale : la portabilité 8

Style piquant : C, C++, Java,... int fact (int n) { int r = 1, i; for (i = 2; i <= n; i++) { r = r*i; } return r; 9

Style rond : Lisp, Scheme (de fact (n) (if (= n 1) 1 (* n (fact (- n 1))))) (de map (f l) (if (null l) nil (cons (f (car l)) (map f (cdr l))))) 10

Style matheux : ML, Haskell, ... let rec fact n = if n=1 then 1 else n* fact (n-1) in fact 4;; - : int = 24 let rec map f list = match list with [] -> [] | head :: tail -> (f head) :: (map f tail);; val map : ('a -> 'b) -> 'a list -> 'b list = <fun> 11

Style logique : Prolog Pere (Gerard, Antoine). Pere (Robert, Gerard). Pere (x,y), Pere (y,z) :- GrandPere (x,z). ?- GrandPere (GP, Antoine). > GP = Robert 12

Style verbal : Ada, Esterel,... abort run SLOWLY when 50 Meter; every Step do emit Jump || emit Breathe end every when 15 Second 13

Style graphique: Statecharts, Scade Source Esterel Technologies 14

Mots et phrases Identificateurs : x, fact, toto, foo, WikiPedia, ... nombres : 1, 3.14, 6.023 E 23 mot-clefs : int, for, while, fun, let, rec, emit, .. int i, j ; int fact (int n) { ... } let rec fact n = ... déclarations x := 1 ; for (i=0 ; i<N ; i++) { ... } return 3*x + fact (i) ; instructions expressions 15

La vraie syntaxe : un arbre syntaxe concrète * n app fact - 1 syntaxe abstraite C, CAML : n * fact (n-1) Lisp, Scheme : (* n (fact (- n 1)) Théorie des automates et grammaires formelles Générateurs d'analyseurs de syntaxe 16

Grammaire formelle (BNF) Expression ::= nombre | ident | Expression op Expression | '(' Expression ')' | ident '(' Liste_Expression ')'; Liste_Expression : = Expression | Liste_Expression ',' Expression; Et désambiguation par priorités : a + b / c  a + (b / c) et pas (a + b) / c La grammaire elle-même est écrite dans un langage de programmation! 17

Le modèle de calcul (1) Impératif ou fonctionnel ? impératif = efficace fonctionnel = élégant et sûr Général ou spécifique ? général = puissant mais sauvage spécifique = contrôlé mais limité Typé ou non typé ? typé = bien plus sûr 18

Modèle impératif int fact (int n) { int r = 1, i; for (i = 2; i <= n; i++) { r = r*i; } return r; fact(4) : n  4; r  1; i  2; r  1*2 = 2; i  3; r  2*3 = 6; i  4; r  6*4 = 24; i  5; return 24; 19

Modèle fonctionnel let rec fact n = if n=1 then 1 else n* fact (n-1) in fact 4 ;; fact 4 = 4 * fact(3) = 4 * (3 * fact(2)) = 4 * (3 * (2 * fact(1))) = 4 * (3 * (2 * 1)) = 24 Proche de la définition mathématique 20

Le typage Lisp : erreur à l'éxécution 1 + "bonjour" C, CAML : erreur à la compilation 3.14 + 1 C : 4.14, car 1 "promu" en 1.0 CAML : erreur de type + : int, int  int C, CAML + : float, float  float C, surcharge de + 21

map : une fonctionnelle head :: tail L = 1 3 5 4 map fact L = fact (1) fact (3) fact (5) fact (4) = 1 6 120 24 let rec map f list = match list with [] -> [] | head :: tail -> (f head) :: (map f tail) map : (int -> int) -> int list -> int list 22

Extension polymorphe (Milner) let rec map f list = match list with [] -> [] | head :: tail -> (f head) :: (map f tail);; val map : ('a -> 'b) -> 'a list -> 'b list = <fun> let rec map f list = match list with [] -> [] | head :: tail -> (map f tail) :: (f head);; type error ! 23

Héritage: Smalltalk, C++, Eiffel, Java, O'CAML, Esterel, ... class Point_2D { int x; int y; }; class Point_3D : Point_2D { // héritage de x et y int z; Pas facile à mélanger avec le polymorphisme 24

Un objet domestiqué : l'automate Sur les automates, on sait tout calculer 25

Un objet sauvage: le pointeur 19 8 3 19 10 11 12 13 14 15 16 17 18 19 20 21 22 23 *15 = 8 !!! 13  0 15 19 *15  3 21  19 *21  8 *13  1 : CRASH ! 26

Gestion mémoire: Construction et destruction des objets Manuelle (C, C++) int* P1 = malloc(64); // allocation Point* P2 = new Point(2,3); // création delete P1, P2; // nid à bugs! Automatique (Lisp, Smalltalk, CAML, Java) objets créés et détruits automatiquement Garbage Collector (GC) Automatique = moins efficace mais tellement plus sûr! A quoi sert d'être efficace si on ne maîtrise pas? 27

Architecture API = Application Programmer Interface Nécessité: utilisation de composants standards déterminés par leurs fonctions éprouvés, validés, certifiés, prouvés,... Qu'est ce qu'un composant? une interface exposée à l'utilisateur un contrat d'utilisation informel ou formel une implémentation cachée à l'utilisateur un confinement et un traitement des erreurs API = Application Programmer Interface 28

Exemple : la file fifo (first in - first out) class Fifo { public: Fifo (int size) ; // constructor void Put (unsigned m) throw (FullError) ; unsigned Get () throw (EmptyError) ; bool IsEmpty () ; bool IsFull () ; ... }; C++ interface FifoIntf : input Put : unsigned ; input Get ; output DataOut : unsigned; output IsEmpty ; output IsFull ; output EmptyError ; output FullError ; end interface Esterel 29

Il faut militer pour des langages mathématiquement rigoureux Conclusion Langage = objet complexe Pas d'espéranto en vue Equilibre délicat général / spécialisé Droit d'entrée devenu très élevé Il faut militer pour des langages mathématiquement rigoureux 30