debut de glossaire
This commit is contained in:
parent
60b1491067
commit
9d22aa4bb4
|
@ -4,90 +4,91 @@ Présentation de l'art de programmer
|
||||||
Le processus d'abstraction
|
Le processus d'abstraction
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
Débuter en programmation n'est pas une chose aisée. Aujourd'hui, la tendance est au
|
Débuter en programmation n'est pas une chose aisée. Aujourd'hui, la tendance est au
|
||||||
"bas niveau". Souvent, on se jette dans le grand bain :
|
"bas niveau". Souvent, on se jette dans le grand bain :
|
||||||
|
|
||||||
- soit en s'approchant au maximum de la machine (admin système et réseau, noyau
|
- soit en s'approchant au maximum de la machine (admin système et réseau, noyau
|
||||||
linux, langage C)
|
linux, langage C)
|
||||||
|
|
||||||
- soit en faisant du dev web côté backend, ce qui ramène à une administration réseau
|
- soit en faisant du dev web côté backend, ce qui ramène à une administration réseau
|
||||||
de bas niveau (microservices, monde nodeJS/javascript, etc...)
|
de bas niveau (microservices, monde nodeJS/javascript, etc...)
|
||||||
|
|
||||||
Soit on suit un cursus scolaire traditionnel qui commence souvent par une
|
Soit on suit un cursus scolaire traditionnel qui commence souvent par une
|
||||||
explication du fonctionnement d'une machine abstraite de bas niveau, puis en
|
explication du fonctionnement d'une machine abstraite de bas niveau, puis en
|
||||||
allant de plus en plus haut, mais étant sous-entendu qu'il faut rester connecté au
|
allant de plus en plus haut, mais étant sous-entendu qu'il faut rester connecté au
|
||||||
bas niveau (comprendre comment ça se passe derrière la scène).
|
bas niveau (comprendre comment ça se passe derrière la scène).
|
||||||
|
|
||||||
Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus
|
Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus
|
||||||
rapidement en mettant les mains dans le cambouis, ce qui vrai bien sûr. Mais cela
|
rapidement en mettant les mains dans le cambouis, ce qui vrai bien sûr. Mais cela
|
||||||
sous-entend qu'un développeur doit rester le nez dans le guidon, ou au moins qu'il
|
sous-entend qu'un développeur doit rester le nez dans le guidon, ou au moins qu'il
|
||||||
se doit d'être un expert du système dans lequel il évolue (connaissance du système
|
se doit d'être un expert du système dans lequel il évolue (connaissance du système
|
||||||
d'exploitation, binding avec le C, du ramasse miette (garbage collector),
|
d'exploitation, binding avec le C, du ramasse miette (garbage collector),
|
||||||
interaction avec les différentes librairies, gestion et optimisation de la mémoire,
|
interaction avec les différentes librairies, gestion et optimisation de la mémoire,
|
||||||
architecture par microservices, threads...)
|
architecture par microservices, threads...)
|
||||||
|
|
||||||
L'approche algorithmique consiste en exactement le contraire : elle commence par se
|
L'approche algorithmique consiste en exactement le contraire : elle commence par se
|
||||||
placer du côté de l'esprit humain et de ses capacités de compréhension et
|
placer du côté de l'esprit humain et de ses capacités de compréhension et
|
||||||
d'abstraction.
|
d'abstraction.
|
||||||
|
|
||||||
Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective
|
Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective
|
||||||
des langages à partir des paradigmes de rationalisation de la penseée (modules,
|
des langages à partir des paradigmes de rationalisation de la penseée (modules,
|
||||||
objects, généricité, polymorphisme paramétrique...) et d'un outil de communication
|
objects, généricité, polymorphisme paramétrique...) et d'un outil de communication
|
||||||
avec la machine qu'on appelle compilateur (dont la description est en dehors de
|
avec la machine qu'on appelle compilateur (dont la description est en dehors de
|
||||||
l'objectif de ce cours).
|
l'objectif de ce cours).
|
||||||
|
|
||||||
La tendance générale de l'évolution des languages est de se libérer de ces
|
La tendance générale de l'évolution des languages est de se libérer de ces
|
||||||
contraintes de bas niveau, un peu comme en sciences physiques où les lois physiques
|
contraintes de bas niveau, un peu comme en sciences physiques où les lois physiques
|
||||||
dépendent de l'échelle d'en dessous (du niveau microscopique/quantique) mais qu'à
|
dépendent de l'échelle d'en dessous (du niveau microscopique/quantique) mais qu'à
|
||||||
l'échelle du dessus, on n'a pas affaire à des effets de bas niveau (pas d'effets
|
l'échelle du dessus, on n'a pas affaire à des effets de bas niveau (pas d'effets
|
||||||
quantiques à un niveau macroscopique en général). Ce processus d'évolution est vrai
|
quantiques à un niveau macroscopique en général). Ce processus d'évolution est vrai
|
||||||
aussi dans le monde de la technique informatique lui-même (modèle OSI, comment est
|
aussi dans le monde de la technique informatique lui-même (modèle OSI, comment est
|
||||||
construite une trame IP, indépendances de chaque couche (transport, payload) entre
|
construite une trame IP, indépendances de chaque couche (transport, payload) entre
|
||||||
elles). Même la tendance système est à la virtualisation qui accentue encore la
|
elles). Même la tendance système est à la virtualisation qui accentue encore la
|
||||||
tendance à s'affranchir du bas niveau (le niveau système), le séparer nettement du
|
tendance à s'affranchir du bas niveau (le niveau système), le séparer nettement du
|
||||||
haut niveau (le niveau applicatif).
|
haut niveau (le niveau applicatif).
|
||||||
|
|
||||||
Il apparaît régulièrement de nouveaux langages. Comment s'orienter ? Quel(s)
|
Il apparaît régulièrement de nouveaux langages. Comment s'orienter ? Quel(s)
|
||||||
langage(s) choisir pour un projet de développement ? Au delà de leurs disparités, la
|
langage(s) choisir pour un projet de développement ? Au delà de leurs disparités, la
|
||||||
conception et la genèse de chacun d'eux procèdent d'une motivation partagée : la
|
conception et la genèse de chacun d'eux procèdent d'une motivation partagée : la
|
||||||
volonté d'abstraire.
|
volonté d'abstraire.
|
||||||
|
|
||||||
- **s'abstraire de la machine** : un langage de programmation permet de
|
- **s'abstraire de la machine** : un langage de programmation permet de
|
||||||
négliger l'aspect *mécanique* de l'ordinateur. On oublie le modèle du
|
négliger l'aspect *mécanique* de l'ordinateur. On oublie le modèle du
|
||||||
microprocesseur, jusqu'au système d'exploitation sur lequel sera exécuté
|
microprocesseur, jusqu'au système d'exploitation sur lequel sera exécuté
|
||||||
le programme.
|
le programme.
|
||||||
|
|
||||||
- **abstraire les erreurs** : Il s'agit ici de garantir la sûreté d'exécution; un
|
- **abstraire les erreurs** : Il s'agit ici de garantir la sûreté d'exécution; un
|
||||||
programme ne doit pas se terminer brutalement ou devenir incohérent en cas d'erreur.
|
programme ne doit pas se terminer brutalement ou devenir incohérent en cas d'erreur.
|
||||||
Un des moyens pour y parvenir est le typage des programmes et la mise
|
Un des moyens pour y parvenir est le typage des programmes et la mise
|
||||||
en oeuvre d'un mécanisme d'exceptions.
|
en oeuvre d'un mécanisme d'exceptions.
|
||||||
|
|
||||||
- **abstraire le mode opératoire** : Il s'agit de choisir une représentation, un
|
- **abstraire le mode opératoire** : Il s'agit de choisir une représentation, un
|
||||||
paradigme d'implémentation qui est indépendant du domaine considéré (paradigme
|
paradigme d'implémentation qui est indépendant du domaine considéré (paradigme
|
||||||
objet, modulaire, générique, composants...)
|
objet, modulaire, générique, composants...)
|
||||||
|
|
||||||
- **abstraire les composants** : Les langages de programmation donnent la
|
- **abstraire les composants** : Les langages de programmation donnent la
|
||||||
possibilité de découper une application en différents composants logiciels, plus ou
|
possibilité de découper une application en différents composants logiciels, plus ou
|
||||||
moins indépendants et autonomes. La modularité permet une structuration de plus haut
|
moins indépendants et autonomes. La modularité permet une structuration de plus haut
|
||||||
niveau de l'ensemble d'une application complexe. Les langages à objets constituent
|
niveau de l'ensemble d'une application complexe. Les langages à objets constituent
|
||||||
une autre approche de la réutilisabilité permettant la réalisation très rapide de
|
une autre approche de la réutilisabilité permettant la réalisation très rapide de
|
||||||
prototypes.
|
prototypes.
|
||||||
|
|
||||||
Détails des niveaux d'abstraction par rapport à la machine
|
Description des niveaux d'abstraction par rapport à la machine
|
||||||
-----------------------------------------------------------
|
---------------------------------------------------------------
|
||||||
|
|
||||||
L'extrème déploiement des langages (plusieurs milliers de langages différents)
|
Les langages de haut niveau simplifient le travail du
|
||||||
est dû au succès de l'ordinateur.
|
programmeur là où les langages de bas niveau permettent de produire un code
|
||||||
|
plus efficace.
|
||||||
|
|
||||||
- **niveau 0** : le langage machine. Illisible, c'est une suite d'optcode.
|
- **niveau 0** : le langage machine. Illisible, c'est une suite d'optcode.
|
||||||
impossible de coder dans ce langage.
|
impossible de coder dans ce langage.
|
||||||
|
|
||||||
- **niveau 1** : langage d'assemblage. Il reste très dépendant de la machine
|
- **niveau 1** : langage d'assemblage. Il reste très dépendant de la machine
|
||||||
et aujourd'hui il est rare d'en faire, sauf si on code un bootloader par exemple,
|
et aujourd'hui il est rare d'en faire, sauf si on code un bootloader par exemple,
|
||||||
la gestion de l'accès à la mémoire est en réel (le mode protégé n'apparaît que après).
|
la gestion de l'accès à la mémoire est en réel (le mode protégé n'apparaît que après).
|
||||||
Il faut gérer les ressources,le langage est très optimisé mais presque impossible
|
Il faut gérer les ressources,le langage est très optimisé mais presque impossible
|
||||||
à maintenir et rendre générique. Aujourd'hui plus personne ne code en assembleur.
|
à maintenir et rendre générique. Aujourd'hui plus personne ne code en assembleur.
|
||||||
|
|
||||||
- **niveau 2** : langages dits de **bas niveau** : (exemple : le C, le C++)
|
- **niveau 2** : langages dits de **bas niveau** : (exemple : le C, le C++)
|
||||||
indépendance par rapport à la machine, grande structuration mais très verbeux
|
indépendance par rapport à la machine, grande structuration mais très verbeux
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
.. Algorithmique documentation master file, created by
|
|
||||||
sphinx-quickstart on Thu Mar 16 16:07:00 2017.
|
|
||||||
You can adapt this file completely to your liking, but it should at least
|
|
||||||
contain the root `toctree` directive.
|
|
||||||
|
|
||||||
Introduction à l'algorithmique
|
Introduction à l'algorithmique
|
||||||
================================
|
================================
|
||||||
|
|
||||||
|
@ -14,9 +9,10 @@ Contents:
|
||||||
fondement
|
fondement
|
||||||
langage
|
langage
|
||||||
modularite
|
modularite
|
||||||
|
machine
|
||||||
|
|
||||||
|
|
||||||
.. algorithmique
|
.. FIXME machine, algorithmique
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,74 @@ Importance de la lisibilité (notamment par rapport aux méthodes agiles).
|
||||||
Langages compilés ou interprétés ?
|
Langages compilés ou interprétés ?
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
|
.. glossary::
|
||||||
|
|
||||||
|
langage compilé
|
||||||
|
|
||||||
|
une première passe est faite, des validations son effectuées **avant**
|
||||||
|
la génération du code objet, cette phase est faite par le compilateur.
|
||||||
|
|
||||||
|
compilateur
|
||||||
|
|
||||||
|
programme qui transforme un langage de haut niveau en un langage de base
|
||||||
|
niveau
|
||||||
|
|
||||||
|
- phase d’analyse syntaxique (source -> syntaxe abstraite)
|
||||||
|
- phase de synthèse (syntaxe abstraite -> code objet)
|
||||||
|
|
||||||
|
|
||||||
|
scripting (langage de scripting)
|
||||||
|
|
||||||
|
langage interprèté
|
||||||
|
|
||||||
|
générique (langage)
|
||||||
|
|
||||||
|
Langage à usage générique, qui peut être utilisé dans n'importe quel
|
||||||
|
domaine (par opposition au DSL)
|
||||||
|
|
||||||
|
domain specific
|
||||||
|
|
||||||
|
Domain Specific Language, langage destiné à être utilisé dans un
|
||||||
|
domaine prédéfini.
|
||||||
|
|
||||||
|
paradigmes
|
||||||
|
|
||||||
|
représentation d'une vision particulière à partir d'un modèle théorique
|
||||||
|
|
||||||
|
impératif
|
||||||
|
|
||||||
|
l'algorithme ressemble à une recette de cuisine,
|
||||||
|
c'est-à-dire à une succession d'instructions à exécuter
|
||||||
|
les unes à la suite des autres
|
||||||
|
|
||||||
|
fonctionnel
|
||||||
|
|
||||||
|
l'algorithme ne dépend plus de l'ordre d'exécution d'instructions
|
||||||
|
pas de mélange entre les données et les traitements
|
||||||
|
|
||||||
|
objets (programmation)
|
||||||
|
|
||||||
|
le monde est découpé en catégories
|
||||||
|
qui permettent de créer des objets
|
||||||
|
|
||||||
|
**développement par composants**
|
||||||
|
|
||||||
|
les objets sont organisés entre eux par composants suivant des designs patterns,
|
||||||
|
(patrons de conception)
|
||||||
|
|
||||||
|
garbage collector (ramasse miettes)
|
||||||
|
|
||||||
|
la gestion automatique de la mémoire apparaît en 1989
|
||||||
|
|
||||||
|
machine virtuelle
|
||||||
|
|
||||||
|
portabilité du code (mais diminution en optimisation et performances)
|
||||||
|
|
||||||
|
JIT (just in time compiler)
|
||||||
|
|
||||||
|
code objet, programmes fonctionnant autour de machines virtuelles
|
||||||
|
|
||||||
|
|
||||||
- **le typage statique** : la vérification de la compatibilité entre les types des
|
- **le typage statique** : la vérification de la compatibilité entre les types des
|
||||||
paramètres formels et des paramètres d'appel est effectuée au moment de la
|
paramètres formels et des paramètres d'appel est effectuée au moment de la
|
||||||
compilation du programme. Dès lors, il n'est pas nécessaire de faire ces
|
compilation du programme. Dès lors, il n'est pas nécessaire de faire ces
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
Machine abstraite
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
une machine, ce truc apparemment si complexe, est en fait
|
||||||
|
un assemblage de bric et de brac.
|
||||||
|
|
||||||
|
l'assemblage des connecteurs permet de simuler un additionneur,
|
||||||
|
en prenant en compte les propriétés de **reste euclidien**
|
||||||
|
de l'addition.
|
||||||
|
|
||||||
|
la structure électronique est composée de :
|
||||||
|
|
||||||
|
- un ordonnanceur.
|
||||||
|
- le stockage d'un **état**.
|
||||||
|
- une pile d'instruction
|
||||||
|
|
||||||
|
dès lors qu'on dispose de ces bases électronique au dessus du processeur,
|
||||||
|
un langage d'assemblage est possible, c'est le langage de calcul sur les registres.
|
||||||
|
|
||||||
|
l'adressage mémoire
|
||||||
|
|
||||||
|
|
||||||
|
registre
|
||||||
|
|
||||||
|
machines ont un espace mémoire et un espace de calcul (registres)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue