Time for some mental Spring cleaning. This is the first of several reviews I plan to do on interesting current research. First up is Alan Kay’s Viewpoints Research Institute. As the title states, he wants to reinvent programming. Again. The guiding goal of the project is to recreate the “personal computing experience” – from OS to apps – using dramatically fewer lines of code. They are looking for a “Moore’s Law” leap in software expressiveness of 3 or 4 orders of magnitude.
Their work so far is mostly a series of DSL experiments demonstrating impressively small line counts, for example TCP/IP in 200 lines. The basis for these DSL’s is the OMeta parsing language. It is built on top of Cola, which is a sort of cross between Scheme and Smalltalk. It is small and elegant like Scheme, and has message-passing semantics, and meta-messages for dynamically adaptable semantics. OMeta is a generalization of Parsing Expression Grammars to work over Cola datatypes, and with semantic actions written in Cola. Cola’s dynamic semantics allow OMeta grammars to often function as interpreters.
This is all very cute, but as they freely admit, they haven’t yet figured out how to pull these little DSL’s together to build large systems. What is needed, I think, is some new kind of modularity. There are some speculations about modularity in their progress report. Modules might be like “particles in a field”. Or modules might be like biological cells, that “notice” their environment and know how to respond. It is said that modules should carry a model of their environment. I look forward to seeing what they come up with on this central problem.
Overall, I have to say that I am full of admiration for Alan Kay and all the VPRI people. They are trying to do the right thing. They have a 5-year grant from the NSF, so they will get the chance to do something. This is what Computer Science should be. But isn’t. The sad fact is that their grant was gotten outside the peer-review process. It helps to have a Turing award. This research would never be funded in the normal manner. It simply doesn’t qualify as Computer Science by today’s standards. All the worse for Computer Science.
VPRI right now is most interested in publish/subscribe protocols, as I understand it. In other words, they believe that’s the key to connecting these large systems. I hear they really want to talk to experts in publish/subscribe protocols.
Alan Kay has more than just a Turing Award. He is published in pizzazz journals like Scientific American. These are generally reserved for people who write exceptionally clear and visionary articles that a four year old can understand, yet a 50 year old Ph.D. can still be amazed at.
Alan Kay is an unlisted member in the elite of computer science — in the regular sciences there is PNAS but the best computer industry title these days is Fellow of ACM or IEEE, like Hennessey, Ghosh, or Patterson.
I think the REBOL programming language has been focusing on this for approx a decade, with some success.
Here’s an example of using TCP at a low level to read a web page: http://www.rebol.net/r3blogs/0129.html
Yes, designing the pattern for “dynamic worldview & co-operation” IS designing click-in modularity.
The key to this “missing modularity problem” (IMHO) is appropriate definition of the essential “per-object-type-worldview-api”.
Perhaps, implemented as complementary common classes to support two types of questioning:
1) “interrogation” (broadcast and one-to-one)
Hey, ‘objects’, where am I ? Who are you, ‘object’ ? What do you do ‘object’? Can you help me ‘object(s)’?
2) “reflection”
What can ‘I’ do about that ? Where is ‘my’ data ? What can ‘I’ do to hep ?
Just like solutioning for “real world” (read: non software) problems, the greater the reflective capabilities, the greater the co-operation (thus, in less steps).
We need more
“Here, let me help you with that madam ?”
and less “WTF”?
Translated into software that has more
“Modularity::Interrogation::Broadcast::HELP_OFFERED?”
and less “Exception::Exception!”
Conclusions.
1) Object self-chatter is good.
2) Objects should have standard methods to test each other dynamically.
3) Having more of 1 & 2 leads to less code overall.
Agree or no ? Discuss.
what is it about the DSLs that doesn’t let them talk together? is it that the semantics aren’t defined + shared? is it that the datatypes aren’t defined + sharable?
i mean, it seems to me that if one is going to plug 2 things together and expect them to work, there has to be some fundamental agreement or successful translation between them for types and meaning.
?