Dancing with Symmetry to Harness the Power of Complexity: Subjective Programming in Context
At any instant when you are programming, some details rise to the foreground and others recede into the background context. The manner in which the programming language supports context profoundly affects the ease of evolution and reuse. We propose a language paradigm that amplifies the power of object-oriented programming by explicitly supporting multi-dimensional context, and using it for dispatch and for program organization. The dispatch rules reduce to familiar delegation in the one- dimensional case and treat all dimensions equally and symmetrically. They are designed to allow programmers to evolve the system by adding dimensions. The paradigm can directly express, in a unified and simple fashion, many situations that are awkward with object-oriented programming or that usually require ad hoc mechanisms. Although it adds complexity to the object-oriented model, an environment can employ subjectivity with progressive disclosure to hide dimensions and present developer- specific views, thereby smoothing the learning curve. In this distillation of our 2013 SPLASH-i talk, we will introduce and illustrate the paradigm, give some details of context-based dispatch, and show a glimpse of our early prototype.