Distinguished Artifact at ECOOP 2023
Andong and I are delighted and honored to receive an ECOOP Distinguished Artifact award
for our 2023 paper on super
-Charging Object-Oriented Programming Through Precise Typing of Open Recursion!
Our approach reformulates object-oriented programming around three simple and orthogonal constructs: classes for storing object state, interfaces for expressing object types, and mixins for reusing and overriding implementations. Mixins are containers of partial implementations that can override and be overridden by implementations from other mixins, which happens when all mixins are composed together in a class definition.
For instance (you can try this code in the demo below):
mixin M1 { fun test = 21 }
mixin M2 { fun test = super.test * this.factor }
class C1(factor: Int) extends M1, M2
C1(2).test // returns 42
Our paper describes a way of type checking these mixin definitions precisely,
inferring the specific requirements that each mixin puts on its uses this
and super
.
Moreover, mixins may change the types of definitions being overridden.
Together with MLscript’s advanced structural type system (which supports a powerful form of extensible variants),
this offers a neat solution to the well-known Expression Problem.
Our implementation demonstrates a complete integration of this OOP discipline within MLscript, leveraging MLscript’s existing subtype inference system so that all types can typically be inferred from mixin-based user programs. You can find our implementation on GitHub and try it in the web demo embedded below, also available here in full-screen.
Fun fact: while our artifact was praised this year and obtained all badges (available, functional, and reusable), a very similar artifact was rejected from obtaining the reusable badge at last year’s OOPSLA, mainly because it lacked high-level codebase documentation at the time 😢