Analyzing Module Diversity
Alexandre Bergel (Software Composition Group, University of Bern, Switzerland)
Stéphane Ducasse (LISTIC - Language and Software Evolution Group, University of Savoie, France)
Oscar Nierstrasz (Switzerland, Software Composition Group, University of Bern)
Abstract: Each objectoriented programming language proposes various grouping mechanisms to bundle interacting classes (i.e., packages, modules, selector namespaces, etc). To understand this diversity and to compare the different approaches, a common foundation is needed. In this paper we present a simple module calculus consisting of a small set of operators over environments and modules. Using these operators, we are then able to specify a set of module combinators that capture the semantics of Java packages, C# namespaces, Ruby modules, selector namespaces, gbeta classes, classboxes, MZScheme units, and MixJuice modules. We develop a simple taxonomy of module systems, and show how particular combinations of module operators help us to draw sharp distinctions between classes of module systems that share similar characteristics.
Keywords: C#, Java, Ruby, Small-talk, classboxes, module, package, selector namespaces, virtual classes
Categories: D.1.5, D.2.1, D.2.2, D.3.2, D.3.3