Il existe de nombreuses façons de distinguer les langages de programmation. Pour commencer, ils relèvent de différents paradigmes: fonctionnel, orienté objet, et plus encore.
Vous pouvez également classer un langage de programmation par sa méthode de traduction, ce qui a un effet majeur sur les performances d'un langage. Les langages de programmation compilés sont généralement plus rapides que ceux interprétés. Ainsi, dans des situations comme le développement de jeux qui exigent de la vitesse, les développeurs ont tendance à utiliser des langages compilés.
Qu'est-ce que la traduction ?
Le processus de traduction convertit le code écrit par un programmeur en code machine qu'un ordinateur peut exécuter. Le code machine est un type de langage de bas niveau, qui a des uns et des zéros. Ainsi, le traducteur convertit le code de haut niveau que vous créez dans un langage de programmation en code machine.
Sans traducteurs, il faudrait coder en langage machine. Chaque langage de programmation de haut niveau que vous connaissez utilise l'une des trois méthodes de traduction: un compilateur, un interpréteur ou un hybride des deux.
Qu'est-ce qu'un compilateur ?
Un compilateur est un logiciel qui convertit le code source écrit dans un langage de haut niveau en code de bas niveau pour l'exécution.
Le schéma ci-dessus représente un compilateur dans sa forme la plus basique. Le compilateur comporte plusieurs phases. Chaque phase transforme le code d'un état à un autre. Le but de chaque phase du compilateur est de créer une sortie plus facile à manipuler pour la phase suivante. La structure générale d'un compilateur est la suivante :
- Scanner: cette phase prend un flux de caractères et les regroupe en jetons qui représentent des identifiants, des littéraux de chaîne, etc.
- Analyseur: cette phase regroupe les jetons en fonction de la grammaire du langage de programmation source. Il crée un arbre de syntaxe abstraite qui est une collection d'expressions qui composent le programme.
- Sémantique: cette phase réalise une analyse sémantique sur l'arbre de syntaxe abstraite (AST). Il utilise les règles du langage source pour ajouter du sens en attribuant des types aux expressions AST et en vérifiant leur validité. L'AST devient alors une représentation intermédiaire.
- Représentation intermédiaire (IR): cette phase convertit le code source du programme d'origine en code machine. Il produit une version simplifiée du code assembleur. L'IR utilise un ou plusieurs optimiseurs pour améliorer le code IR et collecter des informations pour la machine sur laquelle il s'exécute. Un optimiseur peut rendre un programme plus efficace, plus rapide ou même plus petit.
- Générateur de code: cette phase consomme le code IR optimisé et le convertit en code machine.
Quels langages de programmation utilisent des compilateurs ?
Certains langages de programmation compilés populaires incluent :
- C
- C++
- Aller
- Ada
- Fortran
- COBOL
- Zézayer
- Objectif c
- Rapide
L'un des avantages d'utiliser un langage compilé est qu'il identifie les erreurs lors de la compilation. Cela vous permet de corriger ces bogues, puis d'essayer de compiler à nouveau le programme. Les langages compilés sont moins susceptibles d'échouer une fois qu'ils commencent leur exécution. Ces langages ne généreront même pas de programme à exécuter si le code source contient des erreurs de syntaxe. Mais les erreurs sémantiques et d'autres formes de bogues d'exécution passeront outre.
Les langages compilés s'exécutent également très rapidement après leur compilation.
Qu'est-ce qu'un interprète ?
Un interpréteur est un programme qui traduit et exécute une seule ligne de code à la fois. Ce processus se répète jusqu'à ce que l'interpréteur arrive à la dernière ligne de code dans le programme ou le script donné.
Comme vous pouvez le voir sur le schéma ci-dessus, un interpréteur prend deux entrées. Tout d'abord, il faut tout le code source (programme). Il lit ensuite la première ligne du programme (en tant qu'entrée), la traduit et l'exécute. Si cette ligne s'exécute correctement, elle passe à la ligne suivante du programme ou du script.
Contrairement à un compilateur, un interpréteur ne traduit pas un programme entier en code machine. Au lieu de cela, il analyse et analyse une ligne de code donnée avant de l'exécuter. Un interpréteur doit commencer à exécuter un programme, en particulier un programme plus volumineux, avant même qu'un compilateur ait fini de le traduire.
Quels langages de programmation utilisent des interprètes ?
Certains langages de programmation interprétés populaires incluent :
- Python
- Javascript
- perle
- MATLAB
- DE BASE
Bien qu'un interpréteur commence à exécuter le code plus rapidement, il échouera quand même s'il rencontre une erreur. En tant que programmeur, vous devrez corriger une telle erreur et redémarrer le programme. Cet événement se produit chaque fois que l'interpréteur rencontre une nouvelle erreur. Certaines erreurs peuvent rester en sommeil si elles se rapportent à un ensemble rare de circonstances. Dans ces cas, les tests sont plus importants que jamais.
Les interpréteurs sont généralement plus faciles à développer que les compilateurs, et leurs programmes sont plus portables de par leur conception.
Qu'est-ce que la traduction hybride ?
La traduction hybride utilise un compilateur et un interpréteur. La traduction hybride compile le code source de haut niveau dans une forme de niveau inférieur, comme le bytecode. Il utilise ensuite un interpréteur pour exécuter ce bytecode.
La traduction hybride peut différer d'un langage de programmation à l'autre mais utilisera cette structure générale. L'un des langages de programmation les plus populaires qui utilisent la traduction hybride est Java. Le compilateur Java traduit son code source en Code binaire de la machine virtuelle Java (JVM). L'interpréteur traduit ensuite le bytecode JVM en code machine.
Quels langages de programmation utilisent la traduction hybride ?
Certains langages de programmation hybrides populaires incluent :
- Java
- C#
- Visual Basic
- Erlang
- F#
Avec la traduction hybride, vous obtenez le meilleur des deux mondes. Compiler le code en premier vous permet de résoudre les bogues le plus tôt possible. Le bytecode créé par les compilateurs hybrides est plus facile à interpréter qu'un code source de programme de haut niveau.
L'intérêt de connaître les différentes méthodes de traduction
Vous devez comprendre la méthode de traduction spécifique utilisée par une langue, en particulier si vous l'utilisez pour un nouveau projet. Une méthode de traduction de langue est une partie importante de l'identité d'un langage de programmation. Cela peut affecter la façon dont vous distribuez votre programme et la façon dont les utilisateurs l'exécuteront.
Chaque approche de traduction a ses propres mérites. Les principaux langages de programmation comme C++, Python et Java utilisent tous des méthodes de traduction différentes. Outre le paradigme d'une langue, sa méthode de traduction est l'un des traits les plus importants dont vous devez être conscient.
Il existe plusieurs paradigmes qu'un langage de programmation peut utiliser. La plupart des principaux langages de programmation sont des langages multi-paradigmes; ils soutiennent l'utilisation de deux ou plusieurs paradigmes distincts. Trois des paradigmes les plus populaires sont la programmation impérative, orientée objet et fonctionnelle.