Modular C
Résumé
We propose an extension to the C standard called Modular C. It consists in
the addition of a handful of directives and a naming scheme transforming
traditional translation units into modules. The change to the C language
is minimal since we only add one feature, composed identifiers, to the core
language.
Our modules can import other modules as long as the import relation remains
acyclic and a module can refer to its own identifiers and those of the
imported modules through freely chosen abbreviations. Other than
traditional C's #include, our import directive ensures complete
encapsulation between modules.
The abbreviation scheme allows to seamlessly replace an imported module by
another one with equivalent interface. In addition to the export of
symbols, we provide parameterized code injection through the import of
``snippets''. This implements a mechanism that allows for code reuse,
similar to X macros or templates.
Additional features of our proposal are a simple dynamic module
initialization scheme, a structured approach to the C library and a
migration path for existing software projects.
The whole approach is validated by a formal description of a translation
procedure from Modular C to common C and a proof of the correctness of
that procedure. Thereby we are able to show that the class of stable
programs can effectively be expressed in Modular C and that the gain of
modularity is not thwarted by a loss of expressiveness. Here stable
programs are those that do not use extensive C macro facilities that
manipulate identifiers.
Our approach is implemented and used successfully and efficiently in
several projects. Interfaces can easily be provided both ways, to interface
existing projects for Modular C or to interface Modular C libraries with
other programming languages
Nous proposons une extension au langage de programmation C, nommé
C modulaire. Elle consiste en ajoutant une poignée de directives et d’un schéma de
nommage à transformer des unités de traduction traditionnelles en module. La modification au language-même est minimale, car nous y ajoutons une seul nouvelle caractéristique, les identifiants composés. Nos modules peuvent importer autre modules
tant que la relation d’import reste acyclique et un module peut référer à ses propres identifiants et ceux des modules importés à l’aide d’abréviations librement choisis. Autre que l’include traditionnel, notre directive d’import assure l’encapsulation
complète entre modules. Le schéma d’abréviation permet de facilement remplacer un
module importé par un autre qui réalise le même interface. En plus à l’export de
symboles nous fournissons l’injection de code paramétré par l’importation de snippets. Ceci implante un mécanisme de réutilisation de code, similaire au X-macro ou template. Des outils supplémentaires que propose notre approche sont un schéma
d’initialisation, un approche structuré à la bibliothèque standard de C et un chemin
de migration pour des projets de logiciel existants.
Origine | Fichiers produits par l'(les) auteur(s) |
---|
Loading...