-
Notifications
You must be signed in to change notification settings - Fork 0
Programmation
Dans le monde de l'embarqué, le C est roi ! Mais plus pour très longtemps, vive Rust ;)
Traditionnellement, pour utiliser du matos électronique embarqué, des "MCU" (microcontroller unit), la seule solution consiste à acheter des puces auprès d'un fabriquant, puis à utiliser l'IDE fourni par celui-ci, avec des variations gratuites / payantes / pros etc. Typiquement, au club on utilise des PIC, produits par Microchip, programmés par le biais de l'IDE MPLAB X.
Un microcontrôleur c'est un peu comme un bloc avec un CPU, de la mémoire et quelques entrée-sorties pour interagir avec le monde extérieur. Très similaire avec un ordinateur en fait. Mais la principale différence, c'est que la puissance de calcul et la taille mémoire sont très inférieures. Du coup pas possible de mettre un OS dessus (genre Windows, Mac, Linux, ...), on y charge directement un programme qui va s'exécuter au démarrage du microcontrôleur.
Qui dit très peu de mémoire, dit aussi pas de ramasse-miettes (GC ou "Garbage Collector" en anglais). Le ramasse-miettes c'est une fonctionnalité fournie par un langage pour ne pas avoir à gérer sa mémoire soit-même. Ainsi, en Python, Java, JavaScript, OCaml, Haskell, Matlab, Rubis, Go, ... pas besoin d'allouer et de libérer de la mémoire, on peut juste utiliser nos variable sans se soucier de savoir quand elles vont être détruites. Ça a révolutionné la programmation, mais malheureusement c'est aussi incompatible avec de l'embarqué dans des petits microcontrôleurs.
Il nous reste donc principalement les langages suivants: C, C++, Rust et Ada. Ada est un langage orienté objet créé en 1980, mettant en avant la programmation par contrat et visant principalement les systèmes critiques, tels que l'aérospatial ou les transports. Le langage C date lui de 1972 ! Certainement plus vieux que toi lecteur de ce wiki ;). Il a une syntaxe simple et assez proche des architectures sous-jacentes ce qui en fait un langage de prédilection pour des systèmes embarqués. Quant au C++, il est arrivé 11 ans plus tard, en 1983, et apporte son lot d'innovations, avec de la programmation orienté objet ou encore de la généricité par templates, le tout en promettant "zero-cost abstractions", c'est à dire des abstractions qui ne pourraient pas être plus efficacement codées "à la main". Le C et le C++ ont cependant un problème de taille, ce sont des langages parfaits pour piéger le développeur avec des bugs mémoire ! En effet d'après une présentation de Matt Miller, ingénieur sécurité à Windows, 70% des problèmes de sécurité sont liés à une mauvaise manipulation de la mémoire. Et croyez-moi, c'est le même problème avec les bugs de nos robots ! Heureusement, les chercheurs ont bien travaillé depuis les années 80. Récemment, une équipe de Mozilla qui en avait marre de ne plus pouvoir maintenir et débugger le code de Firefox, s'est lancée dans la création d'un nouveau langage de programmation du nom de Rust, intégrant les bonnes idées de recherche de ces années, et ayant les mêmes niveaux de performance et de contrôle que C/C++. Le tout en rendant impossible la majorité des problèmes mémoires et en fournissant une expérience de dev tellement agréable qu'il a été élu en 2019, pour la 4e année consécutive, le langage de programmation le plus apprécié par les développeurs lors du sondage annuel stack-overflow.
Rust dispose d'une communauté très active, nottamment dans le domaine de l'embarqué. Pour notre bien-être, et celui de nos robots :p, nous allons donc tenter l'expérience et utiliser Rust pour coder nos robots pour la coupe !