En route vers Embedded World 2021 : épisode 2

Note de l'éditeur : Dans l'Épisode 1 de cette série de cinq blogs précédant le salon Embedded World 2021, nous avons présenté cet événement. Dans cet Épisode 2, Randy se replonge dans le langage de programmation C. L'Épisode 3 explique comment l'utilisation de la programmation orientée objets peut réduire la complexité. L'Épisode 4 se concentre sur la mesure fondamentale de toute bonne conception, à savoir sa capacité à être reconfigurée à mesure que les exigences changent, et ce, sans avoir à réimplémenter les blocs fonctionnels. Dans le dernier article, l'Épisode 5, l'espace toujours plus important requis par les systèmes d'exploitation est remis en cause et la décomposition du système est brièvement abordée avant l'allocution d'ouverture de Randall au salon Embedded World 2021.

Je suis obnubilé par la complexité et la nécessité générale de la réduire. Je veux que ma présentation explique la manière dont la complexité a été traitée au fil des décennies, rappelle aux gens le chemin parcouru pour en arriver là où nous sommes aujourd'hui, et mette en avant des techniques de simplification qui ne sont pas très bien connues.

Comme je l'ai dit le mois dernier, j'ai du temps à consacrer à mes passions techniques, car je suis en semi-retraite. Récemment, en me familiarisant avec les outils de développement embarqués d'un client, j'ai dû rechercher une syntaxe oubliée du langage de programmation C. J'ai donc ressorti mon exemplaire du livre The C Programming Language de Brian Kernighan et Dennis Ritchie (K&R) pour me remettre à niveau. J'ai en fait la version originale du livre ainsi que la 2e édition.

Source : Wikipédia (https://en.wikipedia.org/wiki/The C Programming Language)

J'ai fini par relire la préface, l'introduction et le 1er chapitre, et tout cela m'a rappelé l'époque où j'ai étudié pour la première fois ce langage. J'ai commencé ma carrière en tant que programmeur de langage d'assemblage à la fin des années 1970. Je me souviens des difficultés éprouvées à faire évoluer ma pensée vers des concepts de plus haut niveau. La programmation de langage d'assemblage était semblable à la programmation de ma calculatrice programmable HP-67 : il fallait se charger directement des registres et des étapes de la machine pour obtenir les bons résultats. J'étais programmeur de langage d'assemblage. L'écriture du langage d'assemblage était fastidieuse, mais simple. Je me souviens que je me suis demandé si ce plus haut niveau en valait vraiment la peine, car le seul avantage pour moi à l'époque était la possibilité de changer de processeur.

Mes programmes en langage d'assemblage étaient utilisés dans l'un des neuf microprocesseurs embarqués dans les instruments de musique électroniques fabriqués par Baldwin Piano et Organ Company à Cincinnati, dans l'Ohio. Baldwin a inventé l'orgue électronique et utilisait uniquement des technologies de pointe. Le fait de pouvoir générer un rythme musical d'accompagnement tout en décodant les accords joués par le musicien imposait des contraintes en temps réel très strictes. La prévisibilité de l'interprétation était synonyme de succès. La réduction de la complexité ne l'était pas.

Quoi qu'il en soit, le 1er chapitre des deux éditions du manuel K&R est un tutoriel. Pour ma plus grande satisfaction, lorsque j'ai entré les exemples dans ma machine Linux exactement comme ils étaient présentés dans le texte et lorsque j'ai exécuté les commandes mot pour mot afin de compiler et d'utiliser ces exemples, tout a fonctionné exactement comme c'était décrit. C'était vraiment super. Ce texte a été publié pour la première fois en 1978. Ma machine Linux exécute la dernière version de Linux (5.8.14), sortie le 7 octobre 2020, et rien n'a été modifié qui empêcherait le fonctionnement de mon programme C simple. C'est remarquable ! Ça me rappelle un adage : « Tant que ça marche, on ne touche à rien ».

Fort de cette expérience, j'ai décidé de relire les sections introductives de mon manuel C++. Il s'agit de l'ouvrage The C++ Programming Language, 2nd edition de Bjarne Stroustrup, publié en 1991. Les manuels sur le langage C et le langage C++ ont été écrits par les créateurs de ces langages. J'aime connaître la pensée des inventeurs. Les livres écrits plus récemment par de nouveaux auteurs, ayant eu l'avantage de comprendre la pensée des auteurs originaux, décrivent peut-être les choses de manière plus claire mais ils peuvent aussi regorger d'informations qui ne sont pas forcément nécessaires à l'apprentissage d'un concept.

Source : https://stroustrup.com/2nd.html

En seulement 10 pages, Bjarne Stroustrup explique la cascade de technologies qui a défini son objectif (certains parleraient d'un objectif d'informaticien) avec C++, visant à fondamentalement réduire la complexité de la modélisation des problèmes du monde réel qui pouvaient être résolus avec un programme informatique.

Il explique que tout a commencé par la programmation procédurale, suivie de la programmation modulaire, de l'abstraction de données et enfin de la programmation orientée objet. La programmation procédurale, selon Bjarne Stroustrup, se résume ainsi :

La programmation modulaire selon Bjarne Stroustrup, c'est :

On voit ici une tentative de réduire la complexité, en cachant les données dans des modules. Il s'agit d'un attribut clé de la simplification des systèmes. Cela marque le début du concept d'encapsulation.

Bjarne Stroustrup poursuit avec son paradigme de l'abstraction de données :

D'après Bjarne Stroustrup, l'abstraction de données apporte son lot de problèmes. Il explique que pour pouvoir adapter l'abstraction à de nouvelles utilisations, il faut en modifier la définition. Une fois que l'on a modifié une définition, il est donc impossible de réutiliser celle qui a été définie. Cela l'amène au concept de programmation orientée objet :

Nous avons donc à présent le concept de hiérarchie, qui est un concept de base pour réduire la complexité.

Ce que j'écris dans ces articles de blog ne reflète pas mes recherches actuelles pour la préparation de mon discours d'ouverture au salon Embedded World. Je connais une avalanche de technologies qui me sont propres, mais les concepts que j'aborde dans ces articles sont ceux qui m'ont aidé à façonner ma réflexion. Je partagerai d'autres concepts avec vous dans le prochain épisode.

À propos de l'auteur

Image of Randy Restle

Randall Restle affiche plus de 40 ans d'expérience dans l'industrie des composants électroniques. Maintenant en semi-retraite, il a occupé le poste de vice-président de l'ingénierie des applications chez DigiKey. Son expérience inclut la direction d'équipes d'ingénieurs d'application, de techniciens et de personnel de gestion qualifiés pour développer des produits technologiques avancés, originaux et uniques.

Ses activités personnelles comprennent le traitement des signaux numériques, la mise en œuvre de la logique programmable, l'amélioration du contrôle des mouvements et la conception de logiciels. Il détient des brevets dans de nombreuses industries et est un membre senior de l'IEEE. Randall Restle est diplômé de l'université de Cincinnati (BSEE, MS et MBA).

More posts by Randall Restle
 TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum