{"id":62,"date":"2006-10-31T10:51:08","date_gmt":"2006-10-31T15:51:08","guid":{"rendered":"http:\/\/alarmingdevelopment.org\/?p=62"},"modified":"2006-10-31T10:51:40","modified_gmt":"2006-10-31T15:51:40","slug":"oopsla-2006","status":"publish","type":"post","link":"https:\/\/alarmingdevelopment.org\/?p=62","title":{"rendered":"OOPSLA 2006"},"content":{"rendered":"<p>Greetings from Portland, Oregon. Here are my impressions of OOPSLA 2006. <!--more--><\/p>\n<p>The high point for me was that a number of grad students and young professors told me that they had found Subtext interesting and even inspirational. I suppose that is actually the best outcome I can reasonably hope for &#8211; to infect some young minds with my ideas.<\/p>\n<p>The power failure was memorable. We were left sitting in the dim emergency lights, without projectors, mikes, or networking. Some people with Apple laptops set up an adhoc wifi network, and the speaker shared his slides over it. So we sat in little clusters on the floor around laptops, paging through the slides in synchrony with the speaker. Homo Digitus in the wild, huddled around the light of the laptop.<\/p>\n<p>As usual, there was a lot going on. I noticed one trend: providing alternative code presentations within an IDE (Eclipse, in almost all cases). <\/p>\n<p>Charles Simonyi gave a rather stuffy presentation of his &#8220;intentional programming&#8221; project. They are calling their product &#8220;Domain Workbench&#8221;. The demo showed how you could viz C# code in different ways, as typeset formulas, or spreadsheets (for unit tests), and various stylistic transformations. Actually a rather weak demo that showed only a fraction of their capabilities, and didn&#8217;t touch on Domain Specific Languages, which is what the talk was supposed to be about. I guess he is paranoid about revealing &#8220;secrets&#8221; to the &#8220;competition&#8221;. I gave Magnus Christerson an earful about the folly of being secretive and proprietary in today&#8217;s world, but I think he already knew that. Maybe the problem is that billionaires don&#8217;t get contradicted.<\/p>\n<p>The Safari project at IBM is an attempt to do something similar: building generic IDE&#8217;s from a DSL definition. They are focused on adding support for their X10 language into Eclipse, but have done it in a very general grammar-driven fashion that would enable many sorts of DSL&#8217;s to be supported. What is most impressive is how well integrated it is into Eclipse. They even have basic support for debugging in the DSL source language, which none of the competing projects has addressed yet. I would say Safari is the most impressive implementation of the IDE-generating idea I have seen. I would really like to know what Teitelbaum and Reps think about it (they first proposed the idea 30 years ago in the Cornell Program Synthesizer).<\/p>\n<p>Andrew Eisenberg, a student of Gregor Kiczales, demonstrated a framework for &#8220;language extension through presentation&#8221; (which happens to be a slogan from my Subtext paper).  He is using Java annotations to encode mappings into alternative views of fragments of code. His custom Eclipse editor notices those annotations and presents the alternative view, such as a mathematical formula, or even a state machine diagram. These views are fully editable. I didn&#8217;t ask the obvious questions: what happens if you modify the underlying Java code, like adding behavior to the state machine transitions. And how you debug it. Nevertheless a nice piece of work, notable because it was done by one grad student, rather than the big teams at IBM, IntentSoft, and Jetbrains.<\/p>\n<p>There were some more specialized code presentation techniques demonstrated. Emerson Murphy-Hill, a student of Andrew Black, showed how to visualize a potential refactoring by drawing various sorts of boxes and arrows in the code, and further indicate the errors blocking those refactorings.  Terry Hon, another student of Gregor, demonstrated &#8220;Fluid AOP&#8221;, which is basically doing aspect weaving incrementally in the IDE. You can define an aspect and see the code being inserted all over the place incrementally as you type. You can query your code on join points producing an (editable) view that gathers them together. A cute visualization is collapsing these gathered methods together to show what parts are common, and what parts vary (the parts that vary become gray boxes). You can edit the common parts and see the changes propagate into all the sources. This is so obviously the right way to do aspects.<\/p>\n<p>The whole idea of multiple custom views of code is catching on. Steve Reiss tried this in the 80&#8217;s but got little traction. What has changed since then is Eclipse (and the CPU speedup that made Eclipse possible). Almost all of the above work leverages off of Eclipse, which is turning out to be a great platform for research. I hope my little demo of example centric programming in Eclipse 2 years ago helped push this trend along. Andrew Black and Gregor Kiczales are leading the way in the academic space. I had a good chat with Andrew, who calls his group the <a href=\"http:\/\/amstel.cs.pdx.edu\/multiview\">Multiview Project<\/a>.<br \/>\nSee this <a href=\"http:\/\/web.cecs.pdx.edu\/~black\/publications\/Multiview%20WoDiSEE.pdf\">paper<\/a> for an eloquent statement of the idea.<\/p>\n<p>George Fairbanks, a student of David Garlan and Bill Scherlis, demoed his idea of &#8220;framework design fragments&#8221;. This was also implemented via custom views in Eclipse, but stands out from some of the above projects in that it goes beyond the zero-sum game of visualization, instead providing a way to add information to the code that isn&#8217;t already there. The idea is that complex frameworks (libraries on steroids, like J2EE or Eclipse itself) establish many ad hoc patterns of usage within their gargantuan API&#8217;s. Like what you need to do to register a URL protocol handler in a web framework. This can be specified as a subset of classes and methods both within the framework and the client, with various responsibilities assigned. The client classes and methods are assigned &#8220;roles&#8221; in this pattern, called a design fragment. The key idea is that you can annotate the client code to document the fragment roles it plays. This annotation can be done automatically for existing code, and as a side effect of letting these patterns guide the introduction of new code. The annotations drive custom views of the code that explicate pattern usage. He is also working on statically verifying various properties that these roles must satisfy, though I think the main advantage will rather be the documentation effect of capturing these patterns explicitly, and the IDE guidance (like completion) they can provide. What is nice about this work is that, unlike fancier &#8220;architecture description languages&#8221;, it is lightweight and semi-formal. I want to do similar things in Subtext.<\/p>\n<p>Tons of other stuff of course. Guy Steele gave an awesome talk about the design of Fortress.  Phil Wadler, donning a red cape and a blue lambda shirt, made the point that if we are visited by aliens, they are unlikely to recognize C++, but will surely know lambda calculus. A lot of talk about &#8220;Ultra Large Scale Systems&#8221;, primarily because the Army may dump some major funding on it.<\/p>\n<p>Next year OOPSLA is in Montreal. Au revoir.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Greetings from Portland, Oregon. Here are my impressions of OOPSLA 2006.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1,4],"tags":[],"class_list":["post-62","post","type-post","status-publish","format-standard","hentry","category-general","category-reviews"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pfEnU-10","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/62","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=62"}],"version-history":[{"count":0,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=\/wp\/v2\/posts\/62\/revisions"}],"wp:attachment":[{"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alarmingdevelopment.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}