Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Les solutions libres pour les systèmes embarquésAlexandre LAHAYE
Les solutions libres ont longtemps été ignorées par l'industrie en raison des divergences entre les contraintes industrielles strictes et les pratiques du développement libre. Par ailleurs, plusieurs reproches étaient formulés contre les logiciels libres : manque de fonctionnalités clés (ex. : temps réel dur), manque de garanties et coûts de support, gestion des licences...Cela a pris des années, mais c'est maintenant acquis et parfaitement connu des acteurs majeurs de l'industrie.
Les mathématiques appliquées et le calcul scientifique jouent un rôle croissant comme outils non évitables pour l’élaboration de recherches scientifiques et dans la conception de processus industriels. Le calcul scientifique reste pour toujours l’étape première de la voie du développement culturel et technique d’un pays donné.
Par ailleurs, le niveau de complexité des systèmes, généralement manipulés par les êtres humains que nous sommes, est très élevé à un niveau où toute avancée intellectuelle engendrera des retombés au niveau industriel tant que tous les processus de l’économie en dépendent.
En contre partie, la majorité des produits technologiques sont juste la solution immédiate de bon nombre de résolutions de requête de la vie courante. L'avènement de l'informatique et de ses produits, les langages de programmation de tout bord, de l'Internet et des télécommunications, à chacun ses infrastructures et ses protocoles, a révolutionné les méthodologies de travail des équipes et laboratoires de recherches. Les langages de développement informatique des outils et suites logiciels sont d’un grand secours aux travaux de modélisation et de simulation des processus.
Les mathématiques appliquées et l'informatique sont les moyens de conception (Modélisation et Simulation), plus encore, ils sont les vecteurs qui ont provoqué une amélioration nette dans les pratiques de tous les jours et aussi dans la vitesse de mise en œuvre de moyens exploitables.
Les langage de programmation, comme le C/C++, le FORTRAN ou le Python ont joué un grand rôle dans le cours de développement de beaucoup de procédés (Modélisation) et ont facilité la compréhension de beaucoup phénomènes (Simulation).
C'est le premier chapitre du cours en C++ de la programmation procédurale à la POO.
Partie 1: La Programmation Procédurale.
Partie 2: La Programmation Orientée Objet.
Partie 3: Les Exceptions, Entrées/Sorties, Structures, Unions, Énumérations…
Partie 4: Les interfaces Graphiques avec Qt.
C'est la version 2019 du chapitre 1 sur C++:
https://fr.slideshare.net/AzizDarouichi/chap1-cours-en-c
Si vous avez des remarques ou des suggestions afin d'améliorer ce support du cours merci de me contacter via pr.azizdarouichi@gmail.com
Bonne lecture
Cours en C++ de la programmation procédurale à la POO.
Partie 1: La Programmation Procédurale.
Partie 2: La Programmation Orientée Objet.
Partie 3: Les Exceptions, Entrées/Sorties, Structures, Unions, Énumérations…
Partie 4: Les interfaces Graphiques avec Qt.
Si vous avez des remarques ou des suggestions afin d'améliorer ce support du cours merci de me contacter via pr.azizdarouichi@gmail.com
Les solutions libres pour les systèmes embarquésAlexandre LAHAYE
Les solutions libres ont longtemps été ignorées par l'industrie en raison des divergences entre les contraintes industrielles strictes et les pratiques du développement libre. Par ailleurs, plusieurs reproches étaient formulés contre les logiciels libres : manque de fonctionnalités clés (ex. : temps réel dur), manque de garanties et coûts de support, gestion des licences...Cela a pris des années, mais c'est maintenant acquis et parfaitement connu des acteurs majeurs de l'industrie.
Les mathématiques appliquées et le calcul scientifique jouent un rôle croissant comme outils non évitables pour l’élaboration de recherches scientifiques et dans la conception de processus industriels. Le calcul scientifique reste pour toujours l’étape première de la voie du développement culturel et technique d’un pays donné.
Par ailleurs, le niveau de complexité des systèmes, généralement manipulés par les êtres humains que nous sommes, est très élevé à un niveau où toute avancée intellectuelle engendrera des retombés au niveau industriel tant que tous les processus de l’économie en dépendent.
En contre partie, la majorité des produits technologiques sont juste la solution immédiate de bon nombre de résolutions de requête de la vie courante. L'avènement de l'informatique et de ses produits, les langages de programmation de tout bord, de l'Internet et des télécommunications, à chacun ses infrastructures et ses protocoles, a révolutionné les méthodologies de travail des équipes et laboratoires de recherches. Les langages de développement informatique des outils et suites logiciels sont d’un grand secours aux travaux de modélisation et de simulation des processus.
Les mathématiques appliquées et l'informatique sont les moyens de conception (Modélisation et Simulation), plus encore, ils sont les vecteurs qui ont provoqué une amélioration nette dans les pratiques de tous les jours et aussi dans la vitesse de mise en œuvre de moyens exploitables.
Les langage de programmation, comme le C/C++, le FORTRAN ou le Python ont joué un grand rôle dans le cours de développement de beaucoup de procédés (Modélisation) et ont facilité la compréhension de beaucoup phénomènes (Simulation).
C'est le premier chapitre du cours en C++ de la programmation procédurale à la POO.
Partie 1: La Programmation Procédurale.
Partie 2: La Programmation Orientée Objet.
Partie 3: Les Exceptions, Entrées/Sorties, Structures, Unions, Énumérations…
Partie 4: Les interfaces Graphiques avec Qt.
C'est la version 2019 du chapitre 1 sur C++:
https://fr.slideshare.net/AzizDarouichi/chap1-cours-en-c
Si vous avez des remarques ou des suggestions afin d'améliorer ce support du cours merci de me contacter via pr.azizdarouichi@gmail.com
Bonne lecture
Cours en C++ de la programmation procédurale à la POO.
Partie 1: La Programmation Procédurale.
Partie 2: La Programmation Orientée Objet.
Partie 3: Les Exceptions, Entrées/Sorties, Structures, Unions, Énumérations…
Partie 4: Les interfaces Graphiques avec Qt.
Si vous avez des remarques ou des suggestions afin d'améliorer ce support du cours merci de me contacter via pr.azizdarouichi@gmail.com
Toute machine capable de manipuler des informations binaires peut être qualifiée d'ordinateur.
Le type d'ordinateur le plus présent sur le marché est le PC (Ordinateur personnel), toutefois il existe d'autres types d'ordinateurs (n'étant pas des PC).
Pour effectuer une tâche, quelle qu’elle soit, un ordinateur a besoin d’un programme informatique.
Or, pour fonctionner, un programme informatique doit indiquer à l’ordinateur ce qu’il doit faire avec précision étape par étape.
L’ordinateur exécute ensuite le programme, en suivant chaque étape de façon automatique pour atteindre l’objectif.
Or, il faut aussi dire à l’ordinateur comment faire ce qu’il doit faire. C’est le rôle de l’algorithme informatique.
Un algorithme est composé de trois (3) parties principales :
L’entête : Cette partie sert à donner un nom à l’algorithme. Elle est précédée par le mot algorithme, ce nom n’influe en rien le bon déroulement de l’algorithme. En général, il faut donner des noms qui permettent au lecteur d’avoir une idée de ce que fera l’algorithme qu’il lira.
La partie déclarative : Dans cette partie, on déclare les différents objets que l’algorithme utilise (constantes, variables, etc.)
Le corps de l’algorithme : Il est composé d’une séquence d'actions faisant appel à des opérations de base de l'ordinateur. Il est délimité par les mots DÉBUT et FIN.
Compilateur :
Traduit une fois pour toutes, les programmes dans leur ensemble :tout le programme est fourni au compilateur pour la traduction et son résultat sera un nouveau fichier autonome, c'est-à-dire qui n'aura plus besoin d’un programme autre que lui pour s'exécuter; on dit d'ailleurs que ce fichier est exécutable peut être soumis au processeur pour traitement.
Un langage de programmation pour lequel un compilateur est disponible est appelé un langage compilé.
L’algorithmique est la science des algorithmes. Elle s’intéresse à l’art de construire des algorithmes ainsi qu’à déterminer leur validité, leur robustesse, leur réutilisabilité, leur complexité ou leur efficacité.
L’algorithmique permet ainsi de passer d’un problème à résoudre à un algorithme qui décrit la démarche de résolution du problème.
Par conséquent, la programmation consiste à traduire un algorithme dans un langage « compréhensible » par l’ordinateur afin qu’il puisse être exécuté automatiquement.
Ce fichier objet n’est pas exécutable tel quel car il lui manque les instructions exécutables des fonctions standards appelées dans le fichier source (printf, scanf, …) et éventuellement d’autres fichiers objets
Comme des millions de développeurs, vous utilisez C# quotidiennement … mais en maitrisez-vous les subtilités ? Cette session ludique vous plongera au cœur de votre langage de prédilection au travers programmes et exemples de code qui ne cesseront de vous surprendre. Avec en prime quelques (petits) lots à gagner pour les développeurs les plus perspicaces !
Démarrer rapidement avec Apache Flink par Bilal Baltagi
- Présentation de l'éco Système Apache Flink
- Prise en main rapide
Bilal Baltagi a obtenu un master en analyse des données à l'Université Paris Nord - Paris 13. Il est actuellement consultant décisionnel chez Sarenza à Paris. Il intervient sur toutes les phases d'un projet décisionnel et Big data: recueil des besoins, conceptions, réalisations et accompagnement des utilisateurs. Bilal est de plus en plus intéressé à l'intersection de la Big Data avec la Business Intelligence et aime jouer avec Apache Flink!
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Databricks
TensorFrames: Spark + TensorFlow: Since the creation of Apache Spark, I/O throughput has increased at a faster pace than processing speed. In a lot of big data applications, the bottleneck is increasingly the CPU. With the release of Apache Spark 2.0 and Project Tungsten, Spark runs a number of control operations close to the metal. At the same time, there has been a surge of interest in using GPUs (the Graphics Processing Units of video cards) for general purpose applications, and a number of frameworks have been proposed to do numerical computations on GPUs.In this talk, we will discuss how to combine Apache Spark with TensorFlow, a new framework from Google that provides building blocks for Machine Learning computations on GPUs. Through a binding between Spark and TensorFlow called TensorFrames, distributed numerical transforms on Spark DataFrames and Datasets can be expressed in a high-level language and still rely on highly optimized implementations.The developers of the TensorFrames package will provide an overview, a live demo on Databricks and a presentation of the future plans. For experts, this talk will also include some technical details on design decisions, the current implementation, and ongoing work on speed and performance optimizations for numerical applications.
Dans cet exposé, on présentera OMicroB, une machine virtuelle OCaml pour microcontrôleurs à faibles ressources, inspirée des travaux précédents sur le projet OCaPIC. Cette machine virtuelle, destinée à être exécutée sur diverses architectures matérielles (AVR, PIC, ARM, ...) permet ainsi de factoriser le développement d’applications, mais aussi de généraliser l’analyse et le débogage du bytecode associé, tout en permettant un usage précautionneux de la mémoire. On cible alors des programmes ludiques ou de domotiques destinés à être exécutés sur des microcontrôleurs à faibles ressources, en insistant sur les particularités inhérentes à la programmation de systèmes embarqués.
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULgRomain Boman
Cette présentation a été faite aux "Geeks Anonymes" de l'Université de Liège le 17 juin 2016.
J'y présente les techniques de développement de logiciels vers lesquelles notre groupe de recherche a convergé après 20 ans de pratique. En particulier, je détaille les compromis qui ont dû être trouvés pour aider les thésards et ingénieurs de recherche peu à l'aise avec l'informatique.
Groupe des Geeks Anonymes de l'ULg: https://www.linkedin.com/grp/home?gid=8279308
Outils de construction pour la rechercheJohan Moreau
Le but de cette présentation est de découvrir les outils de construction d’applications dans le contexte d’un laboratoire de recherche : autoconf, cmake, scons
De l’automatisation des tâches à la transformation numérique : un regard rétr...Saïd Assar
Dans le cadre des webinaires « Beyond your PhD » proposés par le IS Lab (https://www.linkedin.com/showcase/is-lab-imt-bs/), cette 5e édition est un exposé de Saïd Assar sur l'historique de l'informatique et une rétrospective de la discipline des Systèmes d'Information.
Théorie des langages - TP - WellKnownTextYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 04 Théorie des langagesYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
More Related Content
Similar to Théorie des langages - 00 - Introduction
Toute machine capable de manipuler des informations binaires peut être qualifiée d'ordinateur.
Le type d'ordinateur le plus présent sur le marché est le PC (Ordinateur personnel), toutefois il existe d'autres types d'ordinateurs (n'étant pas des PC).
Pour effectuer une tâche, quelle qu’elle soit, un ordinateur a besoin d’un programme informatique.
Or, pour fonctionner, un programme informatique doit indiquer à l’ordinateur ce qu’il doit faire avec précision étape par étape.
L’ordinateur exécute ensuite le programme, en suivant chaque étape de façon automatique pour atteindre l’objectif.
Or, il faut aussi dire à l’ordinateur comment faire ce qu’il doit faire. C’est le rôle de l’algorithme informatique.
Un algorithme est composé de trois (3) parties principales :
L’entête : Cette partie sert à donner un nom à l’algorithme. Elle est précédée par le mot algorithme, ce nom n’influe en rien le bon déroulement de l’algorithme. En général, il faut donner des noms qui permettent au lecteur d’avoir une idée de ce que fera l’algorithme qu’il lira.
La partie déclarative : Dans cette partie, on déclare les différents objets que l’algorithme utilise (constantes, variables, etc.)
Le corps de l’algorithme : Il est composé d’une séquence d'actions faisant appel à des opérations de base de l'ordinateur. Il est délimité par les mots DÉBUT et FIN.
Compilateur :
Traduit une fois pour toutes, les programmes dans leur ensemble :tout le programme est fourni au compilateur pour la traduction et son résultat sera un nouveau fichier autonome, c'est-à-dire qui n'aura plus besoin d’un programme autre que lui pour s'exécuter; on dit d'ailleurs que ce fichier est exécutable peut être soumis au processeur pour traitement.
Un langage de programmation pour lequel un compilateur est disponible est appelé un langage compilé.
L’algorithmique est la science des algorithmes. Elle s’intéresse à l’art de construire des algorithmes ainsi qu’à déterminer leur validité, leur robustesse, leur réutilisabilité, leur complexité ou leur efficacité.
L’algorithmique permet ainsi de passer d’un problème à résoudre à un algorithme qui décrit la démarche de résolution du problème.
Par conséquent, la programmation consiste à traduire un algorithme dans un langage « compréhensible » par l’ordinateur afin qu’il puisse être exécuté automatiquement.
Ce fichier objet n’est pas exécutable tel quel car il lui manque les instructions exécutables des fonctions standards appelées dans le fichier source (printf, scanf, …) et éventuellement d’autres fichiers objets
Comme des millions de développeurs, vous utilisez C# quotidiennement … mais en maitrisez-vous les subtilités ? Cette session ludique vous plongera au cœur de votre langage de prédilection au travers programmes et exemples de code qui ne cesseront de vous surprendre. Avec en prime quelques (petits) lots à gagner pour les développeurs les plus perspicaces !
Démarrer rapidement avec Apache Flink par Bilal Baltagi
- Présentation de l'éco Système Apache Flink
- Prise en main rapide
Bilal Baltagi a obtenu un master en analyse des données à l'Université Paris Nord - Paris 13. Il est actuellement consultant décisionnel chez Sarenza à Paris. Il intervient sur toutes les phases d'un projet décisionnel et Big data: recueil des besoins, conceptions, réalisations et accompagnement des utilisateurs. Bilal est de plus en plus intéressé à l'intersection de la Big Data avec la Business Intelligence et aime jouer avec Apache Flink!
Deep Learning on Apache Spark: TensorFrames & Deep Learning Pipelines Databricks
TensorFrames: Spark + TensorFlow: Since the creation of Apache Spark, I/O throughput has increased at a faster pace than processing speed. In a lot of big data applications, the bottleneck is increasingly the CPU. With the release of Apache Spark 2.0 and Project Tungsten, Spark runs a number of control operations close to the metal. At the same time, there has been a surge of interest in using GPUs (the Graphics Processing Units of video cards) for general purpose applications, and a number of frameworks have been proposed to do numerical computations on GPUs.In this talk, we will discuss how to combine Apache Spark with TensorFlow, a new framework from Google that provides building blocks for Machine Learning computations on GPUs. Through a binding between Spark and TensorFlow called TensorFrames, distributed numerical transforms on Spark DataFrames and Datasets can be expressed in a high-level language and still rely on highly optimized implementations.The developers of the TensorFrames package will provide an overview, a live demo on Databricks and a presentation of the future plans. For experts, this talk will also include some technical details on design decisions, the current implementation, and ongoing work on speed and performance optimizations for numerical applications.
Dans cet exposé, on présentera OMicroB, une machine virtuelle OCaml pour microcontrôleurs à faibles ressources, inspirée des travaux précédents sur le projet OCaPIC. Cette machine virtuelle, destinée à être exécutée sur diverses architectures matérielles (AVR, PIC, ARM, ...) permet ainsi de factoriser le développement d’applications, mais aussi de généraliser l’analyse et le débogage du bytecode associé, tout en permettant un usage précautionneux de la mémoire. On cible alors des programmes ludiques ou de domotiques destinés à être exécutés sur des microcontrôleurs à faibles ressources, en insistant sur les particularités inhérentes à la programmation de systèmes embarqués.
Développer des codes de simulation numérique avec une équipe "non geek" à l'ULgRomain Boman
Cette présentation a été faite aux "Geeks Anonymes" de l'Université de Liège le 17 juin 2016.
J'y présente les techniques de développement de logiciels vers lesquelles notre groupe de recherche a convergé après 20 ans de pratique. En particulier, je détaille les compromis qui ont dû être trouvés pour aider les thésards et ingénieurs de recherche peu à l'aise avec l'informatique.
Groupe des Geeks Anonymes de l'ULg: https://www.linkedin.com/grp/home?gid=8279308
Outils de construction pour la rechercheJohan Moreau
Le but de cette présentation est de découvrir les outils de construction d’applications dans le contexte d’un laboratoire de recherche : autoconf, cmake, scons
De l’automatisation des tâches à la transformation numérique : un regard rétr...Saïd Assar
Dans le cadre des webinaires « Beyond your PhD » proposés par le IS Lab (https://www.linkedin.com/showcase/is-lab-imt-bs/), cette 5e édition est un exposé de Saïd Assar sur l'historique de l'informatique et une rétrospective de la discipline des Systèmes d'Information.
Similar to Théorie des langages - 00 - Introduction (20)
Théorie des langages - TP - WellKnownTextYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 04 Théorie des langagesYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 03 - Principes et paradigmesYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Théorie des langages - 01.1 - Parcours d'arbresYann Caron
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Cours de théorie des langages, théorie de la compilation, techniques de compilations et paradigmes de programmation que je dispense aux Ingé 2 et 3 à l’École National des Sciences Géographiques de Paris.
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Voici mon cours de programmation de jeux vidéo pour les Kids.
ALGEA est une plateforme innovante d'apprentissage pour les enfants et leurs parents à travers la programmation de jeux vidéos.
Retrouvez tous l'atelier sur mon GitHub :
https://github.com/YannCaron/Devoxx4Kids-algea
Et sur www.algoid.net
Programmation Android - Tp2 Travaux pratiques - GeomatiqueYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Programmation Android - 09 - Web servicesYann Caron
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
Voici le cours sur android que j'enseigne à l'ENSG
Retrouvez tous le cours et le TP sur GitHub :
https://github.com/YannCaron/Android-ENSG
Si vous avez des besoin en formation, n'hésitez pas à me contacter : CyaNn (at) gmail (dot) com
5. Compilateur - définition
Programme qui transforme un code source
(langage source) dans un langage cible
Ex : binaire ou C++ vers du C
5/39
void main()
{
printf(“hi”);
}
void main()
{
printf(“hi”);
}
01001011001
11001011010
11011100101
00011100111
01001011001
11001011010
11011100101
00011100111
hi.c hi.o
6. Interpréteur - définition
Programme qui transforme un code source
(langage source) en un résultat
6/39
void main()
{
alert(“hi”);
}
void main()
{
alert(“hi”);
}
hi.js
programme{
”data1” : “v1“,
“data2” : “v2“
}
{
”data1” : “v1“,
“data2” : “v2“
}
data
9. Philosophie
✔ pas de meilleurs langages que d’autres
✔ des langages pour des besoins différents
✔ script
✔ pour : rapide, simple efficace
✔ contre : librairies, bugs difficiles à
identifier
✔ compilés
✔ pour : langages sûr, correction à la
compilation
✔ contre : verbeux, complexes, rigides
9/39
10. Par domaines
10/39
Domaine Fonctionnalités Langage
Scientifique Virgule flottante
Tableaux
Parallélisme
Fortran
Business Persistance
Génération de rapports
Analyse des données
SQL
Programmation
système
Contrôle des ressources
Temps réel
C / C++
11. Compilation ? Pourquoi ?
✔ Challenge intellectuel
✔ Paradigmes
✔ Algorithmes
✔ Compréhension en profondeur des
langages
✔ Économiques ex : Oracle vs Microsoft
✔ Besoin de configuration avancé ! (exemple
projet Stars)
✔ Domain Specific Languages
11/39
13. Nouveau mais !
✔ Les nouveaux langages créés tendent à
ressembler aux anciens
✔ Exemple : C++ - Java – C#
✔ TypeScript, JavaScript – Algoid
✔ Parce que l’apprentissage d’un nouveau
langage coûte cher
✔ en regard à ce qu’il apporte comme
nouveautés
13/39
15. Introduction
✔ La discipline informatique a pré-existée
aux ordinateurs
✔ Alonzo Church, Alan Turing, Stephen
Kleene et Kurt Gödel participent à cette
recherche :
✔ Thèse de Church-Turing qui définit un
modèle “physique” de calculabilité
✔ Ils définissent ce qu’est un algorithme
(ensemble fini d’instructions simples)
✔ Les Lambda-Calcul et les fonctions
récursives
15/39
16. Avant 1940
✔ Ada Lovelace
✔ Augusta Ada king, comtesse de Lovelace
✔ Traduit le mémoire du mathématicien Luigi
Menabrea sur la machine analytique, la
première machine proposé par Charles
Babbage
✔ Premiers programme et premier algorithme
écrit
✔ Langage Ada nommé en son honneur
16/39
Ada Lovelace
1815 - 1852
Charles Baddage
1791 - 1871
17. 1940
✔ Premières machines électromécaniques
✔ La Bombe de Turing en Angleterre
✔ ENIAC, Armée américaine, lié à la bombe
nucléaire)
✔ Premiers ordinateurs électroniques à
lampe (EDSAC / IAS / EDVAC)
✔ Principalement programmés en langage
machine
✔ Ou en assembleur
✔ Plankalkül – premier langage de haut
niveau
17/39
18. Alan Michael Turing
✔ Mathématicien Cryptologue
✔ Inventeur du premier ordinateur
✔ Débat sur l’intelligence artificielle :
test de Turing
✔ Inventeur du concept de programmation et
de programme
✔ Film à voir : Imitation Game
18/39
Alan Michael
Turing
1912 - 1954
19. Alan Michael Turing
✔ Casse le code Enigma des Nazis durant la
2em
guerre mondiale
✔ Les historiens estiment qu’il a écourté la
guerre de 2 ans
✔ Se suicide parce qu’accusé
d’homosexualité en mangeant
partiellement une pomme empoisonnée au
cyanure (logo apple ?)
✔ Gracié, puis reconnu héros de guerre 55
ans après son décès
19/39
20. Alan Michael Turing
✔ La bombe (1938, électromécanique)
✔ Testait automatiquement les codes
d'Enigma
✔ Bletchley Park - RU
20/39
21. 1950 - 1960
✔ FORTRAN (FORmula TRANslator) - John
Backus
✔ LISP (LISt Processor) spécialisé dans le
traitement des listes – John McCarthy
Premier langage fonctionnel basé sur le
lambda calcul
✔ COBOL (Common Business Oriented
Language) – Grace Hopper
21/39
John Backus
1924 - 2007
John McCarthy
1927 - 2011
Grace Hopper
1906 - 1984
22. Algol
✔ ALGOL (ALGorithmic Oriented
Language) – John Backus et Peter Naurr
✔ Apporte la notion de portées (encapsulé)
et de bloc de code
✔ Création du méta langage BNF (Forme de
Backus-Naurr) dont un dérivé (EBNF) sert
aujourd’hui encore à la description des
langages modernes (du moins la partie
context free)
22/39
Peter Naurr
1928 - 2016
23. 1967 - 1978
✔ Mise en place des paradigmes
fondamentaux
✔ Simula 67 – premier langage
Orienté Objet
✔ C – premier langage système
✔ Smalltalk – premier IDE graphique (Objet et
Fonctionnel, UI Fenêtrés) – Alan Key
✔ Prolog – premier langage Logique
✔ ML – pose les bases de la programmation
fonctionnelle, typage statique et
polymorphique (basé sur Lisp) 23/39
Alan Key
1940
24. 1980
✔ Normalisation et recherche de
performance
✔ Ada, Eiffel, Perl
✔ C++ - langage système et OO – Bjarn
Stroustrup
✔ FP – Functional Programming - John
Backus
24/39
Bjarne Stroustrup
1950
25. 1990
✔ Les langages se tournent vers internet
✔ Python – Guido van Rossum
✔ Ruby, Lua, JavaScript, PHP
✔ Mais aussi : Haskell
✔ Java – James Gosling
✔ C# - Hejlesberg (co-inventeur du Pascal)
25/39
Guido van Rossum
1956
James Gosling
1956
Anders Hejlesberg
1960
31. MOOCs
✔ Stanford Online - Automata - Jeffrey D.
Ullman
http://online.stanford.edu/course/automata-
theory-self-paced
✔ Stanford Online – Compilers – Alex Aiken
(langage COOL)
https://lagunita.stanford.edu/courses/Engin
eering/Compilers/Fall2014/about
31/39
Jeff Ullman - 1942 Alex Aiken
32. MOOCs
✔ Louvain – Paradigms of Computer
Programming (Langage Oz)
https://www.edx.org/course/paradigms-
computer-programming-louvainx-louv1-1x-2
✔ Princeton – Algorithms Part II – Robert
Sedgewick
https://www.coursera.org/learn/algorithms-
part2
32/39
Sedgewick - 1946Peter Van Roy
33. Acteurs
✔ Donald Knuth
✔ Tex → LaTex (Domain specific language)
✔ Parser LR
✔ Grammaire attribués (attributs de l'AST)
33/39
Donald Knuth
1938
36. Outils - compilateurs
✔ ASM – Générateur de bytecode JVM et
Dalvik – ex : Golo
✔ CECIL, ILasm – Générateur d'Intermediate
Language .net
✔ LLVM – VM C / C++
✔ Neko VM (bytecode de haut niveau)
36/39