On August 18, I successfully defended my PhD thesis entitled Structuring data via behavioural synthesis. I explored the idea of deriving data structure for objects in a system by examining the behavioural aspects of a system. I did all the programming for the work in Common Lisp and did three things in the thesis to demonstrate how behavioural synthesis can work.
The first was a framework for defining data types whose instances can change their internal structure to accommodate different conditions related to their usage. This is done at the individual object level. It allows for highly adaptive objects, but incurs significant overhead. This demonstrated using limited context to control structural changes.
The second approach used this framework to expand the contexts detected. In particular, I showed how you can define data types that are the union of other data types, possibly with intersecting interfaces. By considering where an object is created in the code and what is on the system stack, code is generated to capture this context. By putting the context directly into the code, the overhead of detecting the conditions in the objects is removed.
Finally, I demonstrated a more open-ended approach that offers up some interesting future work: building class hierarchies on-the-fly. The idea is to write programs without class definitions, but still use classes and objects. I augmented a Lisp system to handle three cases: no class defined, no slot defined and no method found. Using various clues, I come up with a class hierarchy and try it out. There are various limitations to the approach (no surprise!) but it's really interesting and worth some future study. That said, there are certain conditions where it produces reasonable class hierarchies.
The external examiner on the thesis was Richard P. Gabriel, who asked some good questions and gave me some ideas with what to do next with the work. In general, I got the impression the examination committee liked the work, even though it was imprecise in some areas. There are only some minor revisions to make before officially submitting it to the university.
I'm in the process of making the code available — it needs some serious clean-up in places — along with a tech report of the work. When I have the revisions complete and its been submitted to the university, I'll post a copy of the thesis online. Some may be interested in the introduction and literature survey. (One examiner said I should look at publishing the survey.) The more ambitious can dive into the technical elements.