Abstract:
23 things I know about modules for Scheme The benefits of modularization are well known. However, modules are not standard in Scheme. This paper accompanies an invited talk at the Scheme Workshop 2002 on the current state of modules for Scheme. Implementation is not addressed, only linguistic features are covered. Cave lector, this paper only reflects my own and instantaneous biases! 1. MODULES The benefits of modularization within conventional languages are well known. Modules dissociate interfaces and implementations; they allow separate compilation (or at least independent compilation à la C). Modules tend to favor re-usability, common libraries and cross language linkage. Modules discipline name spaces with explicit names exposure, hiding or renaming. Quite often, they also offer qualified naming. These name spaces may cover variables, functions, types, classes, modules, etc. Just as components, modules may explicit their dependences that is, the other modules they require in order to work properly. Building a complete executable is done via modules linking or module synthesis in case of higher-order modules. Modules dependencies usually form a DAG but mutually dependent modules are sometimes supported. Proposals for modules for Scheme wildly differ among them (as will be seen) but they usually share some of the following features: Determinization of the building of modules — For us, this is the main feature that allows users to build a system S exactly as it should stand, that is, without any interference of the current system where S is developped and/or compiled. This is in contrast with, say the Smalltalk way, where the state of the entire (development) system staid in memory (or in image files) making notoriously
Citations
| 141 | The revised5 report on the algorithmic language Scheme – Kelsey, Clinger, et al. - 1998 |
| 42 | A Module System for Scheme – Curtis, Rauen - 1990 |
| 38 | Syntactic abstraction – Dybvig, Hieb, et al. - 1993 |
| 35 | Composable and compilable macros: You want it when – Flatt - 2002 |
| 21 | Designing MEROON v3 – Queinnec - 1993 |
| 16 | Modules, macros and Lisp – Queinnec, Padget - 1991 |
| 16 | Extending the scope of syntactic abstraction – Waddell - 1999 |
| 14 | Lisp in Small Pieces – Queinnec - 1996 |
| 9 | Macroexpansion reflective tower – Queinnec - 1996 |
| 9 | Roure. Sharing code through first-class environments – Queinnec, De - 1996 |
| 7 | The Incomplete Scheme 48 Reference Manual for release 0.57 – Kelsey, Rees - 1999 |
| 7 | A deterministic model for modules and macros – Queinnec, Padget - 1990 |
| 6 | version 3.0, A portable implementation of Scheme, 3.0 edition – Gambit-C - 1998 |
| 2 | Bigloo — A “practical Scheme compiler” for Bigloo version 2.5b – Serrano - 2002 |

