An extension of standard ML modules with subtyping and inheritance

We describe a general module language integrating abstract data types, specifications and object-oriented concepts. The framework is based on the Standard ML module system, with three main extensions: subtyping, a form of object derived from ML structures, and inherit ante primitives. The language aims at supporting a range of programming styles, including mixtures of object-oriented programming and programs built around specified algebraic or higher-order abstract data types. We separate specification from implementation, and provide independent inheritance mechanisms for each. In order to support binary operations on objects within this framework, we introduce “internal interfaces” which govern the way that function components of one structure may access components of another. The language design has been tested by writing a number of program examples; an implementation is under development in the context of a larger project.

[1]  John C. Mitchell,et al.  Type Systems for Programming Languages , 1991, Handbook of Theoretical Computer Science, Volume B: Formal Models and Sematics.

[2]  John C. Mitchell,et al.  Higher-order modules and the phase distinction , 1989, POPL '90.

[3]  John C. Mitchell,et al.  F-bounded polymorphism for object-oriented programming , 1989, FPCA.

[4]  Per Martin-Löf,et al.  Intuitionistic type theory , 1984, Studies in proof theory.

[5]  David C. Luckham,et al.  A new approach to prototyping Ada-based hardware/software systems , 1990, TRI-Ada '90.

[6]  Edsger W. Dijkstra,et al.  Notes on structured programming , 1970 .

[7]  Robin Milner,et al.  Definition of standard ML , 1990 .

[8]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[9]  William R. Cook,et al.  A Proposal for Making Eiffel Type-Safe , 1989, Comput. J..

[10]  John C. Mitchell,et al.  Coercion and type inference , 1984, POPL.

[11]  David B. MacQueen Using dependent types to express modular structure , 1986, POPL '86.

[12]  John C. Mitchell,et al.  Abstract types have existential type , 1988, TOPL.

[13]  Ravi Sethi,et al.  Programming languages - concepts and constructs , 1988 .

[14]  Olaf Owe,et al.  ANNA A Language for Annotating Ada Programs , 1987, Lecture Notes in Computer Science.

[15]  David C. Luckham,et al.  Task Sequencing Language for Specifying Distributed Ada Systems , 1987, PARLE.

[16]  Luca Cardelli,et al.  Typeful Programming , 1989, Formal Description of Programming Concepts.

[17]  Jean D. etc. Ichbiah Reference Manual for the ADA Programming Language , 1983 .

[18]  John C. Mitchell,et al.  The essence of ML , 1988, POPL '88.

[19]  David Robson,et al.  Smalltalk-80: The Language and Its Implementation , 1983 .

[20]  Mitchell Wand,et al.  Complete Type Inference for Simple Objects , 1987, LICS.

[21]  Andrew P. Black,et al.  Object structure in the Emerald system , 1986, OOPLSA '86.

[22]  Alan Snyder Encapsulation and inheritance in object-oriented programming languages , 1986, OOPSLA 1986.

[23]  John C. Mitchell Toward a typed foundation for method specialization and inheritance , 1989, POPL '90.

[24]  John C. Mitchell,et al.  F-bounded quantification for object-oriented programming , 1989 .

[25]  David B. MacQueen Modules for standard ML , 1984, LFP '84.

[26]  Luca Cardelli,et al.  Operations on Records , 1989, Mathematical Foundations of Programming Semantics.

[27]  John C. Mitchell,et al.  ML with extended pattern matching and subtypes , 1988, LISP and Functional Programming.

[28]  Rance Cleaveland,et al.  Implementing mathematics with the Nuprl proof development system , 1986 .

[29]  Didier Rémy,et al.  Type checking records and variants in a natural extension of ML , 1989, POPL '89.

[30]  Luca Cardelli,et al.  On understanding types, data abstraction, and polymorphism , 1985, CSUR.

[31]  Bjarne Stroustrup,et al.  C++ Programming Language , 1986, IEEE Softw..

[32]  John C. Mitchell,et al.  Abstract types have existential types , 1985, POPL.