HeadlinesBriefing HeadlinesBriefing.com

Réduire les comportements indéfinis en langage C

Hacker News •
×

Nous sommes mauvais en marketing — nous l'admettons. Notre force consiste à rédiger ce type d'articles sur lequel les développeurs, les administrateurs et les défenseurs du logiciel libre comptent pour savoir ce qui se passe dans le monde Linux. Abonnez-vous dès aujourd'hui pour nous aider à continuer, afin que nous n'ayons pas à devenir bons en marketing.

En tant que professeur d'ingénierie biomédicale, Martin Uecker ne correspond peut-être pas au profil d'un intervenant typique de Kernel Recipes. Il est cependant un utilisateur de Linux de longue date et travaille sur des logiciels libres destinés à contrôler les scanners d'imagerie par résonance magnétique (IRM). Il était à la conférence pour parler du langage de programmation C, du problème spécifique du comportement indéfini en C, et de savoir s'il peut éventuellement devenir un langage sûr au niveau de la mémoire.

Pourquoi se soucier de C en 2026 ? Il a déclaré que c'est toujours un excellent langage. C est portable, stable sur le long terme, offre une compilation rapide, et le code binaire résultant est rapide. "Ce que vous voyez est ce que vous obtenez" ; il est facile de regarder du code C et d'avoir une idée de ce que l'ordinateur fera réellement. Il existe de nombreux outils pour travailler avec le langage, et C se fait discret quand c'est nécessaire.

C a une longue histoire, et cela affecte le langage tel que nous le voyons aujourd'hui, a-t-il dit. Le standard C89 a dû faire face à une grande variété de matériel, y compris des machines avec des représentations d'entiers en signe-magnitude ou en complément à un, une mémoire segmentée, des représentations de pointeurs exotiques, et des tailles surprenantes pour les types. Certaines machines Honeywell, par exemple, avaient des octets de neuf bits. Cela a considérablement compliqué la tâche d'écrire un standard permettant d'écrire du code portable. L'approche adoptée a été de définir la sémantique du langage en termes de machine abstraite. Toutes les opérations doivent être exécutées comme si elles avaient tourné sur cette machine abstraite, qui peut ne pas correspondre exactement au matériel réel. Le comportement observable du programme doit être ce que la machine abstraite aurait fait.

Source: Hacker News · Résumé par HeadlinesBriefing