Independently Extensible Solutions to the Expression Problem

The expression problem is fundamental for the development of extensible software. Many (partial) solutions to this problem have been proposed in the past, but the question of how to use different, independent extensions jointly has received less attention so far. This paper proposes solutions to the expression problem that make it possible to combine independent extensions in a flexible, modular, and typesafe way. The solutions, formulated in the programming language Scala, are affected with only a small implementation overhead and are relatively easy to implement by hand.

[1]  Thomas Kühne,et al.  The Translator Pattern - External Functionality with Homomorphic Mappings , 1997, TOOLS.

[2]  Mads Torgersen The expression problem revisited: Four new solutions using generics , 2004 .

[3]  Martin Odersky,et al.  Implementing Extensible Compilers , 2001 .

[4]  Robert Bruce Findler,et al.  Modular object-oriented programming with units and mixins , 1998, ICFP '98.

[5]  Jens Palsberg,et al.  The essence of the Visitor pattern , 1998, Proceedings. The Twenty-Second Annual International Computer Software and Applications Conference (Compsac '98) (Cat. No.98CB 36241).

[6]  Erik Ernst,et al.  Family Polymorphism , 2001, ECOOP.

[7]  Martin Odersky,et al.  Making the future safe for the past: adding genericity to the Java programming language , 1998, OOPSLA '98.

[8]  Kim B. Bruce,et al.  Subtyping Is Not a Good "Match" for Object-Oriented Languages , 1997, ECOOP.

[9]  Kim B. Bruce,et al.  PolyTOIL: A Type-Safe Polymorphic Object-Oriented Language , 1995, ECOOP.

[10]  Martin Odersky,et al.  An Overview of the Scala Programming Language Second Edition , 2006 .

[11]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[12]  Christian Grothoff Walkabout Revisited: The Runabout , 2003, ECOOP.

[13]  Tom Mens,et al.  Towards a taxonomy of software change , 2005, J. Softw. Maintenance Res. Pract..

[14]  Jacques Garrigue,et al.  Code reuse through polymorphic variants , 2000 .

[15]  Martin Odersky,et al.  Extensible algebraic datatypes with defaults , 2001, ICFP '01.

[16]  Oscar Nierstrasz,et al.  Traits: Composable Units of Behaviour , 2002, ECOOP.

[17]  Kim B. Bruce Some challenging typing issues in object-oriented languages , 2003, WOOD.

[18]  Mads Torgersen Virtual types are statically safe , 1998 .

[19]  Gary T. Leavens,et al.  MultiJava: modular open classes and symmetric multiple dispatch for Java , 2000, OOPSLA '00.

[20]  Ole Lehrmann Madsen,et al.  Virtual classes: a powerful mechanism in object-oriented programming , 1989, OOPSLA 1989.

[21]  William R. Cook,et al.  Mixin-based inheritance , 1990, OOPSLA/ECOOP '90.

[22]  Erik Ernst,et al.  Higher-Order Hierarchies , 2003, ECOOP.

[23]  Clemens A. Szyperski Independently Extensible Systems - Software Engineering Potential and Challenges , 1996 .

[24]  Martin Odersky,et al.  An Overview of the Scala Programming Language , 2004 .

[25]  Gilad Bracha,et al.  Adding wildcards to the Java programming language , 2004, SAC '04.

[26]  Todd D. Millstein,et al.  Modular typechecking for hierarchically extensible datatypes and functions , 2002, ICFP '02.

[27]  Martin Odersky,et al.  A Nominal Theory of Objects with Dependent Types , 2003, ECOOP.

[28]  Todd Millstein,et al.  Relaxed MultiJava: balancing extensibility and modular typechecking , 2003, OOPSLA 2003.

[29]  Klaus Ostermann,et al.  Dynamically Composable Collaborations with Delegation Layers , 2002, ECOOP.

[30]  Matthias Felleisen,et al.  Synthesizing Object-Oriented and Functional Design to Promote Re-Use , 1998, ECOOP.

[31]  William R. Cook,et al.  Object-Oriented Programming Versus Abstract Data Types , 1990, REX Workshop.

[32]  Xavier Leroy The objective caml system release 3 , 2001 .