mercredi 26 décembre 2007

Informatique



Les Langages de Programmation



I – La Genèse

Vers 1950, au tout début de l’informatique, les développeurs n’avaient pas le choix. Programmer, c’était se faire comprendre de la machine. La machine parlait binaire, le programmeur devait parler binaire pour se faire comprendre d’elle. Le code hexadécimal (ou octal) était déjà utilisé, mais c’est le bit qui était l’unité d’entrée des données, parfois même avec des clés.

Bien entendu, les constructeurs fournissaient la liste des mnémoniques de leurs unités centrales, et les programmeurs écrivaient sur papier leurs programmes, avant de les convertir en binaire, à la main. Ne riez pas, c’est vrai ! Heureusement, toutes les machines disposèrent rapidement d’assembleurs, programmes permettant de passer des mnémoniques à l’hexadécimal.

L’assembleur est appelé langage de bas niveau puisqu’il s’adresse directement à la machine. L’avantage des langages de bas niveau :
Compacité (mais aujourd’hui, hein ! on s’en … ).
Rapidité (bien que les compilateurs modernes puissent être très efficaces).
Optimisation forte (accès à toutes les possibilités de la machine).
En contrepartie de ces maigres avantages, le langage machine possède aussi des inconvénients :
Lenteur du développement (<100 i="1,N)" sum="0.0" i="1,N" sum="SUM+A(I)" mean="SUM/FLOAT(N)" number="0" i="1,N" number="NUMBER+1" mean =" ,F10.5,5X,20H" mean =" ,I5)" name="FORTRAN">FORTRAN
Formula Translation
Mathématiques et sciences naturelles
APL
A Programming Language
Essentiellement problèmes mathématiques
LISP
List Processing Language
Langage dans le domaine de l'intelligence artificielle inspiré du λ-Calcul.
BASIC
Beginners All-Purpose Symbolic Instruction Code
Problèmes généraux
ALGOL
Algorithmic Language
Mathématiques et sciences naturelles
COBOL
Common Buisness Oriented Language
Commercial
LOGO
Emprunté au mot grec LOGOS = la raison
Langage d'apprentissage développé principalement pour les enfants
BCPL
Basic Combined Programming Language
Langage qui connaît un grand succès, intégrant la puissance de l'assembleur
SIMULA

Langage développé à partir de l'ALGOL et contenant des nouveaux concepts
FORTH
FOuRTH generation language
Langage d’automate. Utilise la notation polonaise inversée. Très léger !
PL/1
Programming Language n°1
Commercial / mathématiques et sciences naturelles
PROLOG
Programming in Logic
Langage fortement orienté vers le problème
C
Successeur du langage B de AT&T
Langage utilisé pour développer les systèmes d'exploitation. Par exemple UNIX ou MS-Windows.
PASCAL
Du célèbre mathématicien Pascal
Langage structurel polyvalent
ADA
Du nom de la première programmeuse de l'histoire de l'ordinateur: Augusta Ada Byron, collaboratrice de Ch.Babbage
Langage polyvalent dont le développement a été commandé par le ministère américain de la défense
MODULA-2
Modular Language n°2
Langage modulaire développé à partir du PASCAL
C++
Successeur du langage C, développé par Bjarne Stroustrup.
Langage orienté objet. Le plus utilisé au monde à l’heure actuelle.
CAML
Categorical Abstract Machine Language
Langage fonctionnel généraliste développé à l’INRIA, utilisé en CPGE.
JAVA
Sun, langage bytecodé portable de 1991. S’exécute sur une machine virtuelle.
Orienté Web, mais peut être généraliste. Langage orienté objet ressemblant à C++.
C#
Microsoft.
Offre concurrentielle à JAVA.

III – Compilé vs Interprété

De nombreuses classifications des langages s’opposent, comme par exemple : programmation impérative (C, Fortran, Pascal, Basic…), programmation déclarative (SQL, Prolog), programmation fonctionnelle (Lisp, Caml, Schème, ML), voire même programmation objet (C++, JAVA). La frontière étant souvent un peu flou entre ces différents types.

Une seconde classification est dans le cadre du BTS IRIS beaucoup plus importante. Elle différencie les langages compilés et les langages interprétés :

Langage interprété
En informatique, un interpréteur est un outil ayant pour tâche d'analyser, de traduire, et d'exécuter un programme écrit dans un langage informatique. De tels langages sont dits langages interprétés.
Le cycle d'un interpréteur est le suivant:
lire et analyser une instruction ;
si l'instruction est syntaxiquement correcte, l'exécuter ;
passer à l'instruction suivante.

Ainsi, contrairement au compilateur, l'interpréteur se charge aussi de l'exécution du programme, au fur et à mesure de son interprétation. Du fait de cette phase d'interprétation, l'exécution d'un programme interprété est généralement plus lente que le même programme compilé.

Intérêt des langages interprétés :
Facilité de programmation, interactivité à l’écriture.
Facilité de mise au point, aucune phase d’attente avant essai.
Portabilité. Seul l’interpréteur doit être porté.

Inconvénients des langages interprétés :
Lenteur (toute relative).
Manque de protection du code.
Disponibilité et compatibilité des interpréteurs.

Parmi les langages interprétés les plus connus, on trouve :
Basic, Perl, Python, Lisp, Prolog

Langage compilé
Un compilateur est un programme informatique qui traduit un langage, le langage source (par exemple le lanage C), en un autre, appelé le langage cible (par exemple un fichier objet), en préservant la signification du texte source.
En pratique, un compilateur sert le plus souvent à traduire un code source écrit dans un langage de programmation en un autre langage, habituellement un langage d'assemblage ou un langage machine. Le programme en langage machine produit par un compilateur est appelé code objet.

Les étapes de la compilation incluent
le découpage du programme en lexèmes (analyse lexicale) ;
la vérification de la correction de la syntaxe du programme (analyse syntaxique) ;
l'analyse des structures de données (analyse sémantique) ;
la transformation du code source en code intermédiaire ;
l'application de techniques d'optimisation sur le code intermédiaire ;
l'allocation de registres et la traduction du code intermédiaire en code objet, avec éventuellement l'insertion de données de débogage et d'analyse de l'exécution ;
enfin vient la phase d'édition des liens, souvent externe au compilateur.

Le programme généré est toujours un exécutable autonome ou ne dépendant que de librairies partagées.

Intérêt des langages compilés :
Rapidité à l’exécution.
Reverse ingeneering très complexe.
Autonomie du programme généré. Exécutable (Attention aux librairies partagées).

Inconvénients des langages compilés :
Lenteur de mise en œuvre. Compilation nécessaire à chaque modification.
Deboggage presque impossible sur exécutable final.

Parmi les langages compilés les plus connus, on trouve :
C, C++, Pascal, ADA

Langage mixte
Le gros intérêt des langages interprétés est leur portabilité. Le gros intérêt des langages compilés est leur rapidité, d’où l’idée de rassembler ces deux grands points au sein d’un langage.

Pour ce faire, on va utiliser un compilateur, mais celui-ci au lieu de fournir un code spécifique à un processeur particulier va générer du code pour un processeur générique qui n’existe pas… L’exécutable n’en est donc pas vraiment un, et il lui faudra un interpréteur pour convertir les instructions du processeur générique vers le processeur réel.

JAVA par exemple fait partie de ces langages mixtes. Le compilateur JAVA fournit un code intermédiaire appelé Bytecode qui nécessite pour s’exécuter une machine virtuelle.

C#, le concurrent de JAVA développé par Krosoft, génère du code compatible CLR (Common Language Runtime) encore appelé Bytecode MSIL. Le code obtenu s’exécutera sur le .NET Framework qui doit être installé sur la machine.


Aucun commentaire: