Langages et paradigmes

publicité
Langages et paradigmes
Olivier Lecarme
Master d’Informatique, première année
2007–2008
Introduction
Première partie I
Introduction
Langages et paradigmes
2/318
Introduction
Organisation
Plan
Organisation de cet enseignement
Il est organisé en plusieurs périodes :
1. Semaines 39 à 43 : Introduction générale
I
I
2h de cours par semaine :
2h de travaux dirigés par semaine : lectures dirigées et
commentées, exercices
Langages et paradigmes
3/318
Introduction
Organisation
Plan
Organisation
2. Étude de trois langages de programmation (C++, Caml et Icon) :
I
Semaines 39 à 42 : C++
I
I
I
2h de cours par semaine
2h de travaux pratiques par semaine
Semaines 43 à 46 : Caml et Icon :
I
I
Langages et paradigmes
1h30 de cours par semaine : deux séances par langage
1h30 de travaux pratiques par semaine : deux séances par langage
4/318
Introduction
Organisation
Plan
Organisation
3. Semaines 47 à 51 : Mini-projet
I
I
I
groupes de 5
un sujet différent par groupe
le sujet est à traiter dans les trois langages
4. Semaine 3 : Conclusion
I
I
présentation des mini-projets (écrite et orale)
cours de synthèse et conclusion (par courrier)
Langages et paradigmes
5/318
Introduction
Pourquoi tant de langages ?
Nombre de langages
Pourquoi tant de langages de programmation ?
I Nombre de langages
Il existe plusieurs milliers de langages de
programmation, et on continue d’en créer. Pourquoi ?
Langages et paradigmes
6/318
Introduction
Pourquoi tant de langages ?
Nombre de langages
Nombre de langages
I Évolution de la discipline :
I
I
I
I
passage du langage machine au langage d’assemblage puis aux
langages de haut niveau
progrès dans les formalismes de description
progrès dans les techniques de compilation
courants nouveaux en méthodologie : programmation structurée,
programmation modulaire, programmation par objets, etc.
Langages et paradigmes
7/318
Introduction
Pourquoi tant de langages ?
Nombre de langages
Nombre de langages
I Variété des problèmes à résoudre :
I
I
I
I
I
I
I
manipulation de données symboliques
structures de données très complexes
opérations complexes sur chaînes de caractères
programmation de bas niveau pour les systèmes d’exploitation
représentation du raisonnement logique
nouveaux problèmes spécifiques
applications hautement sécuritaires
Langages et paradigmes
8/318
Introduction
Pourquoi tant de langages ?
Nombre de langages
Nombre de langages
I Préférences personnelles :
I
I
I
I
I
I
I
questions de goûts personnels principalement
écrire bref ou écrire clair ?
récursivité ou itération ?
pointeurs explicites ou non ?
sécurité ou liberté ?
un seul langage « universel » ou plusieurs langages spécialisés ?
l’interactivité est-elle importante ?
Langages et paradigmes
9/318
Introduction
Pourquoi tant de langages ?
Succès des langages
Succès des langages
Parmi les milliers de langages qui ont été définis et
implémentés, quelques centaines seulement sont encore
utilisés, et quelques dizaines le sont de manière importante.
Langages et paradigmes
10/318
Introduction
Pourquoi tant de langages ?
Succès des langages
Succès des langages
Qu’est-ce qui fait qu’un langage a du succès ?
I Puissance d’expression :
I
I
I
tout langage permet de tout exprimer, mais plus ou moins
facilement
certaines caractéristiques ont une grande importance sur la
facilité de programmation
les possibilités d’abstraction sont les plus importantes
Langages et paradigmes
11/318
Introduction
Pourquoi tant de langages ?
Succès des langages
Succès des langages
I Facilité d’utilisation :
I
I
I
facilité d’apprentissage pour un débutant
rapidité des progrès
absence de pièges et de surprises
I Facilité d’implémentation :
I
I
I
I
sur des machines peu coûteuses
rapidité de construction d’une nouvelle implémentation
transportabilité de l’implémentation
absence de freins légaux ou commerciaux
Langages et paradigmes
12/318
Introduction
Pourquoi tant de langages ?
Succès des langages
Succès des langages
I Qualité de l’implémentation :
I
I
I
bonnes performances dès le début
restrictions faites au langage pour le permettre
convivialité des outils annexes
I Facteurs économiques et autres :
I
I
I
I
I
I
support par un industriel puissant : Fortran, Cobol, PL/I
support par un organisme public : Ada
campagne publicitaire : Java
occupation d’une niche spécifique : Prolog
difficulté du changement
inertie
Langages et paradigmes
13/318
Introduction
Catégories de langages
Catégories
Catégories de langages de programmation
I Comment les définir
Les catégories ont des limites floues. On ne
s’intéressera de toutes manières ici qu’aux « vrais »
langages de programmation, en excluant les langages
d’assemblage, les macro-processeurs, etc.
Langages et paradigmes
14/318
Introduction
Catégories de langages
Catégories
Catégories de langages
I Langages « impératifs » ou procéduraux.
I
Modèle de von Neumann :
I
I
I
le calcul est décrit par les changements d’état des variables
Fortran, Algol, Pascal, Basic, C, Ada, Icon, etc.
c’est le modèle le plus répandu, en particulier parce qu’il est
conforme à la structure des ordinateurs.
Langages et paradigmes
15/318
Introduction
Catégories de langages
Catégories
Catégories de langages
I Modèle par objets :
I
I
I
I
variante ou spécialisation du modèle de von Neumann
le calcul est décrit par les interactions entre objets
Simula 67, Smalltalk, Eiffel, C++ , Java, etc.
c’est le modèle le plus à la mode.
Langages et paradigmes
16/318
Introduction
Catégories de langages
Catégories
Catégories de langages
I Langages déclaratifs
I
Modèle fonctionnel :
I
I
I
I
fondé sur le lambda-calcul : un programme est une fonction qui
fournit un résultat à partir d’arguments
Lisp, Scheme, ML, etc.
c’est le modèle préféré des mathématiciens.
Modèle par flot de données :
I
I
I
le calcul se fait par les données qui traversent des nœuds
fonctionnels
Id, Val, Sisal
modèle d’importance actuelle marginale.
Langages et paradigmes
17/318
Introduction
Catégories de langages
Catégories
Catégories de langages
I Modèle logique :
I
I
I
I
le calcul est la tentative de trouver des données qui satisfont des
équations logiques
Prolog presque uniquement
les tableurs ordinaires peuvent se rattacher à ce modèle
modèle résistant dans sa niche.
En fait, la plupart des langages fonctionnels incluent des mécanismes
procéduraux, et on peut programmer de manière fonctionnelle dans la
plupart des langages procéduraux.
Langages et paradigmes
18/318
Introduction
Catégories de langages
Pourquoi étudier les langages ?
Pourquoi étudier les langages de programmation ?
I Quelques raisons fondamentales :
I
I
I
I
I
position centrale dans l’informatique professionnelle
permettre de choisir le langage le plus approprié au problème
faciliter l’apprentissage de nouveaux langages
découvrir les mécanismes et principes sous-jacents
améliorer votre esprit critique
Langages et paradigmes
19/318
Introduction
Catégories de langages
Pourquoi étudier les langages ?
Pourquoi étudier
I Comprendre les décisions de conception et d’implémentation
pour mieux utiliser les langages :
I
I
Comprendre les caractéristiques obscures : on peut les ramener
aux grands principes si on les connaît.
Choisir parmi les différentes manières de faire la même chose, en
particulier en tenant compte des coûts :
I
I
I
I
Langages et paradigmes
passage par valeur de variables encombrantes
passage par nom
utilisation d’astuces pour améliorer les performances
évaluation des compromis entre encombrement et rapidité
20/318
Introduction
Catégories de langages
Pourquoi étudier les langages ?
Pourquoi étudier
I Simuler des caractéristiques manquantes :
I
I
I
I
programmation structurée par discipline et commentaires
conventions de nommage pour imiter la modularité
simulation des générateurs à l’aide de fonctions et de variables
statiques
simulation de la récursivité
Langages et paradigmes
21/318
Introduction
Catégories de langages
Pourquoi étudier les langages ?
Pourquoi étudier
I Appliquer les connaissances acquises à d’autres situations
similaires :
I
I
I
I
I
langages de commande, shells
générateurs de rapports
outils programmables (Emacs)
fichiers de configuration et options de commandes
langages de description (HTML, XML)
Langages et paradigmes
22/318
Introduction
Catégories de langages
Formalismes de définition des langages
Formalismes de définition
I Aspects lexicaux :
I
I
I
en général non séparés de la syntaxe
distinction entre symboles et représentation en Algol 60 et Algol
68
pas de formalisme spécifique
I Aspects syntaxiques :
I
I
I
forme normale de Backus à partir d’Algol 60
notation originale mais sans descendance pour Cobol
extensions variées à BNF, sans uniformisation
Langages et paradigmes
23/318
Introduction
Catégories de langages
Formalismes de définition des langages
Formalismes
I Aspects sémantiques :
I
I
I
I
I
I
I
I
utilisation de la langue naturelle la plus fréquente
expression stéréotypée dans les documents de normalisation
Vienna Definition Language pour PL/I
grammaires de van Wijngaarden (grammaires à deux niveaux)
pour Algol 68 (effet néfaste)
définition axiomatique pour Pascal
Vienna Definition Method pour Modula-2
à part Algol 68, la formalisation apparaît tardivement
peu d’influence sur la définition du langage
Langages et paradigmes
24/318
Introduction
Normalisation des langages
Organismes de normalisation
Normalisation des langages
I Organismes de normalisation
I
Organismes nationaux :
I
I
I
I
AFNOR en France
DIN en Allemagne
BSI au Royaume-Uni
ANSI et FBS aux États-Unis
Langages et paradigmes
25/318
Introduction
Normalisation des langages
Organismes de normalisation
Organismes
I Organismes influents :
I
I
IEEE aux États-Unis
Grandes associations (ACM)
I Organismes internationaux :
I
I
I
ISO
CCITT
IFIP
Langages et paradigmes
26/318
Introduction
Normalisation des langages
Rôles de la normalisation
Rôles de la normalisation
I rassembler des définitions divergentes
I clarifier la définition
I faire évoluer le langage
I définir un nouveau langage
I clairement ces buts sont contradictoires
Langages et paradigmes
27/318
Introduction
Normalisation des langages
Difficultés de la normalisation
Difficultés de la normalisation
I lourdeur générale des mécanismes
I intérêts contradictoires des participants
I non-représentativité des participants
I conflits entre précision et clarté
I trop grande lenteur
Langages et paradigmes
28/318
Introduction
Normalisation des langages
Quelques exemples de normalisations
Quelques exemples de normalisations
I Fortran
I
I
I
le premier exemple de normalisation de langage de
programmation
seul moyen d’évolution du langage après Fortran IV
dominante : conserver la compatibilité avec les programmes
existants
I PL/I
I
I
normalisation inutile
simple officialisation de la définition du langage par IBM
Langages et paradigmes
29/318
Introduction
Normalisation des langages
Quelques exemples de normalisations
Exemples
I Algol 68 : la norme ISO est un pointeur sur le document de l’IFIP
I Pascal
I
I
I
I
I
première normalisation d’un langage n’émanant pas d’une
puissance économique
conflit entre l’ISO et l’ANSI
tentative de ne faire que clarifier
deux extensions indispensables
ensuite, définition d’un nouveau langage
Langages et paradigmes
30/318
Introduction
Normalisation des langages
Quelques exemples de normalisations
Exemples
I C
I
I
I
une grande partie du document sert à préciser ce qui n’est pas
précisé
l’important est de ne pas invalider les compilateurs des fabricants
de logiciel représentés dans le comité
travail interne à l’ANSI
Langages et paradigmes
31/318
Introduction
Normalisation des langages
Quelques exemples de normalisations
Exemples
I Modula-2
I
I
I
travail similaire à celui pour Pascal : propre à l’ISO, pas
d’intervention de l’auteur du langage
choix malheureux de VDM comme formalisme
norme ayant « tué » le langage
Langages et paradigmes
32/318
Introduction
Tableau généalogique
Commentaires sur le tableau
Tableau généalogique
I Commentaires sur le tableau
I
I
I
I
I
dates approximatives
filiations schématiques et parfois discutables
choix de langages supposés représentatifs : les plus importants
devraient être présents
certains langages très anciens sont encore très utilisés : Cobol,
Lisp
certains langages ne font plus parler d’eux, mais sont utilisés par
des communautés fidèles : APL, Simula 67, Snobol4, Algol 68
Langages et paradigmes
33/318
Introduction
Tableau généalogique
Commentaires sur le tableau
Généalogie
I certains langages sont mentionnés mais n’ont pas d’utilisation
importante
I parmi les implémentations libres ou gratuites :
I
I
FSF : C, C++ , Fortran 77, Pascal, Ada 95, Prolog, Java, Eiffel,
Cobol (en cours) : suite de compilation avec langage intermédiaire
unique
autres : Oberon, Scheme, Snobol4, Icon, Perl, APL, etc.
Langages et paradigmes
34/318
Introduction
Tableau généalogique
Quelques mots sur quelques langages
Quelques mots sur quelques langages
I Fortran : « traducteur de formules » plus efficace qu’un bon
programmeur (Backus, IBM)
I Algol 60 : langage d’expression des algorithmes pour la
communauté scientifique (universitaires européens et
américains, Backus, Naur, McCarthy, Bauer, Rutishauser,
Woodger, Perlis, Vauquois, etc.)
I Cobol : la langue américaine pour dire ce qui doit être fait dans
les affaires (Codasyl, IBM)
I Lisp :
λ-calcul, auto-définition, traitement de listes (McCarthy,
MIT)
Langages et paradigmes
35/318
Introduction
Tableau généalogique
Quelques mots sur quelques langages
Quelques langages
I APL : tout s’exprime par combinaison d’opérateurs et
élargissement aux tableaux (Iverson)
I PL/I : applications numériques et commerciales dans le même
langage, « tout marche » (IBM)
I Algol 68 : groupe WG 2.1 de l’IFIP, principes de base poussés au
paroxysme (van Wijngaarden)
I Snobol4 : modèle de Markov, traitement de chaînes de
caractères (Griswold, Bell Labs)
I Pascal : contre Algol 68, simple, systématique, fait pour
enseigner les bases de la programmation (Wirth)
Langages et paradigmes
36/318
Introduction
Tableau généalogique
Quelques mots sur quelques langages
Quelques langages
I C : programmation de bas niveau la plus concise possible, pas
d’avenir prévu (Ritchie, Bell Labs)
I Prolog : moteur d’évaluation d’équations logiques, pris comme
emblème du projet d’ordinateurs de 5e génération (Colmerauer et
Roussel)
I Ada : appel d’offres du Ministère de la Défense américain,
évaluation internationale (Ichbiah)
I Java : projet initial sans avenir, marketing et publicité pour contrer
Microsoft (Gosling, Sun)
Langages et paradigmes
37/318
Téléchargement