Contrats pour C : une preuve de concept

2025-09-09
Contrats pour C : une preuve de concept

Cet article explore la possibilité d'introduire le concept de contrats de C++ dans le langage C. L'auteur propose une solution utilisant les macros `contract_assert` et `contract_assume` pour les vérifications de précondition et de postcondition, respectivement. La macro `defer` et la macro `unreachable` de C23 simplifient l'expression des postconditions. L'article montre comment les fonctions inline et les fonctions auxiliaires peuvent ajouter des vérifications de contrat sans modifier les implémentations principales des fonctions, en tirant parti des optimisations du compilateur. Bien qu'un raffinement de la spécification de l'interface soit encore nécessaire, cet article fournit une preuve de concept viable pour les contrats en C.

Lire plus
Développement Contrats

Alias de pointeurs C et optimisation du compilateur : un jeu de sécurité du code source

2025-06-30
Alias de pointeurs C et optimisation du compilateur : un jeu de sécurité du code source

Cet article approfondit l’impact de l’aliasing de pointeurs sur l’optimisation des programmes en C. L’aliasing de pointeurs fait référence à deux pointeurs pointant vers le même objet mémoire. Les compilateurs, lors de l’optimisation du code, doivent effectuer une analyse d’alias pour déterminer si les pointeurs sont des alias. Une mauvaise évaluation peut entraîner des erreurs de programme ou une dégradation des performances. L’article utilise un exemple de calcul réciproque pour illustrer que lorsque deux pointeurs peuvent être des alias, le compilateur ne peut pas effectuer certaines optimisations, car cela peut modifier l’algorithme du programme. L’auteur discute également des mécanismes en C qui aident à l’analyse d’alias, tels que le qualificateur de pointeur restrict et le qualificateur volatile, ainsi que des techniques d’analyse d’alias avancées, telles que l’analyse d’alias basée sur le type et l’analyse d’alias basée sur le flux. Enfin, l’auteur propose un nouveau modèle d’analyse d’aliasing de pointeurs qui prend en compte la durée de vie du pointeur et le flux d’informations, dans le but d’améliorer l’efficacité d’optimisation du compilateur et la sécurité du programme.

Lire plus

Qualification `const` des littéraux de chaînes en C : étude d’impact potentiel

2025-04-06
Qualification `const` des littéraux de chaînes en C : étude d’impact potentiel

Martin Uecker a proposé de modifier le type des littéraux de chaînes en C pour un type de base qualifié `const`, à l’image de C++. Bien que les compilateurs prennent en charge cette fonctionnalité depuis longtemps (certains par défaut), ce changement normatif pourrait avoir un impact sur le code existant. Pour évaluer cet impact, Uecker recherche des rapports factuels de développeurs sur leurs expériences avec les options de compilation pour la qualification `const` (par exemple, `-Wwrite-strings` de GCC). L’objectif est de recueillir des données sur la facilité de mise en œuvre, l’exposition des bogues de qualification et la faisabilité générale avant de poursuivre la proposition, en privilégiant les faits aux opinions.

Lire plus

Defer Simple en C : Implémentations Pratiques

2025-01-06
Defer Simple en C : Implémentations Pratiques

Cet article de blog explore des moyens pratiques d'implémenter un mot-clé `defer` en C, permettant des actions de nettoyage automatiques (comme la libération de mémoire ou le déverrouillage de mutex) après un bloc de code. L'auteur explique d'abord le but de `defer`, puis montre des implémentations utilisant des extensions GCC et des fonctionnalités C++. Enfin, une nouvelle proposition de syntaxe est présentée pour simplifier l'implémentation et l'utilisation de `defer`, améliorant ainsi considérablement la lisibilité et la sécurité du code C.

Lire plus
Développement