<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//TaxonX//DTD Taxonomic Treatment Publishing DTD v0 20100105//EN" "../../nlm/tax-treatment-NS0.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tp="http://www.plazi.org/taxpub" article-type="research-article" dtd-version="3.0" xml:lang="en">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">109</journal-id>
      <journal-id journal-id-type="index">urn:lsid:arphahub.com:pub:3dc5f44e-8666-58db-bc76-a455210e8891</journal-id>
      <journal-title-group>
        <journal-title xml:lang="en">JUCS - Journal of Universal Computer Science</journal-title>
        <abbrev-journal-title xml:lang="en">jucs</abbrev-journal-title>
      </journal-title-group>
      <issn pub-type="ppub">0948-695X</issn>
      <issn pub-type="epub">0948-6968</issn>
      <publisher>
        <publisher-name>Journal of Universal Computer Science</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.3217/jucs-011-10-1613</article-id>
      <article-id pub-id-type="publisher-id">28490</article-id>
      <article-categories>
        <subj-group subj-group-type="heading">
          <subject>Research Article</subject>
        </subj-group>
        <subj-group subj-group-type="scientific_subject">
          <subject>D.1.5 - Object-oriented Programming</subject>
          <subject>D.2.1 - Requirements/Specifications</subject>
          <subject>D.2.2 - Design Tools and Techniques</subject>
          <subject>D.3.2 - Language Classifications</subject>
          <subject>D.3.3 - Language Constructs and Features</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Analyzing Module Diversity</article-title>
      </title-group>
      <contrib-group content-type="authors">
        <contrib contrib-type="author" corresp="yes">
          <name name-style="western">
            <surname>Bergel</surname>
            <given-names>Alexandre</given-names>
          </name>
          <email xlink:type="simple">bergel@iam.unibe.ch</email>
          <xref ref-type="aff" rid="A1">1</xref>
        </contrib>
        <contrib contrib-type="author" corresp="no">
          <name name-style="western">
            <surname>Ducasse</surname>
            <given-names>Stéphane</given-names>
          </name>
          <xref ref-type="aff" rid="A2">2</xref>
        </contrib>
        <contrib contrib-type="author" corresp="no">
          <name name-style="western">
            <surname>Nierstrasz</surname>
            <given-names>Oscar</given-names>
          </name>
          <xref ref-type="aff" rid="A3">3</xref>
        </contrib>
      </contrib-group>
      <aff id="A1">
        <label>1</label>
        <addr-line content-type="verbatim">Software Composition Group, University of Bern, , Switzerland</addr-line>
        <institution>Software Composition Group, University of Bern</institution>
        <country>Switzerland</country>
      </aff>
      <aff id="A2">
        <label>2</label>
        <addr-line content-type="verbatim">LISTIC - Language and Software Evolution Group, University of Savoie, , France</addr-line>
        <institution>LISTIC - Language and Software Evolution Group, University of Savoie</institution>
        <country>France</country>
      </aff>
      <aff id="A3">
        <label>3</label>
        <addr-line content-type="verbatim">Software Composition Group, University of Bern, Bern, Switzerland</addr-line>
        <institution>Software Composition Group, University of Bern</institution>
        <addr-line content-type="city">Bern</addr-line>
        <country>Switzerland</country>
      </aff>
      <author-notes>
        <fn fn-type="corresp">
          <p>Corresponding author: Alexandre Bergel (<email xlink:type="simple">bergel@iam.unibe.ch</email>).</p>
        </fn>
        <fn fn-type="edited-by">
          <p>Academic editor: </p>
        </fn>
      </author-notes>
      <pub-date pub-type="collection">
        <year>2005</year>
      </pub-date>
      <pub-date pub-type="epub">
        <day>28</day>
        <month>10</month>
        <year>2005</year>
      </pub-date>
      <volume>11</volume>
      <issue>10</issue>
      <fpage>1613</fpage>
      <lpage>1644</lpage>
      <uri content-type="arpha" xlink:href="http://openbiodiv.net/F7306C01-3C1B-518A-8CFE-1210051B8A54">F7306C01-3C1B-518A-8CFE-1210051B8A54</uri>
      <uri content-type="zenodo_dep_id" xlink:href="https://zenodo.org/record/6996867">6996867</uri>
      <permissions>
        <copyright-statement>Alexandre Bergel, Stéphane Ducasse, Oscar Nierstrasz</copyright-statement>
        <license license-type="creative-commons-attribution" xlink:href="" xlink:type="simple">
          <license-p>This article is freely available under the J.UCS Open Content License.</license-p>
        </license>
      </permissions>
      <abstract>
        <label>Abstract</label>
        <p>Each object­oriented 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.</p>
      </abstract>
    </article-meta>
  </front>
</article>
