Langage C : Introduction

Langage C : Introduction

Introduction

Le langage C a été inventé au cours de l’année 1972 dans les laboratoires Bell (le Google de l’époque) par Dennis Ritchie et Ken Thompson pour développer le système d’exploitation Unix.

Brian Kernighan contribua avec Dennis Ritchie à populariser le langage C avec le livre “The C programming Langage”, encore appelé le “C K&R” pour les initiales des deux auteurs.

Ken Thompson (Gauche) et Dennis Ritchie (Droite)
The C Programming Language
Ken Thompson et Dennis Ritchie reçoivent la National Medal of Technology par Bill Clinton en 1999

Le langage C pour développer des OS (Kernel) / Drivers

C est un langage proche du matériel, adapté pour programmer les sytèmes d’exploitation (OS), les drivers, les micro-contrôleurs, les DSP, les logiciels embarqués, mais pas seulement; l’interpréteur Python, la machine virtuelle Java ou le “moteur” PHP sont également écrits en C/C++.

Linus Torvalds (le créateur de Linux) répondait ainsi à la question de savoir s’il voyait un autre langage que le C pour le développement de systèmes d’exploitation.

Linus Torvalds about C

La raison pour laquelle je me suis lancé dans Linux et les systèmes d’exploitation en général est que j’aime vraiment le hardware. Vu sous cet angle, je n’ai pas encore vu un langage de programmation qui approche seulement le langage C. Ce qu’il faut dire en plus c’est que l’usage du C fait sens pour des personnes qui pensent comme un ordinateur. Donc lorsque je lis du code en langage C, je sais à quoi va ressembler le code assembleur et c’est ce qui m’intéresse. (extraits de 2012)

Le langage C dans l’embarqué

Connaître le langage C reste un pré-requis pour qui souhaite développer des systèmes embarqués en programmation Bare Metal (sans OS) comme sur les Microchip PIC ou STM32. Sur les systèmes avec un OS embarqué comme le Raspberry Pi, on préfère souvent pour des questions de rapidité de développement, programmer dans un langage de plus haut niveau (C++ / Python) mais Les drivers restent développés en C.

Classement TIOBE des langages de programmation

L’index TIOBE mesure la popularité des langages de programmation en se basant sur le nombre de pages web retournées par les principaux moteurs de recherche lorsqu’on leur soumet le nom du langage de programmation.

Classement Tiobe 2024

Le langage C continue depuis plus de 50 ans à truster les 3 premières places du classement. En 2024, le langage C se situe derrière Python et le C++.

Classement Embedded Markets des langages de programmation

Si l’on se focalise sur les langages de programmation utilisés dans les systèmes embarqués, l’enquête de 2023 Embedded Markets Study pour les systèmes embarqués et IoT, indique que le langage C est largement premier avec 52%, suivi de C++ avec 18%. Python arrive loin derrière avec 5%.

Classement Embedded 2019

Les concurrents du C dans l’embarqué

Le vrai challenger

  • Rust conçu pour la sécurité et les hautes performances. Il est souvent décrit comme l’un des successeurs potentiels de C et C++ et commence à être utilisé sur des cibles STM32 mais également dans le noyau Linux depuis la version 6.1 !
Rust + Linux
Logo Rust

Le langage Rust a le vent en poupe en ce moment, La DARPA (agence de défense US) s’engage dans la traduction du code C/C++ en Rust dans ses projets, tout comme Linux qui commence à intégrer Rust dans son noyau. La question se pose encore pour l’utilisation de Rust sur les microcontrôleurs car il n’est pas possible de mapper les GPIOs ou d’écrire à une adresse particulière avec Rust à ce jour !

Les autres

  • Zig est un langage compilé impératif polyvalent, typé statiquement, “bas niveau” type C/C++/Rust. Il est notamment plébiscité pour des programmes ayant des contraintes de performance et de consommation mémoire que l’on peut retrouver dans les systèmes embarqués et applications en “temps réel” mais cela reste encore “expérimental”.
Logo Zig
  • Micropython est un portage du langage Python 3 incluant un sous-ensemble de la bibliothèque standard Python et prévu pour fonctionner sur certains micro-contrôleurs 32 bits (STM32, Raspberry Pi Pico, ESP32 …) Cela surfe sur la mode du langage Python mais cela semble rester anecdotique sur les systèmes embarqués.
  • Le langage GO et tinyGo est parfois utilisé comme preuve de concept sur système embarqué. Il reste plus utilisé sur des projets en concurrence avec le C++ (Docker ou Grafana sont écrits en GO)
  • Kotlin est utilisé pour Les applications Android (historiquement Java). Les couches basses (Kernel, Runtime) restent en C/C++.

Chaque décennie apporte son nouveau langage censé remplacer le C, mais force est de constater que le langage C, qui a fêté ses 50 ans en 2022, n’a pas fini de nous étonner par sa longévité et pertinence dans l’embarqué.

Pertinence du C comme langage de programmation

Est-il pertinent d’apprendre le C en 2024 ?

  • Oui pour de la programmation de micro-contrôleurs et pour l’embarqué
  • Oui, la notion de pointeur se retrouve dans les automates, variateurs de fréquence,
  • Oui pour la programmation de Drivers / modules du Kernel Linux

Est-il pertinent d’apprendre le C en Génie Électrique ?

  • Oui, voir 1.

Quels autres langages apprendre ?

  • pour l’IA, la science des données : Python 3 est très utilisé pour sa simplicité d’utilisation. Dans les faits, on utilise Python pour manipuler des fonctions performantes écrites en C/C++ sans avoir à maîtriser le C++.
  • pour l’embarqué avec FPGA : Verilog