A major problem for writing extensible software arises when recursively defined datatypes and operations on these types have to be extended simultaneously without modifying existing code. This paper introduces Extensible Algebraic Datatypes with Defaults which promote a simple programming pattern to solve this well known problem. We show that it is possible to encode extensible algebraic datatypes in an object-oriented language, using a new design pattern for extensible visitors. Extensible algebraic datatypes have been successfully applied in the implementation of an extensible Java compiler. Our technique allows for the reuse of existing components in compiler extensions without the
|
3620
|
Design Patterns: Elements of Reusable Object-oriented Software
– Gamma, Helm, et al.
- 1994
|
|
1415
|
The Java Language Specification
– Gosling, Joy, et al.
- 1996
|
|
762
|
On understanding types, data abstraction, and polymorphism
– Cardelli, Wegner
- 1985
|
|
298
|
Pizza into Java: Translating theory into practice
– Odersky, Wadler
- 1997
|
|
183
|
The reflexive chemical abstract machine and the join-calculus
– Fournet, Gonthier
- 1996
|
|
156
|
Monad transformers and modular interpreters
– Liang, Hudak, et al.
- 1995
|
|
125
|
MultiJava: Modular open classes and symmetric multiple dispatch for Java
– Clifton, Leavens, et al.
- 2000
|
|
112
|
Modular object-oriented programming with units and mixins
– FINDLER, M
- 1998
|
|
82
|
Object-oriented programming versus abstract data types
– COOK
- 1991
|
|
69
|
M.: JavaParty {Transparent Remote Objects in Java, in: Concurrency: Practice and Experience
– Philippsen, Zenger
|
|
50
|
Mixin modules
– DUGGAN, C
- 1996
|
|
50
|
The essence of the visitor pattern
– Palsberg, Jay
- 1997
|
|
39
|
Simple objects for Standard ML
– REPPY, RIECKE
- 1996
|
|
38
|
On objects and events
– Eugster, Guerraoui, et al.
- 2001
|
|
26
|
Compound types for Java
– Büchi, Weck
|
|
26
|
An Object-Oriented Compiler Framework
– Gagnon
- 1998
|
|
26
|
Programming with polymorphic variants
– Garrigue
- 1998
|
|
26
|
Synthesizing object-oriented and functional design to promote re-use
– KRISHNAMURTHI, FELLEISEN, et al.
- 1998
|
|
20
|
Programming Languages for Reusable Software Components
– Flatt
- 1999
|
|
20
|
Code reuse through polymorphic variants
– GARRIGUE
|
|
18
|
Compiler Construction
– Wirth
- 1996
|
|
14
|
The Objective Caml system release 3.00 Documentation and user's manual
– Leroy, Doligez, et al.
- 2000
|
|
11
|
Implementing extensible compilers
– Zenger, Odersky
- 2001
|
|
6
|
The expression problem. Discussion on the Java-Genericity mailing list
– Wadler
- 1998
|
|
6
|
Erweiterbare Übersetzer
– Zenger
- 1998
|
|
5
|
Modular abstract interpreters. Unpublished manuscript
– Findler
- 1995
|
|
3
|
Principles and preliminary design for ML2000
– Appel, Cardelli, et al.
- 1999
|
|
3
|
Synchronous Java compiler. Projet de semestre. École Polytechnique Fédérale de
– Cavin
- 2000
|
|
3
|
The evolution of numerical computing in Java. Sun Microsystems Laboratories. http://java.sun.com/people/jag/FP.html
– Gosling
|
|
3
|
A case for synchronous objects in compound-bound architectures. Unpublished. École Polytechnique Fédérale de Lausanne
– Petitpierre
- 2000
|
|
3
|
Mixin composition strategies for the modular implementation of aspect weaving — the EPP preprocessor and it’s module description language
– Roudier, Ichisugi
- 1998
|
|
3
|
Compound Types in Java. Projet de semestre. École Polytechnique Fédérale de
– Zermatten
- 2000
|
|
2
|
Extensible algebraic datatypes through prototypes and subtyping
– Mäenpää, Oksanen
- 2000
|
|
2
|
EspressoGrinder distribution
– Odersky, Philippsen
- 1995
|