Aller au contenu principal

Modularité et compilation

Progression

#Modularité et compilation

Assembler un programme C structuré commence par une séparation nette entre les interfaces (.h) et les implémentations (.c). Nous montrons comment bâtir des modules opaques : un fichier d’en-tête expose une API minimale tandis que le fichier source conserve les détails d’implémentation. Les include guards et #pragma once sont replacés dans une démarche de prévention des inclusions circulaires.

Le parcours suit ensuite la chaîne de compilation pas à pas. Un premier atelier demande d’observer la sortie du préprocesseur (cpp), puis nous compilons chaque module (gcc -c) avant de les lier (gcc module.o lib.o -o app). Cette montée en puissance débouche sur les optimisations : que signifient -O2 ou -flto ? quelles métriques surveiller ?

Le chapitre se conclut par la mise en place d’une infrastructure de tests et d’intégration continue. Nous écrivons un Makefile couvrant les cibles test, asan, ubsan et préparons un workflow GitHub Actions qui compile le projet sur Linux/macOS, exécute les tests et vérifie les analyzers. L’objectif est que chaque groupe reparte avec une ossature prête à être utilisée sur le projet Vaλisp.

#Atelier

  • Factorisez le projet Vaλisp en sous-modules (lexer, parser, vm).
  • Écrivez un Makefile générique avec compilation incrémentale et cibles debug/release.