Descriptif
Un ingénieur, quel que soit son domaine d'intervention, doit maîtriser les concepts sous-jacents aux langages de programmation, aux différences profondes entre les langages actuels, passés et futurs, ainsi que les différentes notions relatives au sens et à la correction des programmes. Cette culture informatique lui sera à l'évidence nécessaire s'il contribue à ou dirige des développements informatiques, mais elle le sera aussi lorsqu'il aura à évaluer des éléments logiciels, ou à participer à des prises de décisions stratégiques impliquant des choix en matière de logiciel.
Ce cours décrit les concepts fondamentaux des langages de programmation, en commençant par donner une perspective historique des langages, puis en donnant les outils permettant de décrire précisément le sens des programmes informatiques, partant de leur syntaxe jusqu'à leur sémantique, en passant par une revue des différentes techniques de mise en œuvre des interprètes et compilateurs.
Une part importante du cours sera consacrée à l'expérimentation : on utilisera en effet le langage OCaml pour mettre en œuvre différents aspects d'un langage de programmation, durant la première moitié du cours.
De par la perspective qu'il offre vis-à-vis de l'activité de programmation et des langages, ce cours s'adresse à tout élève désireux de prendre le recul nécessaire vis-à-vis de cette activité, quelle que soit la filière à laquelle il se destine (à dominante informatique ou non).
Objectifs pédagogiques
* Maîtriser les concepts essentiels des langages de programmation :
- portée, blocs
- structures de données, structures de contrôle
- mécanismes d'abstraction
* Comprendre et savoir mettre en œuvre :
- éléments de compilation (analyse lexicale, analyse syntaxique)
- sémantique opérationnelle, interprète, machine abstraite
- gestion automatique de la mémoire
* Savoir programmer en fonctionnel (OCaml)
* Savoir facilement aborder et utiliser un nouveau langage de programmation
Diplôme(s) concerné(s)
Parcours de rattachement
Format des notes
Numérique sur 20Littérale/grade européenPour les étudiants du diplôme Diplôme d'Ingénieur de l'Ecole Nationale Supérieure de Techniques Avancées
Vos modalités d'acquisition :
Exercices + projet
Le rattrapage est autorisé (Max entre les deux notes écrêté à une note seuil)- le rattrapage est obligatoire si :
- Note initiale < 6
- le rattrapage peut être demandé par l'étudiant si :
- 6 ≤ note initiale < 10
- Crédits ECTS acquis : 2.5 ECTS
- Scientifique acquis : 2.5
Le coefficient de l'UE est : 2
La note obtenue rentre dans le calcul de votre GPA.
L'UE est évaluée par les étudiants.
Programme détaillé
- Cours 1 & 2 : Présentation d'OCaml
- Cours 3 : Analyse lexicaleCours 4 : Analyse syntaxique
- Cours 5 : Sémantique dénotationnelle
- Cours 6 : Sémantique opérationnelle
- Cours 7 : Termes
- Cours 8 : Typage
- Cours 9 : Objets
- Cours 10 : Gestion de la mémoire
- Cours 11 : Lambda-calcul
- Cours 12 : Introduction à l'interprétation abstraite
- Cours 13 : Quelques subtilités de langages
- Cours 14 : Continuation du projet (3h TD)
- TD 1 & 2 : Pratique d'OCaml
- TD 3 : Analyse lexicale
- TD 4 : Analyse syntaxique
- TD 5: Sémantique dénotationnelle - interprète de PCF
- TD 6 : Sémantique opérationnelle - interprète de PCF
- TD 7 : Termes, substitutions, filtrage et unification
- TD 8 : Inférence de type de PCF
- TD 9 : Compilation en bytecode de PCF
- TD 10 : Compilation en bytecode de IMP
- TD 11 : Réalisation d'un GC pour IMP
- TD 12, 13, 14 : Projet