Langage compilé versus interprété

C'est un "vieux débat" puisque certains langages des débuts de l'informatique étaient interprétés, je pense notamment au BASIC.

De quoi on parle ?

Il y a 2 types de langage informatique :

  • des langages compilés : le code est "traduit" par un compilateur avant d'être envoyé au micro-contrôleur ou micro-processeur. Le langage compilé par excellence est le langage C/C++. Arduino est un langage compilé.

  • des langages interprétés : le langage est "compilé" une fois pour toute sous forme d'un "moteur de langage" que l'on appelle interpréteur. Le code est envoyé à l'interpréteur qui exécute "à la volée" les instructions reçues. Le langage Python et donc Micropython, est un langage interprété.

Le débat

On reproche souvent aux langages interprétés d'être "lents" comparativement aux langages compilés. On parle ici de la vitesse d'exécution. Inévitablement, ce débat va intervenir pour ce qui concerne Micropython, d'autant que les mêmes plateformes sont souvent utilisables aussi bien en C compilé qu'en Micropython.

Alors quelques remarques :

  • la vitesse d'exécution n'est pas tout dans un contexte de développement ! La vitesse de développement elle-même est à prendre en compte... et le langage Micropython offre ici un avantage indéniable, de nombreuses fonctionnalités étant disponibles en natif, pouvant être facilement testée via l'interpréteur. Ceci est un gain de temps notable.

  • la vitesse d'exécution est à considérer à micro-contrôleur équivalent... et comme Micropython tourne sur des micro-contrôleurs plus puissants (32 bits - 125Mhz) que les cartes à microcontrôleur usuelles (8 bits - 16Mz), il n'y a pas de perte de vitesse pour l'usager. Mieux, les cartes à Micropython peuvent être plus rapides dans bien des cas, notamment si elles offrent certaines fonctionnalités basées sur le hardware (notamment les PIO ou encore les modules PWM, les Timers, etc.)

  • la question de la vitesse dont on parle est secondaire pour les usages habituels de type "prototypage" où l'on parle de contrôler des dispositifs avec des réactivités de l'ordre de la ms.

  • et pour tous les cas où la vitesse est critique il est possible à minima d'utiliser des sections de C dans le code Micropython, voire même encore mieux, des sections d'assembleur ! Et il est possible également de compiler un code Micropython devenu définitif.

Bref, le passage à Micropython sur carte à Microcontrôleur n'est absolument pas synonyme de "perte de vitesse" à l'exécution pour l'utilisateur final... et c'est surtout un saut qualitatif indéniable en terme des possibilités offertes par le langage Micropython (précision math, souplesse des objets Python, etc.) qui se comporte de plus à bien des égards comme un "micro-OS", un micro système d'exploitation installé sur le micro-contrôleur. Il y a donc une double plus value qui crée une indéniable "rupture" pour l'usager, le maker, le codeur.