Friday, October 27, 2006

...and Wednesday at OOPSLA

Keynotes
Fortress presentation by Guy Steele. Many interesting details and concepts such as for a new programming language. Notation (ASCII with special notation but also Unicode is taken advantage of)It is built for growth, what does that mean then? If it can be done by a library let it be done in a library instead for example.Most interesting was the parallelism possibilities that was automatically provided and possibly never seen by programmers just library authors. Furthermore and more importantly, automatically and easily exploited when you set up your data types for example.

Onward! stuff
Intentional software, basically Domain specific languages deluxe, very interesting. Switching notations and using different representation models on the fly and they are perfectly transformable back and forth. Also started off with a interesting motivation example for domain specific languages. From a project description and discussion. Consider a 400pages long specification of a specific application in certain domain resulting in a million lines of code (about 20,000pages). What have we done? Taken 400 pages and scrambled them into 20,000 pages? More importantly what do we do today when something changes in those 400pages? We try to find where this effects our 20,000pages and change it in there. DSL is of course about trying to have this all described in a domain specific language and generate the actual code. Meaning we change what we need in those 400pages and then generate the result. Simplified way of putting it but very nice concept!

A nice insight for real world application of DSL: there are usually multiple domains involved. The specific customer's problem domain and perhaps a GUI domain. GUI domains and some examples of their representations in the cool tools shown here would have been very nice to have in our recent projects at work. Showing all the screens and the flow between them easily in one presentation model and then showing them in code and then in another outline model etc etc.

Then we had Pegasus, naturalistic language programming. From English text, understand it and generate the code. Example given: "If the first element of the second row in the matrix is less than 3, then print I understand you". Then showed how it is broken down into parts and understood and then generated java source code step by step. Very easy example of course, but showed the concept nicely. Interesting side note he had: If you can translate natural text to code you can reverse it as well... to another language! Multi-language documentation.

German and English for now and Java as the programming language it is translated into. Russian, Chinese, Turkish, .. are the next steps. As for programming languages Python and Haskell is next in line. Of course, at least that particular example, is even easier and shorter described in Ruby as Jon on my left and Anders on my right pointed out at the same time, both with example code on their laptops shown to me. Jon makes a good point when he says that a domain specific language would probably be much better suited for the task. I totally agree. If nothing else you would have to start off defining things first anyway, practically defining a domain specific language and terminology. But maybe we just don't know or have experience enough. It's not hard to remember to be humble about your knowledge and experience here at OOPSLA...

Tutorial
Effective Concurrent Programming in Java 5. This tutorial was held by Brian Goetz (my favourite java article writer) and David Holmes. Extremely knowledgeable guys. Now this is an area were I consider myself fairly knowledgeable about, and indeed the tutorial was for the most part about things already familiar to me. Code examples were great though and the second half of it provided me with some totally new things and hints such as the concept of "parking threads" (no not suspending but very lightweight co-operative suspension compared to the heavyweight wait/notify) and room synchronization combined with the implementation of your own locks using AbstractQueuedSynchronizer. I loved (but expected) the fact that they brought up things such compareAndSet and lock-free stuff. To end developers I think that there has been way too little talk about it, ever since I encountered it doing a project investigating lock-free data structures for super computers back at the university in -98/99. I'm definitely buying their new book.

Talking with Brian and David in the break and afterwards was very rewarding as well. Java 6 (Mustang) doesn't include much new things at all when it comes to the concurrent packages simply for the reason that they didn't get much feedback about it. Now this is probably due to not very many having even moved to Java 5 yet and even so, not that many taking advantage of the more advanced things in these packages. Combine this with the fact that this is all very well done in Java 5, who took great advantage of Doug Lea's expertise and libraries. JDK 7, not much planned there when it comes to the concurrent stuff, no JSRs, go ahead and make suggestions! Just some minor things.

Evening
In the evening all the conference participants had dinner at the Oregon Museum of Science & Industry. I also got to speak quite a bit more with Brian Goetz, very nice fellow, covering such thing as his new job at Sun with the current temporary job title "trouble maker". ;-)


After that some of us went out and downtown looking for different bars. Went sleep at about 3.30 in the morning...