Scalable Component Abstractions

Odersky and Zenger - Scalable Component Abstractions

We identify three programming language abstractions for the construction of reusable components: abstract type members, explicit selftypes, and modular mixin composition. Together, these abstractions enable us to transform an arbitrary assembly of static program parts with hard references between them into a system of reusable components. The transformation maintains the structure of the original system. We demonstrate this approach in two case studies, a subject/observer framework and a compiler front-end.
This is pretty cool stuff. It reminds me in some ways of the PLT Scheme units + mixins system described in Modular OO Programming With Units and Mixins, but it feels to me like this supports a much more natural programming style. (Obviously that's a subjective judgement, but what bothered me about the PLT system, at least as described in that paper, is the need to define units and stitch them together in order to define even simple mixin composition. It seems like a much too common operation to require that degree of plumbing, but maybe I didn't quite understand it.)

Anyway, I like it. (And, for Leon Smith, this is an eminently practical technique, motivated with very clear examples. I think most Java programmers would immediately "get" this.)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Aha, Observer

Now that we have Observer done with mixins, we can return to the discussion on the value of AOP. This time we will probably finally get to "crosscuttingness", and what it means.

[OT: is the title pronounced Scala-ble? :-)]

Please become editors

If you want to post new items referencing major paper and such, why not help out and become editors? It really ain't that complicated, you know.

OK, sign me up...

I don't really feel adequate to the task, but I'm willing to give it a shot... I'm currently using Drupal for another web site project, so I think I understand pretty well how it works...

Done :-)

Done :-)