Revisiting extensions to Modula-2 to support reusability J. Börstler, A. Zündorf Achieving reusability is a central goal in programming. Since code can seldom be reused "as-is", it is advantageous to have language concepts that help in adapting code to different needs. In modern programming languages reuse is supported by constructs for encapsu- lation, genericity, and inheritance. But most programming languages in use do not support all of these facilities. It is therefore interesting to study how these languages can be used or maybe ex- tended to support reuse. We have chosen Modula-2 for this discussion for several reasons: (a) the recent discussion about this topic in the literature, (b) our own experiences, and (c) the simplicity of the language. It is our persuasion that most of the discussion can simply be transferred to other (procedural) languages. In this paper we review solutions for Modula-2 proposed in the li- terature. In addition we also present our own variations and ex- tensions to these solutions. We classify these solutions into so- lutions without changing the language, and solutions which extend Modula-2 in some way. Since Modula-2 is a strongly typed language without explicitly supporting genericity and/or inheritance, it is difficult to write really reusable code (e.g. generic abstract data types). Therefore, Modula-2 contains constructs for by-passing the type checking (ADR(...), ADDRESS, ARRAY OF BYTE/WORD). These con- structs can be used to introduce adaptability. Several examples are presented to clarify our ideas.