.. _prog-e3-langages: ************ Les langages ************ Un langage de programmation est un langage formel qui permet de spécifier des algorithmes et de les traduire en instructions compréhensibles par une machine. Il existe de nombreux langages de programmation, chacun ayant ses propres caractéristiques, avantages et inconvénients. Le choix du langage dépend souvent du domaine d'application, des préférences personnelles, des performances requises, etc. L'adoption d'un langage de programmation est un processus complexe qui dépend de nombreux facteurs, notamment la popularité du langage, la disponibilité de bibliothèques et d'outils, la communauté de développeurs, les performances, etc. En juin 2026, les langages de programmation les plus populaires sont Python, Java, C++, C et JavaScript selon différents classements. - 1. Python, 2. C, 3. C++ `TIOBE `_ ; - 1. Python, 2. Java, 3. C++ `IEEE Spectrum `_ ; - 1. Python, 2. Java, 3. C/C++ `PYPL `_ ; - 1. TypeScript, 2. Python, 3. JavaScript, `GitHub `_ ; Caractéristiques des langages ============================== **Python** est un langage interprété haut niveau. Par comparaison avec C et Java, le temps de développement est réduit et le temps d'exécution plus important. Cependant ce dernier peut être drastiquement réduit en utilisant des bibliothèques spécifiques. Python produit du `bytecode `_, un code intermédiaire entre les instructions machines et le code source. Ce bytecode est exécuté sur une machine virtuelle fournie par le langage, ce qui le rend portable vers plusieurs architectures. Le bytecode est produit et compilé en langage machine sur le disque pendant l'exécution . Python est typé dynamiquement ce qui introduit de la souplesse de programmation mais impose certaines vérifications pendant l'exécution au détriment de la vitesse d'exécution. Python est dans le top 3 des langages de programmation de tous les classements et est le langage de programmation le plus populaire pour l'enseignement de l'informatique dans les universités et les écoles d'ingénieurs. **Java** est un langage compilé haut niveau. Java produit également du bytecode. Le bytecode est produit avant l'exécution puis compilé en langage machine directement en mémoire pendant l'exécution. Java est typé statiquement ce qui accélère la vitesse d'exécution au détriment de la souplesse de programmation. **C** est un langage compilé bas niveau. Le compilateur transforme les instructions en un code machine propre à l'environnement. Le code source n'est pas portable et doit être recompilé pour différents environnements d'exécution. Il est adapté à des contextes où le temps d'exécution est important et/ou la taille mémoire est critique. Sa programmation est plus complexe puisqu'elle donne accès directement à la mémoire. C'est aussi `le langage le plus économe en énergie `_. **C++** est un langage compilé haut niveau. C++ est une extension de C qui ajoute des fonctionnalités orientées objet et d'autres améliorations. C++ produit du code machine directement à partir du code source, ce qui le rend rapide et efficace. C++ est typé statiquement ce qui accélère la vitesse d'exécution au détriment de la souplesse de programmation. **JavaScript** est un langage interprété haut niveau. JavaScript est principalement utilisé pour le développement web, mais il est également utilisé pour d'autres types d'applications. JavaScript est interprété par les navigateurs web, ce qui le rend portable vers tous les environnements qui supportent les navigateurs. JavaScript est typé dynamiquement ce qui introduit de la souplesse de programmation mais impose certaines vérifications pendant l'exécution au détriment de la vitesse d'exécution. **TypeScript** est un langage compilé haut niveau. TypeScript est une extension de JavaScript qui ajoute des fonctionnalités de typage statique et d'autres améliorations. TypeScript est compilé en JavaScript, ce qui le rend portable vers tous les environnements qui supportent JavaScript. TypeScript est typé statiquement ce qui accélère la vitesse d'exécution au détriment de la souplesse de programmation. .. quiz:: quizz-intro :title: Comparaison des langages - :quiz:`{"type":"TF","answer":"T"}` Java et Python produisent tous les deux du bytecode - :quiz:`{"type":"TF","answer":"F"}` C++ est un langage bas niveau - :quiz:`{"type":"TF","answer":"T"}` C offre un contrôle direct sur la mémoire - :quiz:`{"type":"TF","answer":"T"}` JavaScript est interprété par les navigateurs web - :quiz:`{"type":"TF","answer":"F"}` TypeScript est compilé en Python - :quiz:`{"type":"SC","values":"Python,Java,C,JavaScript","answer":"C"}` est le langage le plus économe en énergie. - Le code intermédiaire exécuté sur une machine virtuelle s'appelle du :quiz:`{"type":"FB","answer":"bytecode","flags":"fuzzy"}` - Le typage de C++ est de type :quiz:`{"type":"SC","values":"statique,dynamique,hybride,aucun","answer":"statique"}` Python ====== Une vidéo d'introduction... .. raw:: html Python est un langage qui permet rapidement de produire du code efficace. Il possède une `courbe d'apprentissage `_ intéressante car on est rapidement opérationnel et l'acquisition de notions nouvelles se fait de façon assez fluide. Python est un langage objet de haut niveau destiné à écrire rapidement des applications dans tous les domaines de l'ingénierie (web, calcul scientifique, cartographie, traitement de données, manipulations de fichiers, etc...). .. quiz:: quizz-python :title: Python - :quiz:`{"type":"TF","answer":"T"}` Python est un langage haut niveau - :quiz:`{"type":"TF","answer":"T"}` Python produit du bytecode - :quiz:`{"type":"TF","answer":"F"}` Python est un langage compilé - :quiz:`{"type":"TF","answer":"T"}` Python est typé dynamiquement - :quiz:`{"type":"TF","answer":"F"}` Python offre un contrôle direct sur la mémoire - :quiz:`{"type":"TF","answer":"T"}` Le code Python est plus compact que le code C - :quiz:`{"type":"TF","answer":"F"}` Python (standard) est plus rapide que C - :quiz:`{"type":"TF","answer":"T"}` L'utilisation de modules spécialisés accélère Python - :quiz:`{"type":"TF","answer":"T"}` Python permet un gain de temps significatif pour la conception des programmes Langage C ========= C est un langage de programmation bas niveau, qui offre un contrôle direct sur la mémoire et les ressources système. C est souvent utilisé pour le développement de systèmes d'exploitation, de pilotes de périphériques, de logiciels embarqués et d'autres applications nécessitant des performances élevées. C est un langage compilé, ce qui signifie que le code source doit être transformé en code machine avant d'être exécuté. C est typé statiquement, ce qui signifie que les types de données doivent être déclarés explicitement et vérifiés à la compilation. .. quiz:: quizz-C :title: Langage C - :quiz:`{"type":"TF","answer":"T"}` C est un langage bas niveau - :quiz:`{"type":"TF","answer":"T"}` C produit du code exécutable à partir du code source - :quiz:`{"type":"TF","answer":"T"}` C est un langage compilé - :quiz:`{"type":"TF","answer":"T"}` C est typé statiquement - :quiz:`{"type":"TF","answer":"T"}` C offre un contrôle direct sur la mémoire - :quiz:`{"type":"TF","answer":"F"}` Le code C est plus compact que le code Python - :quiz:`{"type":"TF","answer":"T"}` C (standard) est plus rapide que Python - :quiz:`{"type":"TF","answer":"F"}` C permet un gain de temps significatif pour la conception des programmes Performances ============ Par rapport au langage C, la simplicité de programmation de Python : - est obtenue en échange d'un temps d'exécution généralement plus long ; - mais offre un gain significatif pour le temps de développement du programme. Le temps d'exécution -------------------- Il est complexe de quantifier universellement la vitesse d'exécution des langages, qui dépend grandement du problème à traiter. Pour un problème de `comptage de mots `_ les performances suivantes ont été relevées. .. list-table:: :widths: 25 25 25 :header-rows: 1 :align: center * - Language - Solution naïve - Solution optimisée * - C - 0.96 - 0.23 * - Java - 1.40 - 1.34 * - Python - 2.21 - 1.33 Pour `un problème combinatoire `_, la version standard de Python est nettement plus lente. Par contre l'utilisation du module spécialisé :mod:`itertools` apporte un gain significatif. .. list-table:: :widths: 25 25 :header-rows: 1 :align: center * - Language - Temps de calcul * - C++ naïf - 2.42 * - Python (standard) - 61.2 * - Python (optimisé) - 0.09 Quelques stratégies pour accélérer le langage Python: - l'utilisation de modules spécialisés de la `bibliothèque standard `_ ; - le recours à des packages externes. Par exemple `Numpy `_, "a Python library that provides a multidimensional array object [...] and an assortment of routines for fast operations on arrays" ; - le recours à des accélateurs. Par exemple `Numba `_ "which translates Python functions to optimized machine code at runtime" ; - l'utilisation d'implémentations de Python alternatives à `CPython `_, qui est l'implémentation par défaut. Par exemple `Pypy `_ "a fast, compliant alternative implementation of Python". Le lecteur intéressé par l'optimisation des performances pourra se pencher sur l'ouvrage de Micha Gorelick & Ian Ozsvald : `High Performance Python `_. .. quiz:: quizz-exec-time :title: Temps d'exécution - :quiz:`{"type":"TF","answer":"T"}` Python est plus lent que C pour la plupart des problèmes - :quiz:`{"type":"TF","answer":"T"}` L'utilisation de modules spécialisés peut accélérer significativement Python - Pour un problème combinatoire, le module spécialisé qui apporte un gain significatif en Python est :quiz:`{"type":"FB","answer":"itertools","flags":"fuzzy"}` - :quiz:`{"type":"TF","answer":"T"}` Numpy est une bibliothèque externe qui permet d'accélérer Python - :quiz:`{"type":"SC","values":"Numba,CPython,PyPy,Numpy","answer":"PyPy"}` est une implémentation alternative de Python plus rapide que CPython. Le temps de développement ------------------------- Comparé à C et Java, le temps de développement d'un programme Python est significativement réduit comme le montre l'article `An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl for a search/string-processing program `_. L'une des principales conclusions montre que le temps de développement est réduit d'un facteur proche de 3 par rapport à Java ou C. .. image:: images/python-01-intro-fig-02.png :scale: 100 % :align: center D'autres métriques extraites du même article sont disponibles `ici `_. .. warning:: Le graphique ci dessus est basé sur du code produit par la seule intelligence humaine. Aujourd'hui, le temps de développement est fortement impacté par l'émergence de l'IA générative, qui permet de réduire considérablement le temps nécessaire pour produire du code fonctionnel quel que soit le langage. .. quiz:: quizz-dev-time :title: Temps de développement - :quiz:`{"type":"TF","answer":"T"}` Python permet un développement plus rapide que C et Java - :quiz:`{"type":"TF","answer":"F"}` Le temps de développement est réalisé d'un facteur 10 entre Python et C - Le temps de développement en Python est réduit d'un facteur :quiz:`{"type":"SC","values":"2,3,5,10","answer":"3"}` comparé à Java. - L'article original est basé sur du code produit par la seule :quiz:`{"type":"FB","answer":"intelligence humaine","flags":"sequence"}` - :quiz:`{"type":"TF","answer":"T"}` L'IA générative impacte maintenant significativement le temps de développement