
Code-Garage #39 - La différence entre bas-niveau et haut-niveau en programmation
Durée: 6m39s
Date de sortie: 08/11/2022
En programmation, on parle de langages haut-niveau et bas-niveau, mais pourquoi fait-on une telle différence ?
Notes de l'épisode :
Salut et bienvenue dans ce nouvel épisode de Code Garage, je m'appelle Nicolas Brandin-Bernard
et aujourd'hui on va parler du concept de langage bas niveau et de langage haut niveau
en programmation.
Alors c'est un concept qui est assez basique que l'on découvre dès qu'on arrive, dès
qu'on commence la programmation, mais qui est important et parfois il faut aussi savoir
se remettre un petit peu au point les idées au clair et revenir sur des bases.
Donc, qu'est-ce que ça veut dire, qu'est-ce que ça signifie exactement ? Parce que contrairement
à ce qu'on pourrait croire, le niveau, ça ne se rapporte pas au niveau de compétences
nécessaires et en réalité c'est même presque plutôt l'inverse.
Un langage bas niveau, ça signifie que c'est un langage qui est très près du niveau des
composants électroniques.
Tandis qu'il y a un langage haut niveau, c'est un langage qui va plutôt être compris
plus facilement par les humains, les développeurs et les développeurs, ce qu'ils vont l'écrire.
Et ce langage haut niveau, il sera ensuite transformé pour être compris par la machine.
En anglais, on parle plutôt de low level et de high level.
Si on prend les exemples les plus extrêmes, le langage le plus bas niveau possible, c'est
le binaire, parce qu'il est compris directement par l'électronique, c'est d'ailleurs le
seul langage qui est compris réellement par l'électronique très bas niveau.
Alors qu'un des langages les plus hauts niveaux qu'on a, on peut dire que c'est le JavaScript,
en réalité il en existe des dizaines, mais c'est vrai que c'est un des langages qu'on
considère comme étant un des plus haut niveau.
Le binaire, il sera donc, comme j'ai dit, interprété directement par les composants
électroniques, 0V ou 5V par exemple.
Alors que pour être interprété par les composants, le JavaScript, il sera d'abord
interprété par le navigateur, puis par le système de l'exploitation, puis par le
BIOS et enfin par les composants.
Voilà, il a une chaîne de commandement, on va dire, il a une chaîne de transmission.
Donc on voit en disant ça que justement JavaScript, il est tout en haut de la pile
d'exécution et d'interprétation et c'est pour ça, comme il est en haut qu'on parle
de haut niveau.
Alors pourquoi utiliser un langage de haut niveau ? Comme un langage bas niveau va directement
être compris par la machine, il sera exécuté beaucoup plus efficacement pour les mêmes
opérations, on va dire.
Et à l'inverse, plus un langage est haut niveau, plus il perdra potentiellement en
efficacité.
Par exemple, le JavaScript est environ exécuté 30 fois moins vite qu'un même code
en langage C.
Si vous voulez, j'ai mis un benchmark dans les notes de l'épisode si ça vous intéresse.
Donc on pourrait se demander pourquoi simplement pas tout coder en langage bas niveau ?
Parce qu'en fait, être tout en haut de la pile, c'est pas toujours une mauvaise
chose.
Loin de là, un code en langage haut niveau, c'est un code qui sera compilé vers un langage
plus près de la machine.
Donc selon les méthodes de compilation, qui sont spécifiques à chaque langage, on
a même plusieurs compilateurs par langage, on se retrouvera avec plus ou moins de perte
de performance.
Mais les langages haut niveau, comme ils reposent sur d'autres systèmes et d'autres
outils existants, en réalité, ils peuvent être portés à peu près n'importe où, sur
n'importe quelle machine.
Tandis qu'un langage très bas niveau, il devrait être modifié si l'électronique
change.
Alors quelques petits exemples.
Par exemple, un programme écrit en binaire ou en assemblure, on va dire, devra être changé
dès que le processeur change, dès que ce qui va interpréter vraiment toutes les instructions
de calcul va changer puisqu'il va pas avoir les mêmes méthodes de calcul.
Enfin plutôt les mêmes instructions.
Un programme écrit en C, il devra changer ou être plutôt recompilé si le programme
de système d'exploitation change.
Un programme en JavaScript, lui, il pourra tourner sous Linux, Windows ou Mac OS parce
qu'il va être interprété d'abord par un navigateur.
Alors au final, comment choisir si on doit utiliser un langage haut niveau ou un langage
bas niveau ?
Le choix d'un langage ou d'un autre, il va se faire qu'en fonction du projet, des
contraintes de l'utilisation, etc.
Si par exemple vous devez contrôler l'électronique directement, comme avec Arduino par exemple,
ou même d'autres, plein d'autres choses, ça sera sûrement un langage bas niveau,
CC++ par exemple.
Pareil, si vous êtes au niveau du système d'exploitation et que vous avez besoin de
grandes performances, ça peut être du C, du C++, du Rust, etc.
Et dans le jeu vidéo traitement donné, on a la même chose, mais ça peut être avec
du C-sharp par exemple.
Si par contre, votre application doit s'exécuter sur des centaines de machines différentes
sur différents OS où on utilisera du coup un langage un peu plus haut niveau, ça peut
être du Java, du Python, du JavaScript, parce qu'ils se portent facilement, ils sont simplement
un interpréteur, une machine virtuelle qui va les interpréter et cette machine virtuelle
va déjà être présente sur les différents OS.
Alors évidemment, ça, ce sont des exemples simplement pour simplifier la compréhension.
Le choix, il est parfois soumis à des contraintes bien plus complexes que celles que je viens
de citer, mais c'était pour essayer de remettre un petit peu au clair et pas qu'on
se dise qu'on se dise absolument faire du bas niveau tout le temps pour tous les use
case ou alors le haut niveau, c'est facile, donc je peux me permettre d'en faire tout
le temps.
Il y a des cas d'utilisation qui sont faits pour le haut niveau, d'autres le bas niveau
et on voit très souvent d'ailleurs des entreprises qui commencent un use case avec
des cas d'utilisation avec un langage haut niveau parce que c'est plus facile à développer,
plus rapide, plus portable, mais quand elles atteignent une certaine échelle d'utilisation,
eh bien elles reviennent, elles réécrivent ces modules là dans des langages bas niveau.
On a eu ça très souvent récemment avec des langages par exemple des algorithmes ou des
modules qui étaient écrits en langage haut niveau, ça peut être Python, ça peut être
Go, ça peut être des choses comme ça et elles ont été réécrites en Rust qui est
bas niveau et très très performant justement parce que en fait elles arrivaient à un goulot
d'étranglement où ces modules là n'étaient plus assez performants pour le cas d'utilisation
où elles étaient utilisés.
Donc voilà, j'espère que cet épisode vous aura été utile et vous sera utile pour le
futur pour quand vous devrez faire des choix techniques.
Moi je vous donne rendez-vous la semaine prochaine pour un prochain épisode de Codegarage ou
directement sur le site code-garage.fr.
Qu'est ce que c'est Codegarage ? C'est une plateforme d'apprentissage de cours
complets et de grandes qualités pour tous les développeurs et toutes les développeuses qui
veulent continuer à se former sur des sujets et monter en compétences tout au long de l'année.
A bientôt !
Les infos glanées
Code-Garage
Découvrons ensemble des sujets passionnants autour du métier de dev et de la programmation en général !
Tags
Code-Garage #40 - Quelle est la différence entre junior, confirmé et sénior ?