<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-36017112</id><updated>2012-01-15T03:24:55.319Z</updated><title type='text'>Featherweight Musings</title><subtitle type='html'>Musings and observations on the world of programming language design and theory. Mostly about Featherweight X, where X is some real or imagined language.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default?start-index=101&amp;max-results=100'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36017112.post-9059056426926487474</id><published>2012-01-15T03:13:00.002Z</published><updated>2012-01-15T03:24:55.337Z</updated><title type='text'>Mozilla</title><content type='html'>I started a new job as a software developer at Mozilla on Monday. My first week was interesting and exhausting - lots of work, but lots of fun too! I am working on porting bits of the graphics back end to use graphics hardware, specifically clipping - at present this is done for rectangle clipping, but we want to support &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=716439"&gt;rounded rectangles&lt;/a&gt; and general clipping paths. I'll write more about that as I actually do it.&lt;br /&gt;&lt;br /&gt;So far, I have mostly been trying to get to terms with the Firefox code-base - it is huge and complex, although surprisingly well-written and organised (not that I expected it to be badly written, but with large, long-running projects, you expect a certain amount of code degradation). It has been quite good fun trying to get a grasp on how it all works (or at least the layout/graphics bits of it I'm working with) - kind of like being a detective. Although I felt like I was drowning in code the first few days, and still whenever I think I understand something, it turns out to be more complicated than I thought most of the time...&lt;br /&gt;&lt;br /&gt;I've also been experimenting a bit with writing shaders, OpenGL/GLSL so far, DirectX/HLSL soon. Writing graphics code is fun - pretty pictures!&lt;br /&gt;&lt;br /&gt;One of the best things about working at Mozilla so far, is working with smart, enthusiastic, and dedicated people. It feels like a very positive environment. Makes it much easier getting to grips with new code and new techniques, tools, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-9059056426926487474?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/9059056426926487474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=9059056426926487474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9059056426926487474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9059056426926487474'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2012/01/mozilla.html' title='Mozilla'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8681902928969241130</id><published>2011-12-28T09:14:00.000Z</published><updated>2011-12-28T09:15:20.073Z</updated><title type='text'>The Kiwi Rule</title><content type='html'>Driving in NZ is pretty sweet, the only thing that catches out new arrivals is the `give way to the right' rule, aka the Kiwi rule. Simply described, if you are turning left, you must give way to anyone turning right. They are actually getting rid of this rule next year, and I expect it to be carnage, but in the mean time, I find the rule really interesting, for a number of vaguely computer science related reasons.&lt;br /&gt;&lt;br /&gt;First of all, assuming people do everything right, it shouldn't matter whether you give way to the right or left, as long as there is a protocol, then everything should work out. Which is our first computer science lesson (or rather software engineering) - you have to design for the error cases too...&lt;br /&gt;&lt;br /&gt;When it works, the Kiwi rule is good as it improves overall contention at a junction, although it is a little counter-intuitive why. With give way to the left (the UK/Aus convention), you often get queues where someone wants to turn right, but there is a steady stream of cars coming in the opposite direction, either straight on or turning left (I'm assuming its just a turn off a main road). The car turning right has to wait for a gap in the traffic, which may not come for some time. In the give way to the right system, the car only has to wait until someone wants to go left, which occurs more often than a gap (well, a gap will suffice also). You might think this just means you get a queue on the other side of the road, but the car turning left only has to wait for no cars in the opposite direction turning right, which is actually the common case. So, wait times, and thus queues, are reduced. In comp sci terms, you adopt a clever scheduling algorithm to reduce contention.&lt;br /&gt;&lt;br /&gt;Of course, there is no free lunch. Contrary to most road rules, signalling is essential to the Kiwi rule functioning. If someone accidently leaves on their left indicator, when they are actually going straight on, they can cause a crash if someone else coming from the opposite direction thinks they can turn right. Likewise, if the car turning right forgets to indicate and the car turning left therefore doesn't give way. So, for the Kiwi rule, signalling changes the semantics of the protocol, and this means incorrect signalling can lead to crashes, kind of like an unsound type system, or possibly a language where the type system affects the semantics.&lt;br /&gt;&lt;br /&gt;So, for the sake of safety over speed, it's probably a good thing it is being scrapped; but I will be sad to see it go, it seems to me like a formalisation of  politeness in driving, and fits nicely with the NZ attitude to life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8681902928969241130?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8681902928969241130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8681902928969241130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8681902928969241130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8681902928969241130'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/12/kiwi-rule.html' title='The Kiwi Rule'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7534374283527819069</id><published>2011-12-20T22:46:00.002Z</published><updated>2011-12-20T22:50:46.193Z</updated><title type='text'>Things not to like about NZ</title><content type='html'>I seem to spend a lot of time telling friends and family how awesome New Zealand is, so this blog post is meant to be a counterpoint, where I vent my spleen about a few of the things that are bad about living in NZ. Don't get me wrong though, the list of things that are good would be way too long for a post, and moving here was one of the better life decisions I've made.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sandstone &lt;/span&gt;(most important) - a nice sandstone bouldering area would be nice. God I miss sandstone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;It's a long way from anywhere&lt;/span&gt; - this is the biggie for me, it's a pain to get anywhere, and especially anywhere interesting. Doing the long weekend in Europe or a few weeks in the Middle East or North Africa, etc. would be really nice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tea &lt;/span&gt;- we pretty much solved this one by bringing over 500 tea bags whenever we go to the UK, but still, what is the point of Kiwi tea, you can barely taste it, more like a cup of hot water that dreams of being tea when it grows up. I tried using two or three tea bags at once, but it's still not right.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Beer &lt;/span&gt;- proper beer, not lager (Kiwi lager is excellent, some of the best I've tasted). Why can't you get a proper ale or bitter in this country?&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;The climbing walls are all crap&lt;/span&gt; -  why? I don't know, there are some largish ones, but still they don't seem to be able to get it together properly, surely it's not that hard?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Horrific child abuse&lt;/span&gt; - not funny this one. Not sure if its because there's no other crime to report, but torturing your children to death seems a little too common.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Stuff is expensive&lt;/span&gt; - I know it's a small market and all, but if I can international mail order stuff retail and pay the postage and tax and it's still 30% cheaper than in the shops, then something is wrong.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Muesli &lt;/span&gt;- yet to find a brand I like.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Slow and expensive internet&lt;/span&gt; - and not having free wireless everywhere like in a proper country.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Public transport&lt;/span&gt; - it doesn't go where you want it to go, and it doesn't go there very often. Airports seem to be particularly poorly served.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The pollen&lt;/span&gt; - I really suffer with the hayfever, especially in Christchurch.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pumpkin &lt;/span&gt;- I like pumpkin as much as the next man (probably more in fact), but it would be nice to just once find a vegetarian dish in a restaurant that ddoesn't include pumpkin.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ozone hole&lt;/span&gt; - it would be nice to be able to go out in the sun without feeling like you are being x-rayed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7534374283527819069?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7534374283527819069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7534374283527819069' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7534374283527819069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7534374283527819069'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/12/things-not-to-like-about-nz.html' title='Things not to like about NZ'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1918240242203833574</id><published>2011-12-18T22:19:00.001Z</published><updated>2011-12-18T22:21:10.265Z</updated><title type='text'>Compiling Firefox</title><content type='html'>A few posts back I described my slightly painful experience compiling Cairo. It was thus with some trepidation that I approached compiling Firefox (which includes Cairo), also on Windows. As it turns out it was a breeze, the only slightly tricky bit being finding the executable at the end. Instructions are here, and they are pretty accurate.&lt;br /&gt;&lt;br /&gt;Check out Firefox from the repository of you choice using Mercurial.&lt;br /&gt;&lt;br /&gt;Download the Mozilla Build Environment.&lt;br /&gt;&lt;br /&gt;Run the Build Environment from the Visual Studio command prompt.&lt;br /&gt;&lt;br /&gt;Make Firefox ("make -f client.mk" in your Firefox source directory).&lt;br /&gt;&lt;br /&gt;Wait for some time (I left it running over night, not sure how long it actually took, but at least a few hours).&lt;br /&gt;&lt;br /&gt;The executable is in the obj.../dist/bin directory, which is nested inside your Firefox source directory.&lt;br /&gt;&lt;br /&gt;Easy-peasy huh? Why couldn't Cairo be that easy?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1918240242203833574?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1918240242203833574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1918240242203833574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1918240242203833574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1918240242203833574'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/12/compiling-firefox.html' title='Compiling Firefox'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1113892829290683238</id><published>2011-12-18T22:18:00.000Z</published><updated>2011-12-18T22:19:36.428Z</updated><title type='text'>Christchurch</title><content type='html'>I've lived in Christchurch for the last year, minus a few months in India and Europe. We picked a pretty bad time to move to Christchurch really, and in a way, the year has been dominated by the earthquakes. Even before the quakes, Chch was not as nice a city as Wellington, so my list here of things I've liked about Chch was always going to be shorter than last year's, but with the quakes closing the city centre for pretty much the whole year, it has been a bit bleak. Anyway, I don't want to dwell on the negatives, so without further ado, here is my list of things I'll miss about Chch.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Castle Hill&lt;/span&gt; - Far and away the best bouldering in NZ. Flock Hill is total classic, Quantum Field and Spittle Hill are good when you want something a bit different. I still haven't really got the hang of climbing on limestone, but it's still a lot of fun. And the whole area is amazingly beautiful. Also, Cave Stream on a summers day is lots of fun.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Snowboarding &lt;/span&gt;- I started learning this year, and it is so much fun. And there are so many ski-fields around Christchurch, it's amazing, and they're good and not too busy, and some of them even serve good coffee. Oh, and you can get a season pass for all of them for not very much money, how awesome is that?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;C4 &lt;/span&gt;- Amazing coffee. Really, their flat whites are the best I've tasted, and consistent too, all but one coffee I've had in a year have been perfect, and the one was still above average.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lyttelton &lt;/span&gt;- Before the quake at any rate, Lyttelton was a really nice town, loved the character and the cafes and bars around the main street. I really hope it comes back with the rebuild.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Bodhi Tree&lt;/span&gt; - Burmese restaurant in Ilam, one of the few city centre restaurants that managed to relocate, but a really good one. I'd not had Burmese food before, and I'd been missing out. Some nice wines too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RDU&lt;/span&gt; - Good radio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sweet Kitchen&lt;/span&gt; - Behind Merivale mall, good (but expensive) cakes,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bank's Peninsula&lt;/span&gt; - Not really in Chch, but close enough, the roads to Diamond Harbour or Akaroa are brilliant for riding a motorbike. And it's very pretty, and Akaroa is a really cool little town. I imagine the peninsula would be a great place to chill out and do nothing for a few days.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, lets see what Auckland is like...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1113892829290683238?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1113892829290683238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1113892829290683238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1113892829290683238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1113892829290683238'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/12/christchurch.html' title='Christchurch'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-2422807666082649595</id><published>2011-09-24T22:49:00.002+01:00</published><updated>2011-09-24T23:03:35.609+01:00</updated><title type='text'>Amazon Kindle</title><content type='html'>I bought a Kindle a few months back and I love it! It is the first gadget that I've truly connected with and I think I would be more upset about losing it than my laptop, But, I am deeply conflicted about the whole ebook thing.&lt;br /&gt;&lt;br /&gt;The Kindle is damn fine: the hardware is nearly perfect, of course it could always be smaller, lighter, and have a bigger screen (and I never use the keyboard, so that is dead space to me), and the software is pretty good, although there is room for improvement here (it crashes more often than I'd like, viewing two column PDFs is pretty poor, it takes ages for big files such as audio books to appear, etc.). So, I have no big complaints with the device, and it is extraordinarily convenient. Being able to buy books and read them in seconds is amazing, it's great for travelling with - I recently travelled round India with mine using the Lonely Planet PDFs (pro tip: avoid the LP Kindle editions like the plague) and a whole bunch of books I would not have been able to carry otherwise, and it's a nice reading experience in a way I can't quite put my finger on.&lt;br /&gt;&lt;br /&gt;BUT, I'm already fighting the urge to buy paper copies of my ebooks. Having real books is so nice, it's something I grew up with, and having a book case full of good books to browse and just have around is really important to me. There is something aesthetic about all the colourful spines, as well as the ease of browsing and the serendipity factor of some old book jumping out at you for a re-read. I don't see the Kindle coming close at the end of the day, or anyway to get around this fundamental barrier. I am already using the Kindle to read books I don't think I'll want to read again or have around, and saving the good ones for the real thing.&lt;br /&gt;&lt;br /&gt;And then there's the cost. On Amazon, Kindle books are only a whisker cheaper than their paper equivalents, which to me means someone is making a big profit over the paper, and I would bet anything you like it's not the author. So I feel like I'm paying a premium for an inferior product. If I lived in the UK, I would probably only use the Kindle for travelling.&lt;br /&gt;&lt;br /&gt;However, it's a lot cheaper than buying the book in New Zealand (where books are extortionately expensive) and I don't need to wait for weeks for them to turn up by mail, so here and now, the ebooks have an edge. If you live in NZ, buy a Kindle, you'll save a fortune.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-2422807666082649595?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/2422807666082649595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=2422807666082649595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2422807666082649595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2422807666082649595'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/09/amazon-kindle.html' title='Amazon Kindle'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6590880968978922903</id><published>2011-09-09T23:52:00.002+01:00</published><updated>2011-09-10T00:07:05.583+01:00</updated><title type='text'>Algorithms</title><content type='html'>I was never a fan of algorithms as an undergrad. Whether it was the way they were taught or my attitude at the time, I don't know, but I didn't like them. It felt like dull rote learning, un-practical because, you could always look up an algorithm that you needed, right? (In contrast, I always had a soft spot for data structures, for some reason they just seemed so intuitive and stick in my head without me really trying, and there is something creative and almost artistic about some of the fancier ones).&lt;br /&gt;&lt;br /&gt;I am currently applying for software development jobs, and I think my knowledge of algorithms is one of my weakest points. Programming is like riding a bike, it seems to just come back, I think I have pretty good 'general knowledge' about computer stuff, and I have a good idea of design things from my teaching, but algorithms are a bit of a gaping hole in my knowledge, and since they are a necessary thing to know for the more interesting jobs, and seem to be the number one thing to ask at interview, I thought I ought to improve...&lt;br /&gt;&lt;br /&gt;So, I have been reading a lot and programming a lot of algorithm-type problems (makes a change from compiler things), and I've been really enjoying it. I don't know what's changed, but this time round I'm finding the algorithms stuff really interesting. It's amazing how some of these work, the creativity of some of them is amazing. And tackling algorithm-type problems (see, e.g., Google code jam, topcoder, endless olympiads/programming competitions) is lots of fun. I used to think of these as distractions from 'proper' coding, but it's great to really think about some of these things and often the model answers or commentaries are illuminating.&lt;br /&gt;&lt;br /&gt;Anyway, just thought I'd write a little about the fun I'm having...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6590880968978922903?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6590880968978922903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6590880968978922903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6590880968978922903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6590880968978922903'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/09/algorithms.html' title='Algorithms'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5718388707664132246</id><published>2011-06-20T00:19:00.002+01:00</published><updated>2011-06-20T01:11:43.844+01:00</updated><title type='text'>Tetris</title><content type='html'>As a mini-project to get my hand back in with C++ and to learn the Cairo graphics library, I made a Tetris clone. It is surprisingly playable! You can download an executable &lt;a href="http://www.doc.ic.ac.uk/%7Encameron/Tetris.zip"&gt;here&lt;/a&gt; and the source code &lt;a href="http://www.doc.ic.ac.uk/%7Encameron/tetris_src.zip"&gt;here&lt;/a&gt; (bear in mind that the quality of the code is not high, more later), it requires Windows, but not a particularly recent version (probably). I am pleased that it looks and plays so well, and pleasantly surprised how quickly the C stuff came back after a few years away from it. The code itself is bordering on the trivial, but I spent a long time looking up library stuff, so it took longer than expected. Cairo, it turns out, is a nice graphics library to use.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-f4omg1KRSKc/Tf6QEMksoTI/AAAAAAAAAAQ/13ytpRmuIXI/s1600/tetris.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 274px;" src="http://1.bp.blogspot.com/-f4omg1KRSKc/Tf6QEMksoTI/AAAAAAAAAAQ/13ytpRmuIXI/s320/tetris.gif" alt="" id="BLOGGER_PHOTO_ID_5620087786773979442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Since this is more of a learning exercise than anything else, the project is far from perfect. Rather than spend lots of time making it so, I thought it would be more beneficial to critique the code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;'Requirements'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I am happy with how the game plays and it has all the main features of Tetris. It is deliberately missing quite a lot too: score, high score board, music, sound effects, an intro screen, the 'B' game, and probably a load more I can't remember. I could also spend more time tweaking the piece rotations and the starting positions and other general UI/presentation stuff.&lt;br /&gt;&lt;br /&gt;I used the Windows API to make the window and handle input and the game loop/timer. This worked quite well, but has downsides - if the processor gets busy, the game stutters a little, it is not greatly efficient or robust and it is not portable. To make a really professional version, I'd want to use DirectX or something (although, that wouldn't make it very portable) and handle the game/input loop myself. I also cut a lot of corners on the Windows side of things, there is just a basic window, I should make it non-resizeable and tweak a whole load of settings etc., but that was not the focus of the project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Design&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'm happy with the overall deconstruction into classes. I think most of the concepts are right, and the classes are about the right size. I like the use of the flyweight pattern to represent squares (i.e., the components of a piece in the board). However, there is definitely room for improvement: I would like to split the Piece class into two: one representing an actual piece in the game, and one representing a kind of piece, at the moment the responsibilities of the former are split between the Piece and Board classes. Given the small number of squares on the board, it might be nicer to have an explicit Square class, rather than using the flyweight pattern - this would allow some of the responsibilities of the Piece class to be moved to the Square class (such as colour, and drawing the piece). I like the use of a data file to initialise the pieces and the use of a linked list to store the rotations.&lt;br /&gt;&lt;br /&gt;The Piece and Game class are very tightly coupled and this could be improved. In particular there is an implicit requirement on the dynamic interactions of these classes which couples them together. In a way, Game should be a controller class, and Board a view class, but actually Board has (and should have) some controller features. It might be best to split both Board and Game into view and controller components (and perhaps split out a model from Board); some better separation of Board and Game would still be necessary.&lt;br /&gt;&lt;br /&gt;The Game object is a state machine, but this is implicit; I should make this explicit.&lt;br /&gt;&lt;br /&gt;The drawing code (using Cairo) is scattered throughout the program. It could better be encapsulated in a presentation layer. The Windows code is all in the 'top' file - Tetris.cpp and doesn't pollute the rest of the program, but it should be in a class (or classes) of its own and should be better organised.&lt;br /&gt;&lt;br /&gt;I use an array of rows, I think this is the right choice because often I use random access, but when I think about it most access is conceptually sequential - the piece drops one row at a time, I always look at adjacent rows at once (e.g., all rows occupied by the dropping piece, lines are shuffled down by one row at a time, etc.), so maybe it should be a linked list.&lt;br /&gt;&lt;br /&gt;Tetris has a tile-based presentation (on the Gameboy, at least, which is the only real version, if you ask me) and I preserve this in my version. But internally there is no explicit tiling (except for the actual board). The drawing code would be cleaner if the tile structure were explicit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Implementation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The overall code quality is not high: it could do with some more comments, and some better variable names. More importantly, a lot of the standard C++ defensive programming things are missing - I don't take care of copy and assignment constructors, check for errors allocating memory or doing IO (or anywhere else), there are not as many 'const' or 'explicit' declarations as there should be, etc. There should be more (some!) unit tests. Perhaps I ought to use references some places that I use pointers, but I kind of go for pointers by default.&lt;br /&gt;&lt;br /&gt;I could probably make better use of the STL, rather than using so many explicit loops, etc.&lt;br /&gt;&lt;br /&gt;There is not much re-use or inheritance going on. This is probably OK, since it is a small program and there are not many overlapping concepts. However, I still should think about how classes might be reused, and add 'virtual' declarations accordingly.&lt;br /&gt;&lt;br /&gt;The use of Cairo is inconsistent (especially the use of save/restore) and pretty unsophisticated (but the whole point of this was to learn Cairo, so this is to be expected). I use the Cairo text library which is apparently just a "toy" library, so I should use something heavier-weight, but then it did the job pretty well (I also picked a slightly obscure font, so the text might not look so good on your system).&lt;br /&gt;&lt;br /&gt;I could probably store objects that are repeatedly drawn (such as the scoreboard and walls) rather than redrawing them each frame, I didn't work out how to do this in Cairo, though. This is particularly an issue with the text (and using a stringstream just to convert from an int to a char* is overkill, but it used to do more).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5718388707664132246?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5718388707664132246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5718388707664132246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5718388707664132246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5718388707664132246'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/06/tetris.html' title='Tetris'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-f4omg1KRSKc/Tf6QEMksoTI/AAAAAAAAAAQ/13ytpRmuIXI/s72-c/tetris.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1141077514307489129</id><published>2011-06-02T02:53:00.002+01:00</published><updated>2011-06-02T02:57:54.819+01:00</updated><title type='text'>Building Cairo in Windows</title><content type='html'>Recently, for reasons best left aside for now, I tried (and succeeded) in building the Cairo graphics library in Windows. This is a bit more complicated than it sounds (although not as bad as I expected), so I thought I would document it in case someone else wants to do it too. For the record, I am running Windows 7 (32 bit), I used a combination of Visual Studio 2010 and GCC. You'll need Git installed. I use %zlib% to mean the (top) directory where zlib is installed on my computer, and similarly for the other libraries.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 1 - download&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You will need the following:&lt;br /&gt;&lt;br /&gt; Cairo (&lt;a href="git://anongit.freedesktop.org/git/cairo"&gt;git://anongit.freedesktop.org/git/cairo&lt;/a&gt;)&lt;br /&gt; Pixman (&lt;a href="git://anongit.freedesktop.org/git/pixman.git"&gt;git://anongit.freedesktop.org/git/pixman.git&lt;/a&gt;)&lt;br /&gt; LibPNG (&lt;a href="http://www.libpng.org/pub/png/libpng.html"&gt;http://www.libpng.org/pub/png/libpng.html&lt;/a&gt;)&lt;br /&gt; Mozilla Build Environment (&lt;a href="http://developer.mozilla.org/en/docs/Windows_Build_Prerequisites#MozillaBuild"&gt;http://developer.mozilla.org/en/docs/Windows_Build_Prerequisites#MozillaBuild&lt;/a&gt;)&lt;br /&gt; ZLib (&lt;a href="http://zlib.net/"&gt;http://zlib.net/&lt;/a&gt;) (sort of optional)&lt;br /&gt;&lt;br /&gt;You will need to clone the first two Git repositories and download and extract the source zip files for the latter two (or three).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2 - ZLib&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can build ZLib if you like. I built it, but got linking errors later on, instead I used the ZLib static library which builds as part of LibPNG (more later). If you want to do it, it's straightforward:&lt;br /&gt;&lt;br /&gt;First you need to build the assembly files, run bld_ml32.bat found in %zlib%\contrib\masmx86. You will need to do this from the Visual Studio command prompt, not the usual windows one.&lt;br /&gt;&lt;br /&gt;Open %zlib%\contrib\vstudio\vc10\zlibvc.sln in Visual Studio.&lt;br /&gt;&lt;br /&gt;Change the configuration to 'Release' and build it. That should be it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3 - build LibPNG&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open %libpng%\projects\vstudio\zlib.props in a text editor and change the value of '&lt;zlibsrcdir&gt;&lt;zlibsrcdir&gt;' to %zlib%. (I used the zlib library which I downloaded, there is a ZLib library included with LibPNG and you could probably use this here, somehow). Save and close the file.&lt;br /&gt;&lt;br /&gt;Open %libpng%\projects\vstudio\vstudio.sln in Visual Studio. Change the configuration to 'Release Library' and build it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4 - build Pixman&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I couldn't figure out how to build Pixman or Cairo in Visual Studio, I got close with Eclipse, but couldn't quite figure it out using the Eclipse build system. In the end, I resorted to automating the following method using a batch file and a shell script (see below) and launching that when building from Eclipse. I expect I can do the same thing for Cairo, but haven't yet.&lt;br /&gt;&lt;br /&gt;You might need to create pixman-version.h from pixman-version.h.in and configure.ac, I did this manually, but it might get done automatically.&lt;br /&gt;&lt;br /&gt;Open %mozbuildenv%/start-msvc10.bat in a text editor and add the following lines:&lt;br /&gt;set LIB="%LIB%;%zlib%\contrib\vstudio\vc10\x86\ZlibStatRelease;%libpng%\projects\vstudio\Release Library;%pixman%\pixman\release"&lt;br /&gt;set INCLUDE="%INCLUDE%;%zlib%;%libpng%;%pixman%\pixman;%cairo%\src;%cairo%\boilerplate"&lt;br /&gt;&lt;br /&gt;Note that '%LIB%' and '%INCLUDE%' are literal strings here.&lt;br /&gt;&lt;br /&gt;Save the file and close it.&lt;br /&gt;&lt;br /&gt;From the command line (Windows or Visual Studio), run %mozbuildenv%/start-msvc10.bat, cd to %pixman%\pixman. Run "make -f Makefile.win32 CFG=release OUT_PATH=%outpath%", where %out path% is the path where you want to output the compiled Pixman library.&lt;br /&gt;&lt;br /&gt;That's all you need to do a manual build. To automate it from Eclipse, you will need to create the following batch and shell scripts and run the batch file as the build command in Eclipse. You will also need to set the MINGW_HOME variable in the Eclipse project properties.&lt;br /&gt;&lt;br /&gt;build_pixman.bat:&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;del %pixman%\pixman\release /Q&lt;br /&gt;%mozbuildenv%\start-msvc10.bat %pixman%/build.sh&lt;br /&gt;&lt;br /&gt;build_pixman.sh:&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;cd %pixman%/pixman&lt;br /&gt;make -f makefile.win32 CFG=release&lt;br /&gt;&lt;br /&gt;Note that the %paths will need to be in Windows format in the first two cases, and *nix format in the latter two. You could do the same for Cairo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5 - Build Cairo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I needed to apply a couple of patches before I could build Cairo. If you get a more recent version these patches may already have been applied, or be unnecessary. The patches are at &lt;a href="http://lists.cairographics.org/archives/cairo/2011-May/021927.html"&gt;http://lists.cairographics.org/archives/cairo/2011-May/021927.html&lt;/a&gt; and &lt;a href="http://lists.cairographics.org/archives/cairo/2011-June/021985.html"&gt;http://lists.cairographics.org/archives/cairo/2011-June/021985.html&lt;/a&gt;. Apply these using Git.&lt;br /&gt;&lt;br /&gt;Open %cairo%/build/Makefile.win32.common in a text editor and find the reference to 'zdll.lib' and change it to 'zlib.lib'. If you do not have the zlib, libpng, pixman, and cairo directories nested in the same directory, you will need to change the paths in this file accordingly. Save and close the file.&lt;br /&gt;&lt;br /&gt;Copy and rename %libpng%\projects\vstudio\Release Library\libpng15.lib to %libpng%\libpng.lib. Copy %libpng%\projects\vstudio\Release Library\zlib.lib to %zlib%. Alternatively, you could change the paths in Makefile.win32.common, in fact this is a better way of doing it, if you plan to re-build libpng or zlib. Note that I am using the version zlib.lib built by libpng, I could not get Cairo to build using the version built by zlib - I got a bunch of errors linking libpng.&lt;br /&gt;&lt;br /&gt;From the command line (Windows or Visual Studio), run %mozbuildenv%/start-msvc10.bat, cd to %cairo%. Run "make -f Makefile.win32 CFG=release OUT_PATH=%outpath%", where %out path% is the path where you want to output the compiled Pixman library. Note that you need to run the makefile in the cairo root, not the src directory.&lt;br /&gt;&lt;/zlibsrcdir&gt;&lt;/zlibsrcdir&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1141077514307489129?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1141077514307489129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1141077514307489129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1141077514307489129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1141077514307489129'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/06/building-cairo-in-windows.html' title='Building Cairo in Windows'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1951508313170289302</id><published>2011-05-17T06:21:00.001+01:00</published><updated>2011-05-17T06:22:48.990+01:00</updated><title type='text'>N</title><content type='html'>Well, it took longer than expected but N is now open source! You can download it from GitHub at the URL in the previous post. Just a warning that it is buggy as hell and very fragile...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1951508313170289302?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1951508313170289302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1951508313170289302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1951508313170289302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1951508313170289302'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/05/n.html' title='N'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-9046612526144989540</id><published>2011-05-02T02:09:00.002+01:00</published><updated>2011-05-02T02:18:16.817+01:00</updated><title type='text'>The N PL semantics tool, and other stuff</title><content type='html'>What have I been up to? I am currently gainfully unemployed. I am climbing a lot and seeing more of NZ. I'm also still working on some acadmic things - I'm continuing to work on a wildcards paper and I'm the PC chair for IWACO 11 which is keeping me busy (by the way I think this year's IWACO will be excellent - we've got a whole bunch of great submissions, thanks to everyone who submitted!).&lt;br /&gt;&lt;br /&gt;Most excitingly (for me) I've been working on a tool for PL researchers called N. It is kind of a proof assistant, but also checks formal type systems and outputs them in pretty LaTeX, so takes out a lot of the drudgery of writing formal type systems. It is very much work in progress, but most of the checking and LaTeX output stuff is done (for a fairly small formal lanaguage) and I am working on the proof assistant part. This is novel (and exiciting for me to work on) because it is purely syntactic and high level, as opposed to Coq, Isabelle etc. which are semantic and low level, http://www.blogger.com/img/blank.gifi.e., they work at the level of logic/maths, whereas N works at the level of PL-style type systems. This means that when N says a proof is done it does not guarantee that the proof is correct. However, writing proofs in N should be orders of magnitude simpler and quicker than using a proper proof assistant. Think of it as a tool for doing hand-written proofs - it does some checking and automates some parts, but does not fully check.&lt;br /&gt;&lt;br /&gt;N is written in Python and will be open source very soon (next few days), it will be at &lt;a href="https://github.com/nick29581/N"&gt;https://github.com/nick29581/N&lt;/a&gt;. Feedback is appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-9046612526144989540?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/9046612526144989540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=9046612526144989540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9046612526144989540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9046612526144989540'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/05/n-pl-semantics-tool-and-other-stuff.html' title='The N PL semantics tool, and other stuff'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-422245806233374070</id><published>2011-02-24T02:03:00.001Z</published><updated>2011-02-24T02:04:57.873Z</updated><title type='text'>IWACO '11 website</title><content type='html'>&lt;a href="http://ecs.victoria.ac.nz/Events/IWACO2011/"&gt;http://ecs.victoria.ac.nz/Events/IWACO2011/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Visit for the latest info on this year's IWACO, which should be a good one as we celebrate 20 years of research in the field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-422245806233374070?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/422245806233374070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=422245806233374070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/422245806233374070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/422245806233374070'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/02/iwaco-11-website.html' title='IWACO &apos;11 website'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-455137893421591890</id><published>2011-02-24T02:02:00.000Z</published><updated>2011-02-24T02:03:09.496Z</updated><title type='text'>IWACO 2011: Call for Papers</title><content type='html'>&lt;pre&gt;&lt;br /&gt;                          Call For Papers&lt;br /&gt;&lt;br /&gt;   International Workshop on Aliasing, Confinement and Ownership&lt;br /&gt;             in object-oriented programming (IWACO)&lt;br /&gt;&lt;br /&gt;              Celebrating 20 years of aliasing research&lt;br /&gt;   &lt;br /&gt;                           at ECOOP 2011&lt;br /&gt;&lt;br /&gt;                  July 25th, 2011, Lancaster, UK&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;             http://ecs.victoria.ac.nz/Events/IWACO2011/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Call For Papers&lt;br /&gt;===============&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2011 is the 20th anniversary of "The Geneva Convention on The Treatment&lt;br /&gt;of Object Aliasing", which started research in aliasing and led to the&lt;br /&gt;development of object-ownership techniques. To celebrate, IWACO 2011&lt;br /&gt;will be a special edition; we are in negotiation to publish a book&lt;br /&gt;(edited by members of the organising committee) containing the best&lt;br /&gt;papers from IWACO '11 and invited papers of a survey or retrospective&lt;br /&gt;nature. In addition to original research papers, we encourage authors to&lt;br /&gt;submit position papers and papers considering future research&lt;br /&gt;directions.&lt;br /&gt;&lt;br /&gt;The power of objects lies in the flexibility of their interconnection&lt;br /&gt;structure. But this flexibility comes at a cost. Because an object can&lt;br /&gt;be modified via any alias, object-oriented programs are hard to&lt;br /&gt;understand, maintain, and analyse. Aliasing makes objects depend on&lt;br /&gt;their environment in unpredictable ways, breaking the encapsulation&lt;br /&gt;necessary for reliable software components, making it difficult to&lt;br /&gt;reason about and optimise programs, obscuring the flow of information&lt;br /&gt;between objects, and introducing security problems.&lt;br /&gt;&lt;br /&gt;Aliasing is a fundamental difficulty, but we accept its presence.&lt;br /&gt;Instead we seek techniques for describing, reasoning about, restricting,&lt;br /&gt;analysing, and preventing the connections between objects and/or the&lt;br /&gt;flow of information between them. Promising approaches to these problems&lt;br /&gt;are based on ownership, confinement, information flow, sharing control,&lt;br /&gt;escape analysis, argument independence, read-only references, effects&lt;br /&gt;systems, and access control mechanisms.&lt;br /&gt;&lt;br /&gt;The workshop will generally address the question how to manage&lt;br /&gt;interconnected object structures in the presence of aliasing. In&lt;br /&gt;particular, we will consider the following issues (among others):&lt;br /&gt;&lt;br /&gt;* models, type and other formal systems, programming language&lt;br /&gt;mechanisms, analysis and design techniques, patterns and notations for&lt;br /&gt;expressing object ownership, aliasing, confinement, uniqueness, and/or&lt;br /&gt;information flow.&lt;br /&gt;&lt;br /&gt;* optimisation techniques, analysis algorithms, libraries, applications,&lt;br /&gt;and novel approaches exploiting object ownership, aliasing, confinement,&lt;br /&gt;uniqueness, and/or information flow.&lt;br /&gt;&lt;br /&gt;* empirical studies of programs or experience reports from programming&lt;br /&gt;systems designed with these issues in mind&lt;br /&gt;&lt;br /&gt;* novel applications of aliasing management techniques such as ownership&lt;br /&gt;types, ownership domains, confined types, region types, and uniqueness.&lt;br /&gt;&lt;br /&gt;We encourage not only submissions presenting original research results,&lt;br /&gt;but also papers that attempt to establish links between different&lt;br /&gt;approaches and/or papers that include survey material. Original research&lt;br /&gt;results should be clearly described, and their usefulness to&lt;br /&gt;practitioners outlined. Paper selection will be based on the quality of&lt;br /&gt;the submitted material.&lt;br /&gt;&lt;br /&gt;The workshop will be held as part of the ECOOP'11 conference taking&lt;br /&gt;place in Lancaster, England.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Programme Committee&lt;br /&gt;-------------------&lt;br /&gt;&lt;br /&gt;Nicholas Cameron        (chair, Victoria University of Wellington)&lt;br /&gt;Dave Clarke             (KU Leuven)&lt;br /&gt;Werner Dietl            (University of Washington)&lt;br /&gt;Ioannis Kassios         (ETH Zurich)&lt;br /&gt;Doug Lea                (State University of New York at Oswego)&lt;br /&gt;James Noble             (Victoria University of Wellington)&lt;br /&gt;Matthew Parkinson       (Microsoft Research, Cambridge)&lt;br /&gt;Alex Potanin            (Victoria University of Wellington)&lt;br /&gt;Tobias Wrigstad         (Uppsala University)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Important Dates&lt;br /&gt;---------------&lt;br /&gt;&lt;br /&gt;15 April, 2011: paper submission deadline&lt;br /&gt;20 May, 2011: author notification&lt;br /&gt;25 May, 2011: full program disseminated&lt;br /&gt;24 June, 2011: papers available&lt;br /&gt;25 July, 2011: workshop takes place&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Organisers&lt;br /&gt;----------&lt;br /&gt;&lt;br /&gt;Dave Clarke             (KU Leuven)&lt;br /&gt;James Noble             (Victoria University of Wellington)&lt;br /&gt;Tobias Wrigstad         (Uppsala University)&lt;br /&gt;Peter Muller            (ETH Zurich)&lt;br /&gt;Matthew Parkinson       (Microsoft Research, Cambridge)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Participation&lt;br /&gt;-------------&lt;br /&gt;&lt;br /&gt;The number of participants is limited to 25. Apart from those with&lt;br /&gt;accepted papers, others may attend by sending an email to Nicholas&lt;br /&gt;Cameron (ncameron@ecs.vuw.ac.nz) indicating what contribution you could&lt;br /&gt;make to the workshop. A small number of places will be reserved for PhD&lt;br /&gt;students and other researchers wishing to begin research in this area.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Selection Process&lt;br /&gt;-----------------&lt;br /&gt;&lt;br /&gt;Both full papers (up to 10 pgs.) and short papers (1-2 pgs.) are&lt;br /&gt;welcome. All submissions will be reviewed by the programme committee.&lt;br /&gt;The accepted papers, after rework by the authors, will be published in&lt;br /&gt;the Workshop Proceedings, which will be distributed at the workshop. All&lt;br /&gt;accepted submissions shall remain available from the workshop web page.&lt;br /&gt;&lt;br /&gt;Papers should be submitted via Easychair at&lt;br /&gt;&lt;br /&gt;  https://www.easychair.org/conferences/?conf=iwaco11&lt;br /&gt;&lt;br /&gt;by 15 April, 2011. Submissions should be in English.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Queries&lt;br /&gt;-------&lt;br /&gt;&lt;br /&gt;Queries may be directed to Nicholas Cameron (ncameron@ecs.vuw.ac.nz).&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-455137893421591890?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/455137893421591890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=455137893421591890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/455137893421591890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/455137893421591890'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/02/iwaco-2011-call-for-papers.html' title='IWACO 2011: Call for Papers'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7404090338329852440</id><published>2011-02-24T01:59:00.003Z</published><updated>2011-02-24T02:01:55.778Z</updated><title type='text'>Christchurch Earthquake</title><content type='html'>For anyone reading who I have not been in contact with - Ru and I are fine and our house has survived pretty much unscathed - we have been very lucky, the damage to the city is incredible. Aftershocks are ongoing, I'm now able to keep sleeping through anything less than about a 4....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7404090338329852440?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7404090338329852440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7404090338329852440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7404090338329852440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7404090338329852440'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2011/02/christchurch-earthquake.html' title='Christchurch Earthquake'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3479665126482171257</id><published>2010-12-21T01:31:00.002Z</published><updated>2010-12-21T01:46:07.509Z</updated><title type='text'>Things I'll miss about Wellington</title><content type='html'>Over the Christmas holiday I'll be moving down to Christchurch and leaving Wellington. This is good because Christchurch (or more precisely Castle Hill) has excellent climbing, and new cities are fun. But I think I will miss Wellington a lot, it is one of the nicest cities I have ever visited, and living here has been a real treat. I'll reflect more on the academic side of my stay here in another post, but here is a list of things I think I will miss about Wellington in pretty random order:&lt;br /&gt;&lt;br /&gt;People's Coffee - excellent coffee, even by NZ standards&lt;br /&gt;The Engine Room  - a great place for climbing training&lt;br /&gt;The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Rak&lt;/span&gt; - Not the best climbing spot on earth, but the one I've spent the most time, and I've grown to really like some of the problems&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Prana&lt;/span&gt; - vegetarian cafe in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Newtown&lt;/span&gt; - awesome&lt;br /&gt;Cafes in general - including Sweet Mother's, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Baobob&lt;/span&gt;, Cafe Deluxe, Midnight Espresso, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Esspressoholic&lt;/span&gt;, Fidel's, Lido, O Sushi&lt;br /&gt;The art gallery (I went to Roundabout the other day and it was excellent, as have been may other exhibits)&lt;br /&gt;The Embassy - such a cool cinema&lt;br /&gt;Our house - it might be small, but it is lovely, and my wife and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;I's&lt;/span&gt; first home together, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;adn&lt;/span&gt; it has an amazingly sunny deck&lt;br /&gt;Two &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;surprisingly&lt;/span&gt; good Hip-hop nights at the San Fran &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;Bathhouse&lt;/span&gt; (Jean &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Grae&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Talib&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Kweli&lt;/span&gt;, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;Pharaoh&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Monch&lt;/span&gt;, Mr Len)&lt;br /&gt;The Powerhouse - surely the best place on earth to lift weights (no frills, all hardcore)&lt;br /&gt;Bars - Havana, Monteray, Good Luck, Southern Cross (some weird and cool live music nights), Alice, Motel&lt;br /&gt;All my friends and colleagues - of course!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3479665126482171257?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3479665126482171257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3479665126482171257' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3479665126482171257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3479665126482171257'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/12/things-ill-miss-about-wellington.html' title='Things I&apos;ll miss about Wellington'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-521639616926075935</id><published>2010-12-21T01:29:00.002Z</published><updated>2010-12-21T01:31:43.633Z</updated><title type='text'>Links in JOT posts</title><content type='html'>I finally got round to doing the last post on OOPSLA for JOT, I can't believe how long that took! Pretty bad really, but it's been a busy couple of months and it has increasingly been falling down my list of priorities. I also went through all the posts and added links to the papers. The posts are at &lt;a href="http://blog.jot.fm/"&gt;the JOT blog&lt;/a&gt; (apparently the last two posts aren't up yet, but should be soon).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-521639616926075935?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/521639616926075935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=521639616926075935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/521639616926075935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/521639616926075935'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/12/links-in-jot-posts.html' title='Links in JOT posts'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8604799306330616348</id><published>2010-12-21T01:28:00.002Z</published><updated>2010-12-21T01:28:59.432Z</updated><title type='text'>JOT blog repost: OOPSLA day 3 (finally)</title><content type='html'>Final day of the conference (is this the latest blog post ever? Probably. Consider it an un-expected Christmas gift):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Homogeneous Family Sharing - Xin Qi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Xin talked about extending sharing from classes to class families in the J&amp;amp; family of languages. Sharing is a kind of bidirectional inheritance, and is a language-level alternative to the adapter design pattern. The work includes formalism, soundness proof, and implementation using Polyglot. Dispatch is controlled by the view of an object, the view can be changed by a cast-like operation.&lt;br /&gt;&lt;br /&gt;I didn't quite get shadow classes, but I think they are like further bound classes in Tribe.&lt;br /&gt;&lt;br /&gt;Finally, their families are open, as in open classes, so the programmer can add classes to families post hoc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mostly Modular Compilation of Crosscutting Concerns by Contextual Predicate Dispatch - Shigeru Chiba&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Shigeru presented a halfway language between OOP and AOP called GluonJ. The idea is that it should be a more modular version of aspects (I think). However, it was found to be not as modular to check and compile as standard OOP. The language supported cross-cutting concerns with predicate dispatch and an enhanced overriding mechanism.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ownership and Immutability in Generic Java - Yoav Zibin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yoav talked about work that combined ownership and immutability in a single system using Java's generics. It is nice work, but I'm afraid I was too busy being nervous about being next up to write any notes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tribal Ownership - Nick Cameron (me!)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I talked about work with James Noble and Tobias Wrigstad on using a language with virtual classes (Tribe) to support object ownership (i.e., ownership types without the extra type annotations) for free (that is, no additional programmer syntax overhead). I really like this work, it all seems to come together so neatly, which I find pretty satisfying. I really do think virtual classes are extraordinarily powerful and yet easy enough for programmers to understand. Hopefully, they'll make it into a mainstream language before too long...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Time-Aware type System for Data-Race Protection and Guaranteed Initialization - Nicholas Matsakis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nicholas introduced a language (Harmony) where intervals of 'time' are represented in the type system to make the language time-aware. This can be used to prevent race conditions in concurrent programs and for other uses (including some non-concurrent ones), such as allowing new objects time to establish their invariants. Intervals are scoped and an ordering may be specified by the programmer; the runtime or compiler may reorder execution subject to this ordering. Checking is modular and is flow insensitive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8604799306330616348?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8604799306330616348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8604799306330616348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8604799306330616348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8604799306330616348'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/12/jot-blog-repost-oopsla-day-3-finally.html' title='JOT blog repost: OOPSLA day 3 (finally)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-2853027581861713486</id><published>2010-11-17T04:29:00.000Z</published><updated>2010-11-17T04:30:25.181Z</updated><title type='text'>OOPSLA day 2 (belated) (JOT repost)</title><content type='html'>&lt;p&gt;NOTE: I've come back to my notes about the last two days of OOPSLA; it's two weeks since the conference ended, and my memory is already kind of hazy, so the quality of these last two posts might be less than ideal... and another week and a half has passed before I finished even the first of the last two posts, still, better late than never, eh?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creativity: Sensitivity and Surprise - Benjamin Pearce&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Benjamin gave the oddest invited talk I've ever seen. He talked about various aspects of creativity over a large set of photographs, including some of his own. The photos were beautiful and made a great show. Not entirely sure what it has to do with programming, languages, systems, or applications, except at the most abstract level. Still an interesting talk, and it seemed to go down very well with the audience too.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Specifying and Implementing Refactorings - Max Schaffer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Automatic refactoring is popular, and correct in the common cases, but specifications are imperfect. The current `best practice' (e.g., in Eclipse) is to use a bunch of preconditions, but this is not ideal for automatic tools because it is difficult to identify all necessary preconditions; so refactoring sometimes fails, even if all the preconditions are satisfied.&lt;br /&gt;&lt;br /&gt;The authors previously suggested specifications based on dependencies and breaking refactorings down into smaller pieces. In this work, they show that this idea actually works for proper refactorings. The dependencies are static and semantic, e.g., constraints on synchronisation and name binding. The authors specified and implemented 17 refactorings.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;What can the GC compute efficiently? - Christoph Reichenbach&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Christoph presented a system which checks assertions when the garbage collector is run. These assertions are about objects and relations between objects in the heap. This is a pretty efficient way to check heap assertions because the heap must be traversed anyway to do GC. There is a single-touch property - i.e., each assertion can only touch each object once - so checking the assertions is very fast. Their assertion language can describe reachability, dominance, and disjointness, and assertions can be combined with the usual logical operators. Interestingly, garbage collection must be re-ordered to check for reachability and dominance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Type Classes as Objects and Implicits - Bruno Oliveira&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This work `encodes' Haskell type classes in Scala using generics and implicits (the latter being a Scala feature that enables the programmer to omit some parameters). My understanding of the work was that type classes can be done using only generics, but implicits are required to make the `encoding' usable by a programmer. There is a whole lot of other complex-Scala-type-system stuff - I have notes about type members and dependent method types, but I can't remember why...&lt;br /&gt;&lt;br /&gt;The interesting thing is that you end up with a really, really powerful language feature: as well as type classes, you can encode session types, which I find incredible (although according to the paper, you can do this with Haskell type classes).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Supporting Dynamic, Third-Party Code Customizations in JavaScript using Aspects&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The authors are motivated by the popularity of JavaScript, both on the web and to customise browsers. Such scripts typically rely heavily on code injection, that is inserting new code into existing scripts. This is a pretty ugly process all round - it's as non-modular as you can imagine and implemented in totally unchecked and unsafe ways (mostly monkey patching). The authors propose doing it with aspect-style weaving instead, but claim it's not really aspects, apparently. Weaving is done by the JIT. Their empirical results show that their approach is sufficiently expressive for most use.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-2853027581861713486?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/2853027581861713486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=2853027581861713486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2853027581861713486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2853027581861713486'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/11/oopsla-day-2-belated-jot-repost.html' title='OOPSLA day 2 (belated) (JOT repost)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7259028175981024144</id><published>2010-11-06T01:23:00.002Z</published><updated>2010-11-06T01:27:29.406Z</updated><title type='text'>Papers</title><content type='html'>I've just updated the &lt;a href="http://www.doc.ic.ac.uk/%7Encameron/papers/index.html"&gt;research page&lt;/a&gt; on my website, I've added all my recent papers plus some accompanying proofs, and the slides for all the talks I have given this year. In particular, I've added my paper and slides for the Tribal Ownership work which I recently presented at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OOPSLA&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I still have a couple of blog posts to write up about the last two days at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;OOPSLA&lt;/span&gt;, these should be coming shortly (I was on holiday for a week after &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;OOPSLA&lt;/span&gt; and have been kind of busy since I got back).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7259028175981024144?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7259028175981024144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7259028175981024144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7259028175981024144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7259028175981024144'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/11/papers.html' title='Papers'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3983504362710629883</id><published>2010-10-21T19:46:00.000+01:00</published><updated>2010-10-21T19:47:18.452+01:00</updated><title type='text'>OOPSLA day 1 (JOT repost)</title><content type='html'>OOPSLA proper starts today. William Cook gave a mercifully short introduction and then we were straight into the first ever SPLASH invited talk, on evolving software by Stephanie Forrest. After the break, I attended the Onward! research paper stream, then after lunch an OOPSLA session, and the panel in the last session.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Registration-Based Language Abstractions - Samuel Davis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Samuel presented a method for adding language constructs to a language. These constructs are outside of the language, but also outside of the source code, so each programmer can have their own personal version of a programming language and the tool will present code using the right constructs. It seems like a very sophisticated macro system to me, but with better tool support (I don't mean this in a derogatory way, the system is obviously more powerful and useful than macros, I just mean it as a simile).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I attended, enjoyed and found interesting two talks - &lt;span style="font-weight: bold;"&gt;Pinocchio: Bringing Reflection to Life with First-class Interpreters presented by Toon Verwaest&lt;/span&gt;, and &lt;span style="font-weight: bold;"&gt;Lime: A Java-Compatible and Synthesizable Language for Heterogeneous Architectures presented by Joshua Auerbach&lt;/span&gt;. I'm afraid I can't say much about either of them, but they were good talks and I'll try to read both papers.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;From OO to FPGA: Fitting Round Objects into Square Hardware? - Jens Palsberg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A talk on compiling high-level languages to FPGAs, the challenge is to compile a standard OO program to an FPGA. Currently code written in a small subset of C can be compiled to FPGAs, but hand-coded FPGA code is better (faster, less area, smaller energy consumption). The general technique presented is to compile from Virgil to C and then to FPGAs. Unfortunately, the C subset is so small (no pointers, etc.) that objects cannot be compiled in the usual way.&lt;br /&gt;&lt;br /&gt;The authors used a mix of existing compilation techniques with some new ideas of their own. Essentially they compile objects to sparse integer arrays, but must then expend a lot of effort in compressing these tables.&lt;br /&gt;&lt;br /&gt;They have experimental results which show slightly better performance for their tool chain than for the hand-tuned version (for the non-oo case). In the OO case, it is harder to compare (no-one else has done it), but by interpreting performance results from CPU execution, they reason that their tool gives good results here too.&lt;br /&gt;&lt;br /&gt;An interesting challenge which emerged in the questions, is producing an intermediate language for compilation to FPGAs that preserves parallelisation, as opposed to C which 'flattens' away any parallel code into sequential code.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Panel - Manifesto: a New Educational Programming Language&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For the last session of the day, I attended the panel session on a proposed new programming language, aimed at first year university students. The language is called Grace (http://gracelang.org), it is proposed to be a community effort, with a semi-open development process and this panel was an effort to get the community behind it. Grace will be a general purpose (as opposed to domain specific) language, designed for novices (so no fancy type system), and deigned for programming in the small (so no fancy module system). It will not be industrial strength, therefore it will not need to be backward compatible, and should have low overhead for small programs (no "public static void main").&lt;br /&gt;&lt;br /&gt;The proposers argued that the time is right: Java will be good for the next few years, but is getting big and a bit long in the tooth. Alex Buckley (Java "theologist", also on the panel, but not associated with Grace) did not disagree, but did say that Java would have a lot of the features discussed in a few years time (which means it might not look so old but will be even bigger).&lt;br /&gt;&lt;br /&gt;The proposers (James Noble, Andrew Black, and Kim Bruce) have ambitious goals: Grace should be multi-platform, multi-paradigm (it should support teaching with or without objects, with or without types, in a functional or procedural style), it should be useful for teaching first and second years how to program, and for data structures courses. With Smalltalk never far below the surface, it was declared that everything would be an object, although it was not stated what was meant by "everything". The proposers proposed that Grace have a powerful extension/library system for adding in things like concurrency, basically because we don't know the best way to do concurrency right now. This seems a big ask, one thing the concurrency community mostly agress on is that concurrency cannot be added on afterwards, it must be holistically baked in.&lt;br /&gt;&lt;br /&gt;It sounds to me like a great idea - an academic, community based teaching language should be much better suited for purpose than a professional programming language. But, to be honest, the session did not have very much buzz. The panel itself was obviously excited about the project, the audience less so. There were no great questions from the floor, or any really exciting debate. The lengthiest discussion was about the relative merits of the PLT group's book/language/curriculumn. On the other hand no one really disagreed that there was a gap in the market for such a language. I'm interested to find out if the proposers got encouraging words after the session. (Disclaimer: I skipped the last half hour to attend a research talk, so the session might have lit up then and I would have missed it.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3983504362710629883?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3983504362710629883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3983504362710629883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3983504362710629883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3983504362710629883'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/10/oopsla-day-1-jot-repost.html' title='OOPSLA day 1 (JOT repost)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1984306895001755328</id><published>2010-10-19T18:01:00.000+01:00</published><updated>2010-10-19T18:03:13.262+01:00</updated><title type='text'>Dynamic Languages Symposium (DLS) (JOT repost)</title><content type='html'>Today (now yesterday) I will mainly be attending the DLS, with intermissions at PLATEAU.&lt;br /&gt;&lt;br /&gt;Almost unbelievably, the wifi works really well. It's been a while since I've been at a conference with really good wifi, but the Nugget seems to have cracked it, fingers crossed that it'll last.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Invited talk - &lt;span style="font-weight: bold;"&gt;Smalltalk Virtual Machines to JavaScript Engines: Perspectives on Mainstreaming Dynamic Languages - Allen Wirfs-Brock&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The theme of this talk is how to get dynamic languages into the mainstream. The talk started well with some interesting general points on implementing dynamic languages, and ended well with some observations on the current generations of Javascript interpreters, but most of the talk was a retrospective of Smalltalk.&lt;br /&gt;&lt;br /&gt;An early point was that performance is important for dynamic language take up. As much as language designers and programming guides state that design (of the language or program) must come first, if a language's runtime performance is not good enough for a given task, it will not be used. Another early point was that virtual machine implementors got blinded by the metaphor - a VM is not a machine, it is a language implementation, and must be coded like one.&lt;br /&gt;&lt;br /&gt;Allen gave an impressive Smalltalk demo, running Smalltalk from 1984 on a machine of the day, which practically ran on steam. It was an interactive graphical demo and the performance was very impressive (in fact, the computer was pretty high powered for the time, but it was impressive nonetheless).&lt;br /&gt;&lt;br /&gt;More of Allen's observations: holistic design gives high performance, tweaks to an existing VM will not get you very far (therefore, he is not a fan of trying to extend the JVM to dynamic languages); optimising fast paths is fine, but don't let the exceptional paths get too slow, it is probably these that makes the language special; methodologies are required to enable language adoption.&lt;br /&gt;&lt;br /&gt;Most of the Smalltalk stuff was fairly typical, but the analysis of its death was more interesting: Smalltalk was going guns blazing in '95, but was effectively dead by '97. His analysis was that Smalltalk was a fad, never a mainstream language (which sounds right to me, not that it was bad language mind, but its influence in academic language research seems much higher than its influence in real life). One reason for this demise is that the 'Smalltalk people' expended way too much energy on GUI systems that nobody actually used, and not enough energy on real problems.&lt;br /&gt;&lt;br /&gt;Another interesting analysis was on why Java succeeded, reasons given included: familiar syntax, conventional tools, the network effect, etc. It seems to me that people always try to find excuses for Java's success (although those points are obviously true); maybe Java was actually a good language that fit the needs of the time better than other languages?&lt;br /&gt;&lt;br /&gt;A slight tangent was that Java is essentially a manually dynamically typed language; that is, casts are manual dynamic typing.&lt;br /&gt;&lt;br /&gt;We then got back into the good stuff. Javascript was assumed to be inherently slow, then V8 (Google) showed that Javascript could be fast. Fast Javascript is important for the web, which means computing in general nowadays. You only need to look at the competition between browsers to see that Javascript performance is important. This reminded me that I think that Javascript engines are possibly the coolest and most interesting language engineering happening at the moment, and sadly it is not happening in academia (Allen suggested we need a research browser, which would be nice, but seems unlikely to come about).&lt;br /&gt;&lt;br /&gt;Some of Allen's observations on Javascript VMs: most teams are still on their first or second tries (earlier in the talk, Allen stated that it takes three goes to get good at VMs) - things are going to get much better; performance is still low compared to Smalltalk in '95(!); Sunspider is not a great benchmark and is holding back proper evaluation and development; Javascript is harder to make fast than Smalltalk (because it is more dynamic), new ideas are needed to get more speed; Allen wandered why all the Javascript VMs use so much memory; the Javascript engine needs to be part of an holistic browser design to get good performance; Javascript seems to be the mainstream; Javascript performance is at the beginning, not the end.&lt;br /&gt;&lt;br /&gt;The talk ended by reminding us that ambient/ubiquitous computing is here, and suggested that dynamic languages were going to be part of that era. He didn't explain why, however.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Meanwhile, at PLATEAU - &lt;span style="font-weight: bold;"&gt;GoHotDraw: Evaluating the Go Programming Language with Design Patterns - Frank Schmager&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Frank Schmager presented work he has done with James Noble and I on evaluating the Go programming language using design patterns. This is a novel idea for evaluating programming languages, and hopefully a new tool in the language evaluation toolbox. Apparently he gave a very good talk, go Frank! (sorry for that pun)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PLATEAU invited talk -&lt;span style="font-weight: bold;"&gt; The Fitness Function for Programming Languages: A Matter of Taste? - Gilad Bracha&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For the second session, I attended Gilad Bracha's invited talk at PLATEAU. Gilad always gives interesting and entertaining talks, and this was no exception.&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;There are two kinds of languages - those that everyone complains about and those that aren't used&lt;/span&gt;"&lt;br /&gt;      --- Bjorn Stroustrup&lt;br /&gt;&lt;br /&gt;Gilad's talk was about how to judge a language. He argued that there was more to a language's success than popularity, that in fifty years time we will look back and certain languages will be admired, and others won't. Furthermore, success is really mostly down to the network effect (or the sheep effect, as Gilad called it); and that the most successful languages follow the Swiss Army Knife approach (aka the kitchen sink approach aka the postmodern approach) to language design, which generally, it is agreed, is not elegant or 'great'. So is it possible to define what makes a language great? Or is it just a matter of taste?&lt;br /&gt;&lt;br /&gt;There were a couple of tangents on parser combinators and first-class pattern matching in Newspeak (Gilad's language project).&lt;br /&gt;&lt;br /&gt;Some criteria for greatness (or lack of it) were suggested: how much syntactic overhead is there in the language (such as unnecessary brackets, semicolons), does the language force attention on the irrelevant (e.g., on the low level in a non-systems language), how compositional is the language. Gilad asked if languages can be judged as theories (where programs are models of the theory), criteria here were consistency, comprehensiveness, and predictive value (which for languages means how hard is it to write a given program).&lt;br /&gt;&lt;br /&gt;An interesting observation was that the most common actions in a language have no syntax (or actually no syntactic overhead), e.g., function application in functional languages, method call in Smalltalk.&lt;br /&gt;&lt;br /&gt;Another observation on evaluating languages is that we often try to measure how hard a language is to learn. Gilad argued that ease of learning is not an indicator of greatness. He uses Newton's calculus as an allegory - it is widely hated for being difficult to learn, but is truly a great contribution to science.&lt;br /&gt;&lt;br /&gt;Finally, Gilad stated that good aesthetics makes good software, that strict criteria for evaluating a language are not ideal, and that quality is more important than market share.&lt;br /&gt;&lt;br /&gt;There was a big debate in the question session afterwards, covering how to judge a language, how to review programming language papers and the review process in general, cognitive theories, and even maths vs. art.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Proxies: Design Principles for Robust Object-oriented Intercession APIs - Tom Van Cutsem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Back at the DLS, Tom talked about implementing intercession (that is, intercepting method calls) in Javascript. Unlike some scripting languages, this is surprisingly difficult in Javascript. He described a technique to do it using proxy objects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Contracts for First-Class Classes - T. Stephen Strickland&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The last talk of the day was on contracts in Racket, specifically on and using first-class classes. (By the way, Racket is the new name for PLT Scheme, I assumed I was the only one who didn't realise this, but a few other people admitted their confusion later. Why did they change the name?) Not being a Lisp fan, I found the examples very hard to read - too many brackets! Anyway, Stephen (or T?) described Eiffel-style contracts (pre- and post-conditions). These can be added using first-class classes (in the same way that methods can be added to classes). He showed that object contracts were still required in some circumstances (as well as class contracts), and showed how these were implemented using class contracts on new classes and proxies to make the old and new classes work together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1984306895001755328?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1984306895001755328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1984306895001755328' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1984306895001755328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1984306895001755328'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/10/dynamic-languages-symposium-dls-jot.html' title='Dynamic Languages Symposium (DLS) (JOT repost)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7775025435205672129</id><published>2010-10-18T05:32:00.000+01:00</published><updated>2010-10-18T05:34:20.053+01:00</updated><title type='text'>FOOL (JOT repost)</title><content type='html'>First day of the conference I attended the FOOL workshop. This used to be one of my favourite workshops, it always seemed to have high quality, interesting papers. It used to be held at POPL, but was cancelled last year. It has now been resurrected at OOPSLA and looks to be just as good as it's ever been. The following talks were the highlights for me.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DeepFJig - Modular composition of nested classes - Marco Servetto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;FJig is a formalisation of the Jigsaw language, which focuses on mixins and 'class' composition. This work extends FJig with an extension to nested classes. I believe that virtual nested classes are the most significant change to the OO paradigm currently being proposed. Being able to abstract and inherit at the level of class families, rather than just individual classes, solves an awful lot of problems with the usual class model. Thus, I'm happy to see another take on the idea.&lt;br /&gt;&lt;br /&gt;From what I gathered, DeepFJig only supports 'static' nesting of classes, this makes the type system simple (no path dependent types, or exact types required), but at the expense of a lot of the benefits of virtual classes. The interesting thing here is that by combining nested classes with the mixin composition operators found in FJig, you get a great deal of expressivity - Marco showed how to encode generics (in a virtual types style) and aspects (yes, aspects, as in AOP). This latter probably means that the language is too expressive for some software engineering purposes, but it wasn't clear from the talk how much you can sabotage classes, as you can usually do when using aspects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lightweight Nested Inheritance in Layer Decomposition - Tetsuo Kamina&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another nested classes paper, this time extending the 'Lightweight Nested Inheritance' (J&amp;amp;) concept. LNI uses paths of class names and exact class names to identify types. This work extends that with generics so that types can be more precisely specified. However, it seems that you only bite back some of the expressivity lost when compared with systems such as VC and Tribe (which have dependent path types). So, it is a slightly more heavyweight lightweight version of nested class types. The interesting aspect is that type variables can be used as type constructors for path types (but not generics types, i.e., X.C is OK, but X&lt;c&gt; is not). I guess that if you assume that you are going to have generics in such a language anyway, then getting this extra expressivity is nice. However, I am not entirely convinced that the result is much more lightweight than the path dependent approach.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mojojojo - More Ownership for Multiple Owners - Paley Li&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Paley presented work he has done with James Noble and I on Multiple Ownership type systems. Multiple Ownership was proposed at OOPSLA '07, but the formalisation was unwieldy. This work presents a simpler, more elegant, and more powerful formalisation of the Multiple Ownership concept.&lt;br /&gt;&lt;br /&gt;Traditional ownership types systems give each object a single owner, this organises the heap into a tree, which is great for reasoning about programs. Unfortunately, real programs rarely fall nicely into a runtime tree structure, so more flexible ways to organise the heap are required. Multiple Ownership allows each object to be owned by multiple owners, thus organising the heap into a DAG.&lt;br /&gt;&lt;br /&gt;Mojojojo (if you don't get the name, Google for the Powerpuff Girls) adds a powerful system of constraints over the structure of the heap, generics, existential quantification, and a host of small improvements to the formal system, resulting in something a lot nicer than MOJO. Paley gave a great talk, and I recommend you all read the paper (totally unbiased opinion, of course :-) ).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Interoperability in a Scripted World: Putting Inheritance &amp;amp; Prototypes Together - Kathryn E. Gray&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;More work on integrating typed and untyped languages, which seems to be very fashionable right now. This work focuses on making Java and Javascript work together, rather than focusing on type checking. The most interesting bit is making prototyping and inheritance work together in the same world.&lt;br /&gt;&lt;br /&gt;I'm sorry I cannot write more about this paper, because it sounds really interesting, but I was a bit distracted at the beginning of the talk, and never quite got back into the flow. I'll be reading the paper later though...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Adding Pattern Matching to Existing Object-Oriented Languages - Changhee Park&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Changhee talked about adding pattern matching to Fortress (which reminds me to check on what is happening with Fortress nowadays). In fact one of the more interesting bits of the talk was the generalisation - the requirements on a language such that it can support pattern matching in the way described.&lt;br /&gt;&lt;br /&gt;The general idea of the work is to support ADT-style decomposition of types by subtype using a typecase expression and function parameters and decomposition of objects into its fields, similarly to how tuples are decomposed in Python etc. What I thought was missing was a discussion of whether or not you would actually want to do this: you are breaking object-based encapsulation, which most languages avoid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7775025435205672129?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7775025435205672129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7775025435205672129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7775025435205672129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7775025435205672129'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/10/fool-jot-repost.html' title='FOOL (JOT repost)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-2751372091680223008</id><published>2010-10-17T18:51:00.001+01:00</published><updated>2010-10-17T18:51:21.215+01:00</updated><title type='text'>Registration</title><content type='html'>Things are looking up at registration: registration was very quick and efficient, the conference pack was pretty streamlined - no conference bag and not too much spam, which is great - I dislike the amount of waste most conferences generate. There is wifi in the lobby and conference rooms (yay!), and the gift was the cutest set of rainbow mini highlighters, which is a nice change from a USB stick, although not as practical.&lt;br /&gt;&lt;br /&gt;Looking through the program is pretty exciting, there seems to be a lot of good-sounding papers and invited talks. The organisers also seem to have managed the scheduling well - despite three concurrent sessions at most times, there is not a single clash between talks I'd like to attend; Thursday's invited talk does seem to clash with lunch, however, not sure how well that is going to work out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-2751372091680223008?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/2751372091680223008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=2751372091680223008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2751372091680223008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2751372091680223008'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/10/registration.html' title='Registration'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7100555937615727198</id><published>2010-10-17T18:50:00.001+01:00</published><updated>2010-10-17T18:50:54.494+01:00</updated><title type='text'>First Impressions of Reno and OOPSLA/SPLASH (JOT repost)</title><content type='html'>Hi, I'm Nick Cameron, a post-doc at Victoria University of Wellington. I'm going to be covering the SPLASH/OOPSLA conference for the JOT blog.&lt;br /&gt;&lt;br /&gt;It should be an interesting year for OOPSLA: it has undergone re-branding from OOPSLA to SPLASH (a re-arrangement of the OOPSLA letters, minus OO (because who programs with objects any more?), and appended with "for Humanity" (cringe)). The research paper selection process has changed too, they introduced `white-ball' papers (each member of the PC can select one paper to be accepted without argument), and there were slightly more papers accepted than in previous years (including mine, so I can't really complain; Thursday afternoon, if you're interested). The payment structure has changed too: you have to register and pay for individual workshops, I can't comprehend why - the best thing about workshops is wandering between them.&lt;br /&gt;&lt;br /&gt;Anyway, after twenty-odd hours on a plane from NZ, we started our descent into Reno, we got a birds-eye view of the Nugget (the conference venue and hotel) as we came in - sandwiched between the expressway and a railway yard, it did not look good. Reno airport was like a gateway into hell, slot machines everywhere and a backdrop of billboards for "gentleman's clubs". &lt;br /&gt;&lt;br /&gt;The conference venue is almost comically grim. The main floor is a sea of slot machines and haggard looking people. There are a lot of cowboy hats around, and not in an ironic way. No-one looks happy to be here, mostly people look desperate, or just plain chewed up. People smoke a lot, indoors, which seems a bit odd in 2010. There is a patched motorcycle gang drinking in the lobby (seriously, this is not an exaggeration).&lt;br /&gt;&lt;br /&gt;If I had to describe Sparks, and the Nugget, in a word, it would be "grim". I don't think I have ever been so disappointed in the location of a conference. I hope (and expect) the conference itself to be excellent, it will have to be to justify enduring this place for a week. On the bright side lots of interesting people are arriving, and the free wifi at Starbucks has become a natural hub...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7100555937615727198?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7100555937615727198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7100555937615727198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7100555937615727198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7100555937615727198'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/10/first-impressions-of-reno-and.html' title='First Impressions of Reno and OOPSLA/SPLASH (JOT repost)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7253056797693079892</id><published>2010-10-17T18:48:00.002+01:00</published><updated>2010-10-17T18:50:16.664+01:00</updated><title type='text'>OOPSLA report</title><content type='html'>I'm at the OOPSLA/SPALSH confernce in the charming city of Reno, NV. The highlight so far has been shooting high powered firearms in the desert next to a decomposing horse corpse. I am blogging the event for JOT (link coming soon), but I'll repost my reports here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7253056797693079892?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7253056797693079892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7253056797693079892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7253056797693079892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7253056797693079892'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/10/oopsla-report.html' title='OOPSLA report'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1805445382940531848</id><published>2010-08-19T01:23:00.002+01:00</published><updated>2010-08-19T01:29:30.067+01:00</updated><title type='text'>More writing</title><content type='html'>Just finished another paper writing push: camera-ready OOPSLA paper, submission to FOOL on multiple ownership, and a submission to PLATEAU on evaluating Go, the new programming language from Google. The two new papers are both mostly students work, so working on them has been a bit of a new experience. The Go paper is an area I am new to (PL evaluation) and about a language I was new to, so was a new experience all round. It's all been pretty exhausting, and looking forward to doing some actual research again soon (although there is a journal version of an old paper in the works first).&lt;br /&gt;&lt;br /&gt;Also, back to teaching again in two weeks. Teaching type systems again for six weeks. The first time I've taught the same stuff again, so hopefully I will be better and more polished, and it should be less work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1805445382940531848?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1805445382940531848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1805445382940531848' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1805445382940531848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1805445382940531848'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/08/more-writing.html' title='More writing'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5335866403994368044</id><published>2010-08-02T06:36:00.000+01:00</published><updated>2010-08-02T06:37:31.331+01:00</updated><title type='text'>On advertising, the software industry, and Bill Hicks</title><content type='html'>"By the way, if anyone here is in marketing or advertising...kill yourself." - Bill Hicks&lt;br /&gt;&lt;br /&gt;I watched "American: The Bill Hicks Story" at the weekend. It was an excellent film and well worth watching, especially if you are a Bill Hicks fan. How is this relevant to programming languages? It's not. But it is vaguely relevant to the state of the software industry, bear with me...&lt;br /&gt;&lt;br /&gt;One of Bill Hicks' 'things' is with marketing and advertising; see, for example, the above quote. Now I wouldn't quite agree with that, but I do agree that advertising and marketing make my life considerably worse, and I really can't stand them. I think that working in these industries cannot, morally, be justified. Whilst I am a supporter of capitalism (it might not be a great economic system, but it is definitely the least worst that anybody has come up with so far), I detest the current climate of consumerism and think it is a great detriment to most societies. Advertising/marketing is a key feeder of consumerism and thus, I don't like it.&lt;br /&gt;&lt;br /&gt;Now the great thing about a lot of software right now is that it is free. Some is really free, made by volunteers out of the goodness of their hearts, but most is funded by advertising. The most obvious and successful example being Google. Furthermore, a whole lot of non-software information is funded by advertising, for example, most of the internet. So I can't close my eyes and wish that all the advertising in the world would go away, because then so would most of the software I use and websites I read. And companies I might one day like to work for.&lt;br /&gt;&lt;br /&gt;So is there a moral problem to using such ad-funded software and websites. I use adblock, so of course I don't actually see any ads, and certainly never click any. So I'm kind of getting a free ride (oh, how I wish there was adblock for TV and real life). So I'm not funding the ads in anyway. But, this opens up a new problem: am I just free loading on those who are less tech-savvy than I and who do not use adblock? Well they don't pay for the ads, even if they click them, so not in a monetary sense. Although I guess they put up with the inconvenience (who knows, perhaps they even like the ads). And at the end of the day it's a slice of the price of the goods that we all buy, so in a way there is a consumption tax that is used to fund free websites and software, which is kind of nice. And also hundreds of engineers and investors, which is not so cool. And of course as a tax on consumption to fund information, it must be highly inefficient, since the advertisers and marketing people and managers at Google on obscene salaries all take their cut. It may still be more sefficient than an actual tax administered by a government though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5335866403994368044?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5335866403994368044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5335866403994368044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5335866403994368044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5335866403994368044'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/08/on-advertising-software-industry-and.html' title='On advertising, the software industry, and Bill Hicks'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1082858970808342913</id><published>2010-07-30T04:41:00.002+01:00</published><updated>2010-07-30T04:58:39.762+01:00</updated><title type='text'>Teaching programming</title><content type='html'>I taught a second year course on Java programming last semester, and, being in a university (and being a programming languages person), I think about teaching programming a fair bit. In particular, which languages should we teach?&lt;br /&gt;&lt;br /&gt;Here is how I would design a curriculum if I were king (or head of programme or whatever):&lt;br /&gt;&lt;br /&gt;1st year: assembly (8086, none of this RISC crap) and Haskell in parallel (in fact I would start with machine code and lambda calculus for the first few weeks).&lt;br /&gt;&lt;br /&gt;2nd year: C and Python, again in parallel&lt;br /&gt;&lt;br /&gt;3rd year: C++ and Java.&lt;br /&gt;&lt;br /&gt;You could swap Haskell for some other pure, lazy, functional language if you like, and Javascript, Ruby, or Perl for Python, and Java for C#, and you probably don't need C++ and Java in the third year, one or the other would do.&lt;br /&gt;&lt;br /&gt;And of course, this wouldn't work in real life --- you would scare off most of the students in the first year and it would only appeal to the very smartest and geekiest of students. But I think it is a good order: students would get some key concepts (recursion, pointers, machine organisation) early which they can apply when the learn the later langauges. The problem with learning Java first and then the fun stuff, is you don't learn your lessons that way - programming in C helps to make you a better Java programmer, but not vice-versa.&lt;br /&gt;&lt;br /&gt;I think this organisation would give a good appreciation of real-life computers (too many students have no idea about how their Java programs relate to bits and bytes); and how to think about programming in a 'smart' way (higher order functions etc.)&lt;br /&gt;&lt;br /&gt;A final advantage, the languages match the scale of the exercises: small programs in assembly/Haskell up to large programs in Java, just the way it was all designed.&lt;br /&gt;&lt;br /&gt;I honestly think this would be the best way of teaching programming to good students. Unfortunately, a CS degree is about more than just programming, and students get a say in how they are taught, so it will never catch on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1082858970808342913?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1082858970808342913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1082858970808342913' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1082858970808342913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1082858970808342913'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/07/teaching-programming.html' title='Teaching programming'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3536891689820587766</id><published>2010-07-21T01:28:00.002+01:00</published><updated>2010-07-21T01:49:27.666+01:00</updated><title type='text'>Python</title><content type='html'>My project for last weekend was to learn how to program in Python. Possibly an ambitious goal for a weekend, but I feel I have a good grasp of the basics.&lt;br /&gt;&lt;br /&gt;I didn't find it a hard language to learn, I guess it is designed that way, but being familiar with Groovy and Javascript probably help. I've only written small programs, but here are some thoughts:&lt;br /&gt;&lt;br /&gt;I love the syntax and general feel, it feels very 'right'. Most things are done the way I would do them. I like indentation much better than braces and don't miss semi-colons one bit. On the other hand, it is much more readable than Perl. The only things I object to is colons to initiate block statement and pass statements rather than empty blocks, both seem to go against the minimalist syntactic philosophy, and both seem unnecessary.&lt;br /&gt;&lt;br /&gt;In fact I love the language. It seems very good at what it sets out to do, much like C and unlike C++. There are very few rough edges, and lots of things that make you go "nice!".&lt;br /&gt;&lt;br /&gt;I like the support for first-class functions, lambdas, map, filter, etc. Syntax for lists, slices, list comprehensions, generators, etc. I thought slices could have been used instead of the range() expression.&lt;br /&gt;&lt;br /&gt;The jury is still out on yield.&lt;br /&gt;&lt;br /&gt;Not using types is liberating in small programs. But my Groovy experience is that I quickly want to use them for documentation once the programs get larger ("just use variable names" you say; OK, I want compiler-checked documentation). Optional/hybrid types are the obvious solution. Maybe it is because I'm too used to C/Java programming.&lt;br /&gt;&lt;br /&gt;The inefficient implementation scares the hell out of me. But, intellectually, I know it doesn't matter for 99% of applications, but still... Also I would prefer the implementation was not as obvious to the programmer (in docs as well as reflective code).&lt;br /&gt;&lt;br /&gt;I like the duck typing approach to objects. It feels so much more lightweight than implementing interfaces. It makes me think that interfaces could be supported in a typed language much more easily. Not sure how, but something like Donna Malayeri's blend of nominal and structural types could be helpful.&lt;br /&gt;&lt;br /&gt;I find the way fields of classes are handled strange: adding fields when they are assigned to fits nicely with the way variables are used, but feels very uncomfortable for fields. I think this is Java/C++ conditioning at work, and I haven't written programs that make use of this facility yet, so I am reserving judgement. It may well be a good idea, but it gives me the creeps.&lt;br /&gt;&lt;br /&gt;I like the 'everything is public' philosophy, although I fear that those of a more software engineering bent would be horrified.&lt;br /&gt;&lt;br /&gt;In conclusion, I like Python a lot. Of the scripting/dynamic programming languages I've looked at, it is my favourite. I hope to have an opportunity to use it for something serious soon.&lt;br /&gt;&lt;br /&gt;And I still have the feeling that there is a huge space for a programming language with some of the dynamic features of a language like Python, combined with a more heavyweight class system (virtual classes) and optional typing to make a very pleasant general purpose language.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3536891689820587766?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3536891689820587766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3536891689820587766' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3536891689820587766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3536891689820587766'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/07/python.html' title='Python'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5971683805099876040</id><published>2010-07-21T01:23:00.002+01:00</published><updated>2010-07-21T01:28:05.393+01:00</updated><title type='text'>Women and Computer Science</title><content type='html'>Let it be known that I have been thinking about the issue of women in computer science. More precisely the fact that they are extremely under-represented.&lt;br /&gt;&lt;br /&gt;This was in part set in motion by a talk on the subject by Barbara Crump at the NZCSRSC.&lt;br /&gt;&lt;br /&gt;Anyway, I have lots of thoughts and opinions, but mainly for now I am reading and pondering. Musings on the subject will have to wait until I feel sufficiently informed, which may take some time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5971683805099876040?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5971683805099876040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5971683805099876040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5971683805099876040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5971683805099876040'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/07/women-and-computer-science.html' title='Women and Computer Science'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-9099565247841553122</id><published>2010-06-29T14:32:00.002+01:00</published><updated>2010-06-29T14:44:26.249+01:00</updated><title type='text'>TOOLS Europe day 1</title><content type='html'>So, after a monstrous 16hr journey from Maribor to Malaga, I arrived at TOOLS Europe. Malaga is surprisingly nice, all the package holiday tourists stay out of town - win!&lt;br /&gt;&lt;br /&gt;The day kicked off with Oege de Moor's invited talk. I was not that excited about the prospect, but it was actually a really interesting talk - his tool is very useful and does some interesting things, all whilst being language independent. And the internal language is a pretty cool combination of logic/relational query language and OO.&lt;br /&gt;&lt;br /&gt;My talk was at 2:30, and went pretty well. I should probably have had more and better examples; I realised as I talked that I was expecting the audience to keep rather a lot in their heads - why is this so obvious when giving the talk, but impossible to comprehend when practising?&lt;br /&gt;&lt;br /&gt;Erik Ernst followed with an interesting talk on virtual types/parametric types/their relationship. Lots more interesting virtual classes stuff to think about.&lt;br /&gt;&lt;br /&gt;Johan Ostland finished off the session with a talk about Welterweight Java, the talk filled in a lot of background about the various -weight Java calculi that I wasn't aware of, but probably should have been. As nice as Welterweight Java looks, I hope to never have to use it - my languages are already too big, and the smaller the better: if I could work purely in the untyped lambda calculus I would.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-9099565247841553122?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/9099565247841553122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=9099565247841553122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9099565247841553122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9099565247841553122'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/tools-europe-day-1.html' title='TOOLS Europe day 1'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6851665250440684451</id><published>2010-06-25T21:42:00.001+01:00</published><updated>2010-06-25T21:42:48.149+01:00</updated><title type='text'>ECOOP day 3</title><content type='html'>The day kicked off with Erik Ernst's invited talk: there was some philosophising, but mostly it was about virtual classes and gbeta ("the nomination for best foreign programming language syntax goes to..."). I very much approve of virtual classes --- they are awesome and with any luck will be in a major language soon. Erik motivated virtual classes using the standard expression problem and an example using wireless communication. He also talked a little about proof assistants, and gave a mention to his work with Sophia and I on Java wildcards.&lt;br /&gt;&lt;br /&gt;Gilad Bracha talked about modules as objects in Newspeak and was awarded the best paper award. More nested classes stuff, this time to support modules. Late binding of names apparently gives nested and virtual classes and mixins straight up. Abolishing the global namespace means imports have to be passed in when top level classes are instantiated. At the root of it all, classes must be passed in by the IDE or some other tool. This leads to automatic sandboxing of code.&lt;br /&gt;&lt;br /&gt;I liked the talk on inline caching, I love this kind of compiler optimisation stuff, it brings out my inner geek. But, it is far enough out of my area, that I need to read the paper to get the most out of that one, so no comments, sorry.&lt;br /&gt;&lt;br /&gt;And that is the end of ECOOP for another year, now onto Malaga and TOOLS...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6851665250440684451?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6851665250440684451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6851665250440684451' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6851665250440684451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6851665250440684451'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/ecoop-day-3.html' title='ECOOP day 3'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6760569719889677415</id><published>2010-06-23T18:34:00.002+01:00</published><updated>2010-06-23T21:39:31.601+01:00</updated><title type='text'>ECOOP day 1</title><content type='html'>So, other than the crap wifi and an absence of snacks with coffee, the conference has been going well. There are many more people here than expected, it's not as quiet as many of us had feared. The Habakuk is a fairly good venue, the main conference room is nice, with desks, but crap wifi. The summer school room is a bit how and air-less, but has marginally better wifi (but still uselessly bad). Lunch is good, although it could have more vegetarian options (there seems little point in asking about dietary needs at registration if you are not going to bother making any dedicated food for said needs).&lt;br /&gt;&lt;br /&gt;Anyway, Shriram gave another talk about Javascript --- this time about a core calculus, interesting they had actually implemented the de-sugar-er and operational semantics so could execute Javascript using their formalism.&lt;br /&gt;&lt;br /&gt;I really wanted to see Gavin Bierman's talk on dynamic types for C# --- he is always a great speaker. Unfortunately I went on a mission to buy some new t-shirts at lunchtime (due to the relative pricing of a new t-shirt v. having a single t-shirt laundered at my hotel) and got lost. As compensation to myself I had a delicious blueberry gelatto.&lt;br /&gt;&lt;br /&gt;I attended Andrew Kennedy's summer school session on unit types in F#, it was a good session with lots of interesting theoretical stuff about unit types (I couldn't believe there was so much to talk about them). I guess though, I would have preferred more on these interesting details (Andrew skipped quite a few slides), and a bit less on F# itself.&lt;br /&gt;&lt;br /&gt;I would have liked to have seen the talks on "Verifying Generics and Delegates" and (especially after Shriram's plug yesterday) "Recency Types for Analysing Scripting Languages", but these clashed with the summer school. This was a shame, I believe they could have scheduled this better (there are other clashes later in the week too).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6760569719889677415?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6760569719889677415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6760569719889677415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6760569719889677415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6760569719889677415'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/ecoop-day-1.html' title='ECOOP day 1'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6388319736102966885</id><published>2010-06-22T15:51:00.001+01:00</published><updated>2010-06-23T18:34:44.875+01:00</updated><title type='text'>Worst wifi connection ever</title><content type='html'>Is foiling my attempts to live-blog ECOOP :-( So, more dead-blog entries later...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6388319736102966885?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6388319736102966885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6388319736102966885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6388319736102966885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6388319736102966885'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/worst-widi-connection-ever.html' title='Worst wifi connection ever'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8508406831798724239</id><published>2010-06-22T10:55:00.002+01:00</published><updated>2010-06-22T15:51:14.729+01:00</updated><title type='text'>FTfJP invited talk - "Electrifying Javascript"</title><content type='html'>By Shriram Krishnamurthi. O for awesome. Good speaker, good talk, very electrifying! Presented a type system for Javascript (which seems to be fashionable right now, this one focuses on the dynamic parts of the type system, rather than finding class-like types). Cool type system - must be flow sensitive, features tags (like types, but simpler and descriptive, to support "typeof") and a nice way to go from tags to types, and non-nullness.&lt;br /&gt;&lt;br /&gt;Actually uses flow analysis, but a simple (and intra-procedural) kind, looking only at tags. The type system uses tagchecks, and the flow analysis inserts tagchecks.&lt;br /&gt;&lt;br /&gt;A slogan: "Types on the outside, flows on the inside".&lt;br /&gt;&lt;br /&gt;The type checker assumes function parameters are anntotated with types. The final piece of the puzzle is that they dynamically infer these types which can then be used for type checking (!)&lt;br /&gt;&lt;br /&gt;The whole process seems to work pretty well - good results, but over a relatively small code base.&lt;br /&gt;&lt;br /&gt;[Note to self: reasonable plug for recency types, tomorrow]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8508406831798724239?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8508406831798724239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8508406831798724239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8508406831798724239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8508406831798724239'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/ftfjp-invited-talk-electrifying.html' title='FTfJP invited talk - &quot;Electrifying Javascript&quot;'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3704313642855882713</id><published>2010-06-22T10:13:00.000+01:00</published><updated>2010-06-22T10:54:49.786+01:00</updated><title type='text'>Correction</title><content type='html'>The talk on reverse inheritance was not re-scheduled, it was another talk which had Skype issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3704313642855882713?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3704313642855882713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3704313642855882713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3704313642855882713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3704313642855882713'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/correction.html' title='Correction'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8273196174068587673</id><published>2010-06-22T10:10:00.002+01:00</published><updated>2010-06-22T10:13:04.048+01:00</updated><title type='text'>maspeghi</title><content type='html'>I am currently at the new MASPEGHI workshop. I was interested to hear talks on "Modular Composition and State Update in Plaid" and "Reverse Inheritance in Statically Typed Object-Oriented Programming Languages". Unfortunately, the first talk was rescheduled earlier, so I missed it, and the second was cancelled due to Skype difficulties. Luckily, the third talk I am interested in - "Pass-by-subclass Parameters" looks like it will go ahead shortly...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8273196174068587673?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8273196174068587673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8273196174068587673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8273196174068587673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8273196174068587673'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/maspeghi.html' title='maspeghi'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-4235721245553988574</id><published>2010-06-22T09:10:00.002+01:00</published><updated>2010-06-22T09:15:22.308+01:00</updated><title type='text'>Towards a Semantic Model for Java Wildcards</title><content type='html'>Alex Summers just presented our work (with Sophia and Mariangiola) on semantic models for Java wildcards. He gave (I thought) a very good talk. It was a hard talk to make because the work is very technical and complex, and the joy is very much in the details. Alex managed to describe our proofs using tree diagrams in a very intuitive way, I think I understood the work better than when I was actually doing it!&lt;br /&gt;&lt;br /&gt;I think we got a lot of interest, and certainly we had some good, interested questions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-4235721245553988574?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/4235721245553988574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=4235721245553988574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4235721245553988574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4235721245553988574'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/towards-semantic-model-for-java.html' title='Towards a Semantic Model for Java Wildcards'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5026785066282942884</id><published>2010-06-22T08:33:00.002+01:00</published><updated>2010-06-22T08:43:14.079+01:00</updated><title type='text'>ECOOP 2010</title><content type='html'>I'm at ECOOP 2010 in Maribor, Slovenia. I will write a few posts about papers in the upcoming days. I am not presenting (Alex Summers is about to present our paper to FTfJP), so it should be a bit relaxing.&lt;br /&gt;&lt;br /&gt;Maribor is a very nice city, and I find it quite nice to be somewhere 'foreign' - different language, different architecture, etc. Quite the change after a year in australasia.&lt;br /&gt;&lt;br /&gt;There has been quite a lot of grumbling about the location - too hard to get to, to hard to get around, not enough organisation. And some of these comments are fair, but I found the journey not too stressful, and the organisers are pretty organised (although some info has been pretty late in arriving). And I think it is great to have the conference somewhere less usual, it is a good oportunity to see a lovely country which I would otherwise never have visited.&lt;br /&gt;&lt;br /&gt;My hotel is also lovely, particularly nice is the wide variety of saunas in the basement - it's a miracle I've made it to the conference really. What is less lovely is that access is by gondola only, once an hour until 10 - which is pretty restrictive.&lt;br /&gt;&lt;br /&gt;Finally, I was not expecting many people to be here, from what I heard; but actually, there are many people I know, and it is very nice to catch up...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5026785066282942884?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5026785066282942884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5026785066282942884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5026785066282942884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5026785066282942884'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/06/ecoop-2010.html' title='ECOOP 2010'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-4850326640410054994</id><published>2010-05-25T23:40:00.003+01:00</published><updated>2010-05-25T23:47:15.629+01:00</updated><title type='text'>Papers</title><content type='html'>It's a been a god few months for paper publishing (and I have been a little lax about reporting on it): "Encoding Ownership types in Java" (with James Noble) has been accepted to TOOLS, "Towards a Semantic Model for Java Wildcards" (with Alex Summers, Maraingiola Dezani-Ciancaglini, and Sophia Drossopoulou) has been accepted to FTfJP, and "Tribal Ownership" with James Noble and Tobias Wrigstad has been accepted to OOPSLA. Which all makes me very pleased indeed! I think they are all good work, and I very much enjoyed working on them, learning a lot from my collaborators in the process - thanks guys!&lt;br /&gt;&lt;br /&gt;These papers should be appearing shortly on my research page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-4850326640410054994?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/4850326640410054994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=4850326640410054994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4850326640410054994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4850326640410054994'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/05/papers.html' title='Papers'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1874812714119200733</id><published>2010-05-13T02:01:00.002+01:00</published><updated>2010-05-13T02:17:53.747+01:00</updated><title type='text'>Impact</title><content type='html'>A blog posting day today. This one has been swirling in my mind for a while actually.&lt;br /&gt;&lt;br /&gt;Robert O'callahan (Mozilla) gave a talk at Vic recently (&lt;a href="http://weblogs.mozillazine.org/roc/archives/2010/04/changing_the_wo.html"&gt;blog link&lt;/a&gt;), in essence, on the impact of one's work in the world. I missed the talk, but read the slides and had a chat with Rob about this, and it got me thinking. A lot.&lt;br /&gt;&lt;br /&gt;What impact does my work have? Well as a theoretical researcher, I'm used to the answer being none. And I've been pretty comfortable with that, I get satisfaction from the intellectual challenge, rather than the real-world impact. If one of my ideas trickles down into something useful one day, then that is a bonus.&lt;br /&gt;&lt;br /&gt;But, thinking about this a bit more, impact is like risk - it's a two dimensional idea, in the case of impact, there is magnitude (how many people, how much you impact each person) and 'positivity' (I can't think of a better name, I mean how positive the effect is). I've always thought in terms of magnitude, implicitly assuming I would be making things better, not worse (no intention of doing research for the military, for example). But I think it is important to think in terms of both - one should strive to make one's impact better, as well as bigger.&lt;br /&gt;&lt;br /&gt;Not sure what any of this means in practical terms, but it is a musing in the spirit of the blog's name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1874812714119200733?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1874812714119200733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1874812714119200733' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1874812714119200733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1874812714119200733'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/05/impact.html' title='Impact'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3622026109097734978</id><published>2010-05-13T01:55:00.003+01:00</published><updated>2010-05-13T02:00:55.831+01:00</updated><title type='text'>UK elections - postscript</title><content type='html'>So, a dissapointing showing for the lib-dems after predictions of greatness. But a tory-lib-dem coaliation is probably the best result that could be hoped for. Insha'allah, the lib-dems will temper the uglier side of conservative social policy, but the tories will get to fix the economy (whatever that means). On the other hand, it could all fall apart in a few months, time will tell. At least Labour are out of power (if you told me ten years ago that I'd be saying that, I'd have laughed in your face). Hopefully, the kicking will be taken for a comment on the home (civil liberties, "broken Britain" stuff) and foreign (war) policies of the last few years. We should remember that, Labour did a lot of good things for the country too...&lt;br /&gt;&lt;br /&gt;Fingers crossed for some good things from the new boys (talking of which, it really is boys, where are all the powerful female ministers?), and hopefully proper voting reform at some stage...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3622026109097734978?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3622026109097734978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3622026109097734978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3622026109097734978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3622026109097734978'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/05/uk-elections-postscript.html' title='UK elections - postscript'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-2377420890415209581</id><published>2010-04-29T23:42:00.002+01:00</published><updated>2010-04-29T23:52:30.692+01:00</updated><title type='text'>UK Elections</title><content type='html'>Bit of a departure from the usual, but it's election time, so why not?&lt;br /&gt;&lt;br /&gt;Who to vote for - no-one looks conviincing, labour are tired and have made a total mess, plus there is that unpleasent Tony Blair taste left over. The size of the british state is getting ridiculous and the infringements on civil liberties frightening.&lt;br /&gt;&lt;br /&gt;Voting Tory would be like selling one's soul to Satan (remember the '80s?), plus Cameron looks like Blair 2.0. The liberal democrats have some good policies (civil liberties, imigration) and actually have a chance of getting some votes this year, but have some stupid policies too (abolishing tuition fees, no nuclear power, etc.). Perhaps a lib-dem/tory coalition might work. What we really need is a proper liberal party - in both economic and social terms. And one with the guts to radically reform the health service (take power away from the GMC, reform doctor training and the doctor's/GMC monopoly) and education (let universities charge what they like, abandon the stupid target of getting stupid people through universities, fix primary/secondary schools a bit (although God knows how to do that)).&lt;br /&gt;&lt;br /&gt;So &lt;a href="http://www.economist.com/opinion/displayStory.cfm?story_id=16007299&amp;source=hptextfeature"&gt;The Economist&lt;/a&gt; is probably right, as repulsive as it seems, the tories are probably the best bet for a vote. Now that is a sorry state of affairs, glad I don't actually live in the UK right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-2377420890415209581?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/2377420890415209581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=2377420890415209581' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2377420890415209581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2377420890415209581'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/04/uk-elections.html' title='UK Elections'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1747497214874499493</id><published>2010-04-14T03:06:00.002+01:00</published><updated>2010-04-14T03:18:17.848+01:00</updated><title type='text'>You wait months for a good seminar...</title><content type='html'>...and then three come along at once!&lt;br /&gt;&lt;br /&gt;Following Monday's seminar Robert was scheduled to talk again on tuesday, this time at the NZCSRSC (student research conference). It sounded like an interesting talk - "How to change the world" is not a modest title. And having perused the slides I am very disappointed not to have attended - it looks like there were a lot of good things, and thinking about your work in terms of impact is an interesting perspective, and one which I have not thought of since working in PLT.&lt;br /&gt;&lt;br /&gt;Anyway, I couldn't attend because I was attending another seminar, this one from Rusten Leino on the Dafny language/verifier and other verifcation stuff going on at Microsoft research. It was a very interesting seminar with a very good demo of verification in action. Pretty impressive amount of bugs caught and all proofs done automatically - it was kind of like magic! Really solved the problem I have with a lot of these things, which is that no-one wants to prove their programs. The annotation overhead is still quite high, and I think only a minority of programmers will be able to write the specifications. But, with a little practice, I can imagine writing code with specs in Dafny in a practical way.&lt;br /&gt;&lt;br /&gt;Rusten also summarised some of the other verification efforts he is associated with and they have acheived some pretty cool stuff.&lt;br /&gt;&lt;br /&gt;"Dynamic framing" sounds cool, and I should try and understand it better.&lt;br /&gt;&lt;br /&gt;Overall, I got the feeling that right there was the future of 'safe' programming languages, or at least a sneak peak of it. And, since it's at Microsoft, it actually has a fighting chance of making it into the real world!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1747497214874499493?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1747497214874499493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1747497214874499493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1747497214874499493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1747497214874499493'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/04/you-wait-months-for-good-seminar.html' title='You wait months for a good seminar...'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8653251431520328043</id><published>2010-04-12T01:13:00.002+01:00</published><updated>2010-04-12T01:19:01.339+01:00</updated><title type='text'>Who would have thought...</title><content type='html'>...that a talk about standards would be interesting? But it was! Robert O'Callahan (Mozilla) just gave a talk about web standards. Standards are dull, and people who care about them tend to be even duller, but this was not a dull talk! It was interesting! Lots of interesting things about the web.&lt;br /&gt;&lt;br /&gt;One nice thing is that short interations seem to work better for standards too, just like software. I think this is one of those fundamental computer science truths, kind of like "you can solve any problem with an extra indirection", for any task, shorter iterations are better.&lt;br /&gt;&lt;br /&gt;Also, interesting parsing problem - "&lt;b&gt;here&lt;i&gt;be&lt;/i&gt;dragons&lt;/b&gt;", its obvious what is intended, but how should you parse it? And make a tree that can be manipulated by Javascript etc. And we all thought syntax had been solved thirty years ago. In fact, the web seems to be a whole new world of interesting computer science problems (see the post on Javascript VMs). Now what would be an interesting research topic?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8653251431520328043?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8653251431520328043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8653251431520328043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8653251431520328043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8653251431520328043'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2010/04/who-would-have-thought.html' title='Who would have thought...'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7192858146131263660</id><published>2009-12-16T21:31:00.002Z</published><updated>2009-12-16T21:43:39.080Z</updated><title type='text'>VM talks and assembly language</title><content type='html'>Google are currently developing two (at least only two are public) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;VMs&lt;/span&gt;: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Dalvik&lt;/span&gt; and V8. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Dalvik&lt;/span&gt; is a Java &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;VM&lt;/span&gt; (but not a "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;JVM&lt;/span&gt;" - it doesn't run Java byte code) targeted at mobile devices (part of Android), V8 is a Javascript interpreter and part of the Chrome browser. There are talks on both:&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Dalvik&lt;/span&gt;: &lt;a href="http://www.youtube.com/watch?v=ptjedOZEXPM"&gt;http://www.youtube.com/watch?v=ptjedOZEXPM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;V8: &lt;a href="http://www.youtube.com/watch?v=lZnaaUoHPhs"&gt;http://www.youtube.com/watch?v=lZnaaUoHPhs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I recommend you watch both, they are both good, the V8 one in particular really got my juices going (man, I'm such a geek).&lt;br /&gt;&lt;br /&gt;I think it is interesting to compare the two as the tackle a similar problem in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;very&lt;/span&gt; different ways. Obviously the source languages are different, in particular, V8 does lots of interesting stuff to optimise Javascript out of the dynamic &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;language&lt;/span&gt; tar pit. The goals are different: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Dalvik's&lt;/span&gt; main goal is to minimise space (also, time, but mainly space) and battery life; V8 is a pure speed machine. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Dalvik&lt;/span&gt; doesn't do any &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;JITing&lt;/span&gt;, V8 is (as I understand it) all &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;JITed&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Dalvik&lt;/span&gt; is &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;optimised&lt;/span&gt; by using a new set of byte codes and a more compressed file format and some neat tricks on internal libraries etc. V8 is optimised by using classes and caching call sites. There's tons more on both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;VMs&lt;/span&gt; in the talks, and lots more stuff for an interesting comparison.&lt;br /&gt;&lt;br /&gt;All of this machine &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;hackery&lt;/span&gt; inspired me to look again at x86 assembly and architecture (and maybe I'll look at ARM next). I used to think x86 assembly was a big scary mess and best &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;shyed&lt;/span&gt; away from. I've always output &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;JVM&lt;/span&gt; or MIPS assembly in compilers etc. for this reason. Bu actually, x86 is not too bad! There's a few more instructions that do some pretty interesting things, but it really isn't much worse than other assembly &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;languages&lt;/span&gt;. And I find it really interesting finding out how the processor works; maybe there's a closet bit-jockey in me after all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7192858146131263660?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7192858146131263660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7192858146131263660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7192858146131263660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7192858146131263660'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/12/vm-talks-and-assembly-language.html' title='VM talks and assembly language'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5307072270984716240</id><published>2009-07-22T00:50:00.002+01:00</published><updated>2009-07-22T01:04:25.378+01:00</updated><title type='text'>A rant - empirical analysis</title><content type='html'>Having typed up my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ECOOP&lt;/span&gt; notes and gone through the proceedings a bit, I have actually got a little bit angry about the state of affairs concerning empirical analysis.&lt;br /&gt;&lt;br /&gt;A few years ago it seemed that any kind of empirical analysis was a bonus and as long as you had a problem and a solution and a soundness proof you were good to go. The obvious problem is that there is nothing to say that your solution addresses the problem, that the problem is serious, or that the solution is practical.&lt;br /&gt;&lt;br /&gt;Bit by bit reviewers have started asking for some &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;empirical&lt;/span&gt; evidence to answer these questions. Can someone tell me why this fashion started?&lt;br /&gt;&lt;br /&gt;I don't have too much of a problem with this, except that we are doing research here, and some of these crazy ideas which aren't practical and don't really solve any problem lead to solutions that are and do. If you press too hard for practicality you lose the paradigm shifting ideas that only seem practical in ten years time.&lt;br /&gt;&lt;br /&gt;What has made me angry, is that the pendulum seems to have swung too far: it now seems really hard to get something published without empirical analysis, which makes it hard to be productive unless you have an army of students and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;constrains&lt;/span&gt; some good, but not immediately practical, ideas. Furthermore, there seem to be a few papers published at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ECOOP&lt;/span&gt; which seem to be half a paper - just the evaluation or motivation section of a decent paper, without any real idea. These seem to have been published on the strength of the empirical analysis alone, without having asked how much of a contribution this analysis actually is.&lt;br /&gt;&lt;br /&gt;I agree there is a need for analysing existing work, but some just seems &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;unnecessary&lt;/span&gt; and, frankly, boring.&lt;br /&gt;&lt;br /&gt;I count four papers at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;ECOOP&lt;/span&gt; that I would reject for being pointless (there is at least one paper (probably more, but I can't be bothered to look through the proceedings again) that is pure analysis and I think is useful). No names, obviously.&lt;br /&gt;&lt;br /&gt;I'd be very interested to here othe peoples views on this, cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5307072270984716240?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5307072270984716240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5307072270984716240' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5307072270984716240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5307072270984716240'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/rant-empirical-analysis.html' title='A rant - empirical analysis'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-780669699253669471</id><published>2009-07-22T00:49:00.000+01:00</published><updated>2009-07-22T00:50:22.653+01:00</updated><title type='text'>ECOOP day 3</title><content type='html'>Tobias gave the first technical talk and was surprisingly bright-eyed; apparently that's what being &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;Swedish&lt;/span&gt; does for you. The paper is &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;entitled&lt;/span&gt; Loci: Simple Thread-&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;Locality&lt;/span&gt; for Java. There is a very simple ownership system (two annotations - shared and thread) where threads own their thread local data and the system restricts references accordingly, thus data is kept thread-local. It's all enforced statically, and they have a compiler. Their empirical evaluation found that most classes could be made thread-local.&lt;br /&gt;&lt;br /&gt;Next was &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Failboxes&lt;/span&gt;: Provably Safe Exception Handling presented by Bart Jacobs the younger. These are essentially a safer version of exceptions (although they are layered on top of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;exceptions&lt;/span&gt;, they're not a replacement). The problem with standard exceptions is that side effects made inside a try block will remain even if the try block fails and an exception is thrown. Fail boxes allow non-lexical scoping of expressions and so failure can prevent execution of dependent expressions which are outside the try block.&lt;br /&gt;&lt;br /&gt;Weirdest talk of the conference award goes to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Yossi&lt;/span&gt; Gil presenting "Are we ready for a Safer Construction Environment". The idea is small but sweet and is a restriction on the way objects can be constructed. The problem is that during object construction, objects are 'half-baked' that is, construction has not finished, fields may not have been initialised, and invariants may not have been established. They propose restricting construction to their hard-hat model, which means that means no virtual method calls and no exposure of this to external methods.&lt;br /&gt;&lt;br /&gt;Now, whilst this is a solution, it's not very clever, it seems to be along the lines of "if you do nothing, you won't get hurt" and to me seems like it should be a paragraph in a 'how to program' textbook, not a full paper in a PL conference. But, they have done loads of corpus analysis to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;confirm&lt;/span&gt; the obvious, and since that seems to be in fashion now (why? Can someone please tell me why?!), it has got published. Having said that it is something that I would bear in mind if I were making a system where invariants at construction &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;was&lt;/span&gt; important, so I guess it should be published somehow...&lt;br /&gt;&lt;br /&gt;Christian &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Haack&lt;/span&gt; then talked about Type-Based Object Immutability with Flexible Initialisation. This seems like a lightweight ownership system for immutability. I think the key of it is that you enforce owners-as-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;dominators&lt;/span&gt; (or something like it) during initialisation to ensure an object is initialised 'privately' and then enforce a kind of owners-as-modifiers (it's not total immutability) afterwards. Which is nice as far as it goes. But I feel there is a sweet spot with the immutability/uniqueness/ownership combination which has not quite been hit, although this and other papers are getting close.&lt;br /&gt;&lt;br /&gt;Finally, Ali Ibrahim (I think) talked about Remote Batch Invocation for Compositional Object Services. This is an optimisation of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;RMI&lt;/span&gt; so that remote calls are batched together for the sake of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;efficiency&lt;/span&gt;. They introduce a batch keyword to the language, and within the batch scope, the order of execution can be changed so that remote calls are batched. It's all bit cleverer than that, for example, they do 're-forestation' of data structures to improve batching of loops. They have an implementation and plenty of empirical analysis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-780669699253669471?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/780669699253669471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=780669699253669471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/780669699253669471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/780669699253669471'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/ecoop-day-3.html' title='ECOOP day 3'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5818637355690784392</id><published>2009-07-21T01:49:00.001+01:00</published><updated>2009-07-21T01:49:26.414+01:00</updated><title type='text'>ECOOP day 2</title><content type='html'>Today's invited talk was by Dave Ungar and it felt more like a self-help tutorial than an academic talk. In fact all three of the talks I attended had a whiff of esteem boosting and soul searching about them: are we academics really that insecure in our endeavours or about out role in computer science?&lt;br /&gt;&lt;br /&gt;Anyway, Dave still seemed pretty bitter about the lack of success of Self and the way it was handled at Sun, which might well be justified, but didn't fit into the therapeutic tone of the rest of the talk. The points I took from the talk were: interpreters are better than compilers (and this needs technologies such as JIT to realise), design languages on principles rather than examples, and simplicity is better than expressiveness.&lt;br /&gt;&lt;br /&gt;The first technical talk of the day was Adding State and Visibility Control to Traits Using Lexical Nesting. The authors seem to back off the founding principles of traits by adding stateful traits (which are now exactly like classes or maybe mixins?) and nesting of objects to give visibility control. Composition is achieved by delegation and delegate methods are automatically generated. Of course, with state you then get back all the old multiple inheritance problems, which are addressed to some extent. So although nice ideas and well-thought out it seems to go completely against Dave Ungar's maxims of simplicity before expressivity and principles before examples.&lt;br /&gt;&lt;br /&gt;I liked Modular Visitor Components:..., although I'm not sure if it's even close to practical. This is a possible solution to an extension of the expression problem - the expression families problem. I wasn't quite clear what this was or to what extent previous solutions address it, in particular where virtual classes fall down. The solution was implemented in Scala using a collection of quite terrifying PL technologies - higher order type parameters, variance, traits, and self types. The result is a suitably complex type system that is nicely expressive.&lt;br /&gt;&lt;br /&gt;The other joint-best paper of the conference was Debugging Method Names. They find bugs in names such as getString not returning a value or not returning something of type String or setting something etc. They do all this automatically by analysing a whole bunch of programs, which is certainly clever but didn't really seem like a programming languages problem, or even that hard from the talk, maybe the paper better identifies the problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5818637355690784392?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5818637355690784392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5818637355690784392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5818637355690784392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5818637355690784392'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/ecoop-day-2.html' title='ECOOP day 2'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-2468447514267736147</id><published>2009-07-20T00:59:00.001+01:00</published><updated>2009-07-20T01:01:29.989+01:00</updated><title type='text'>ECOOP Day 3 - Day 1 of the main conference</title><content type='html'>The first invited talk (slides available &lt;a href="http://research.microsoft.com/en-us/um/people/simonpj/papers/haskell-retrospective/ECOOP-July09.pdf"&gt;here&lt;/a&gt;, which you should check out for the graphs, if nothing else) of the conference was from Simon Peyton Jones and was about type classes in Haskell, and, more generally, the relation between Haskell and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OO&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;langs&lt;/span&gt;. The talk was really good, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;SPJ&lt;/span&gt; has so much energy and gives a really, really good presentation. The big point that I took away was that Haskell has universal polymorphism (&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;parametric&lt;/span&gt; polymorphism) and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;OO&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;langs&lt;/span&gt; (i.e., Java) typically have &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;subtyping&lt;/span&gt; (inclusion polymorphism). I would generalise so far as to say that the primary form of polymorphism in functional &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;languages&lt;/span&gt; is universal quantification, and the primary form of polymorphism in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;OO&lt;/span&gt; languages is existential quantification, but then you all know I have a soft spot for the old backwards 'E'.&lt;br /&gt;&lt;br /&gt;The talk started with a quick overview of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;Haskell&lt;/span&gt; and then motivated type classes as a solution to the problem of how to do universally quantified functions, but restricted to certain types (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;eg&lt;/span&gt; don't want to have an equals function that can take functions as arguments). I won't pretend to fully understand type classes, but they seem cool. What is really cool, is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;SPJ's&lt;/span&gt; claim that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Wadler&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Blott&lt;/span&gt; just plucked the idea out of thin air!&lt;br /&gt;&lt;br /&gt;The next part of the talk compared Haskell type classes to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;OO&lt;/span&gt; dispatch. Both are essentially forms of dynamic dispatch, but type classes can be compiled away, which virtual methods cannot be. Furthermore, type classes dispatch based only on a value's type, whereas virtual methods dispatch on the value itself (by which I assume he means &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;runtime&lt;/span&gt; types). Type class dispatch is different to Java overloading too, because overloading is a static mechanism (it can be compiled down to no choice at all at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;runtime&lt;/span&gt;), but type classes dispatch at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;runtime&lt;/span&gt; (even though the mechanism is compiled out statically - actually now I write this I'm not 100% sure how this is difference from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;OO&lt;/span&gt; dispatch, other than &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;OO&lt;/span&gt; has &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;subtyping&lt;/span&gt;...).&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;SPJ&lt;/span&gt; also talked about things he envies in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;OO&lt;/span&gt;-land. First up was the power of the dot, which seemed to come down to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;IDE&lt;/span&gt; support and overloading - the latter of which no-one in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;OO&lt;/span&gt;-land seems to like anymore! Next were &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_25"&gt;heterogeneous&lt;/span&gt; lists, which I think is just another request for existential types, just like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;subtyping&lt;/span&gt; is. He then discussed future work a bit - the most interesting sounding bit of which is type &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_27"&gt;functions&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The first technical paper was &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;Coinductive&lt;/span&gt; Type Systems for Object-Oriented Languages, which was joint-best paper of the conference, but went completely over my head. I will return to it later though.&lt;br /&gt;&lt;br /&gt;Next, Checking framework Interactions with Relationships presented by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;Ciera&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;Jaspan&lt;/span&gt;. Their FUSION system allows developers to specify relationship &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_31"&gt;constraints&lt;/span&gt;, effectively multi-object invariants, which are implicitly time-sensitive (by which I mean that there is no explicit notion of time in their system, but that order matters, these are not static invariants which must be maintained: the developer can specify "x then y" or "x must follow y"). Checking can be sound or complete, but not both, or a pragmatic variant which is neither, but hopefully the most useful in practise.&lt;br /&gt;&lt;br /&gt;After lunch, Nick Mitchell talked about Making Sense of Large Heaps, which, I predict, will be a paper that gets a lot of references. He presented a tool, Yeti, which analyses heaps by breaking them into 'data structures' and 'sections'. The essential concepts used in the analysis are those of ownership and domination, and it is interesting to see ownership used to analyse, rather than prescribe.&lt;br /&gt;&lt;br /&gt;The last session of the day was great, starting with Implicit Dynamic Frames:... by Jan &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Smans&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;et&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;al&lt;/span&gt;. It is a nice approach to verification by specifying access permissions in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;pre&lt;/span&gt;- and post-conditions. Pure methods and 'predicates' - pure methods which abstract assertions rather than expressions - allow the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_36"&gt;language&lt;/span&gt; to support abstraction.&lt;br /&gt;&lt;br /&gt;The next talk - Fine-Grained Access Control with Object-Sensitive Roles, presented by Dan &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Marino&lt;/span&gt; - was great, using Britney Spears' medical notes as motivation. I am very surprised that nothing like this has been done before, it seems so  sensible. The idea is that rather than just using roles to do security, you &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_38"&gt;parametrise&lt;/span&gt; the roles by the ids of objects so that you get per-object, rather than per-role, security. Good idea, good execution. Also, nice use of effects and existential quantification.&lt;br /&gt;&lt;br /&gt;Last talk of the day was Practical &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;API&lt;/span&gt; Protocol Checking with Access Permissions presented by Nels &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;Beckman&lt;/span&gt;. This uses &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;typestates&lt;/span&gt; and access permissions to specify protocols which can be checked by static analysis. This paper is an evaluation of that work, and lo and behold, it works! There are some interesting points raised along the way, such as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;hasNext&lt;/span&gt; methods in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;JDBC&lt;/span&gt; not being pure (which I've come across a while ago, but can't remember where).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-2468447514267736147?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/2468447514267736147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=2468447514267736147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2468447514267736147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2468447514267736147'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/ecoop-day-3-day-1-of-main-conference.html' title='ECOOP Day 3 - Day 1 of the main conference'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6816605902256097792</id><published>2009-07-15T00:24:00.001+01:00</published><updated>2009-07-15T00:24:19.067+01:00</updated><title type='text'>ECOOP day 2: IWACO</title><content type='html'>Viktor Kuncak gave the invited talk, the theme of which is his effort to get "verified abstractions on developers' desks". This boiled down to verifying library code, the hard part of which is accounting for the different state in the library vs. the application. He talked about his tool Jahob, which apparently does the business.&lt;br /&gt;&lt;br /&gt;I chaired the first technical session of the day at IWACO, and it was the first session I've chaired at a workshop/conference, so I was a bit nervous. But all the talks were good and it went OK.&lt;br /&gt;&lt;br /&gt;The first talk was by Nels Beckman and was about using access permissions to reduce STM overhead. This was a great little talk and had a great presentation of the various kinds of access and how they relate. The relation to STM was straightforward, but looked useful and they had empirical evidence to back it up - although 9% seems not too much of an improvement. It was also interesting that their optimisations incurred more overhead in some cases.&lt;br /&gt;&lt;br /&gt;Eric Kerfoot presented the next talk, which used a very simple ownership scheme to avoid deadlock. Although the ownership aspects of this work were not that interesting (and probably not flexible enough for real life), it is good to see an application of ownership. The only problem being that the work seemed to be able to introduce more deadlocks if the wait clauses never become true.&lt;br /&gt;&lt;br /&gt;William Retert presented the last talk of the session (and my favourite paper from the workshop) which compared everything even vaguely IWACO related using fractional permissions. This is a nice thing to do and something I'm very interested in seeing. I like being able to see exactly how these different mechanisms relate to each other. Unfortunately, other than encoding them all with fractional permissions, there wasn't much effort to then explain how these permissions relate at an intuitive level. I would have liked to see how their owners-as-effectors property relates to owners-as-modifiers, it is not quite a generalisation. I think it would also be interesting to extend the permissions beyond reading/writing to referencing so that owners-as-dominators could be expressed.&lt;br /&gt;&lt;br /&gt;After lunch, Sophia presented work on flexible object invariants. The big point is that object invariants should be first class, and not just treated as syntactic sugar for pre- and post-conditions. An interesting example of invariants that can't be enforced in a tree-like structure are PIPs - Priority Inheritance Protocols, which involve cyclic structures.&lt;br /&gt;&lt;br /&gt;I gave my first talk on wildcards in OGJ which went pretty well, and people seemed to 'get', although there was a bit of an atmosphere of "this is interesting, but so what?".&lt;br /&gt;&lt;br /&gt;After the coffee break Paley spoke about combining ownership with relationships, in particular tackling the question of how relationships may be mutated with respect to their ownership properties. Finally I gave my second talk on comparing Universes and Ownership Types. Unfortunately, by this time I was mentally and physically exhausted and I was barely coherent for most of the talk and didn't handle the questions too well, which is a shame because the questions were really on point and I could have given more enlightening answers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6816605902256097792?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6816605902256097792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6816605902256097792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6816605902256097792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6816605902256097792'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/ecoop-day-2-iwaco.html' title='ECOOP day 2: IWACO'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8594610148320488299</id><published>2009-07-13T22:25:00.001+01:00</published><updated>2009-07-13T22:25:47.415+01:00</updated><title type='text'>ECOOP day 1 - FTfJP and SToP</title><content type='html'>And so to the conference; first day - the FTfJP and SToP workshops. The former good, the latter great, it really seemed a workshop in the right place at the right time.&lt;br /&gt;&lt;br /&gt;I spent the morning at FTfJP, including presenting my paper on wildcards and subtyping, which was surprisingly well received. It seemed to get people thinking and I got good questions. I was very worried that it would be a hard sell and people wouldn't see the point, but thankfully I was proved wrong.&lt;br /&gt;&lt;br /&gt;The invited talk was by Todd Millstein and was on his generic effects system. Unfortunately I was rather tired and couldn't pay much attention, but it was a good talk on an interesting topic. I highly recommend the paper which (I think) was at TLDI this year. The most interesting thing I took away from the talk was the relationship between effects and permissions, which is something I've been thinking about myself rather a lot recently.&lt;br /&gt;&lt;br /&gt;The first technical talk was A Typed Intermediate Language for Supporting Interfaces by Juan Chen. What I found interesting was the use of existential types for class types which I've also made use of. It is interesting here because she is using them for, essentially, implementation reasons in the intermediate language; specifically to give types to iTables for dispatching method calls on interface types.&lt;br /&gt;&lt;br /&gt;Next up was Range Parameterized Types: Use-site Variance without the Existential Questions by Bruno De Fraine which proposes a simpler version of Java wildcards. The system is less complex, but this should not be surprising as it is less complex. In particular there seems no difference from existential types which cannot be unpacked over a scope (i.e., wildcards capture). Although the formalism is direct, it is significantly more complicated (and less elegant) than an existential types system.&lt;br /&gt;&lt;br /&gt;Reuben Rowe then presented Semantic Predicate Types for Class-based Object Oriented Programming. This proposed adapting and generalising intersection types to the OO world as predicates and presented an approximation theorem which, I'm afraid, went slightly over my head. I will be reading the paper though...&lt;br /&gt;&lt;br /&gt;After lunch I switched workshop and Attended SToP which was a proper workshop (as opposed to a mini-conference) and had a lot of discussion; it was, therefore, running an hour behind schedule. Which meant that I could catch the second half of Phil Wadler's talk. This reminded me how good a speaker he was and also how cool the blame thing is. On the downside, the talk was very similar to the one I saw at ESOP a few months ago. It included the same division of subtyping into four variations and higher order casts, but added polymorphism. This turns out to be surprisingly difficult - it interacts badly with some of the subtyping.&lt;br /&gt;&lt;br /&gt;Next was a talk on Diamondback Ruby which I remember being interesting, but my notes of the talk are terrible.&lt;br /&gt;&lt;br /&gt;The next talk (I'm on the plane now and so can't look up the titles/authors, sorry) was about typing in scheme and had the interesting conclusion that type checking extended with gradual typing improved expressivity, even when no dynamic typing was used!&lt;br /&gt;&lt;br /&gt;Next up: Atsushi Igarashi's student with progress towards gradual typing in FGJ. Mathias didn't seem to think that this was gradual typing at all. They used a type dynamic, denoted with a question mark, but which didn't correspond (with generics) to wildcards. This seemed unnecessarily confusing.&lt;br /&gt;&lt;br /&gt;The final talk (presented by Gregor and his crazy hat) analysed Javascript programs in order to find out how many (and which) dynamic features were used. The conclusion seemed to be quite a lot in real life, but in quite fixed patterns. Also that Sunspider is not a realistic set of benchmarks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8594610148320488299?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8594610148320488299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8594610148320488299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8594610148320488299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8594610148320488299'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/ecoop-day-1-ftfjp-and-stop.html' title='ECOOP day 1 - FTfJP and SToP'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8956878760961599073</id><published>2009-07-10T09:12:00.002+01:00</published><updated>2009-07-10T09:24:21.365+01:00</updated><title type='text'>Banquet Speech</title><content type='html'>Last night was the conference banquet and William Cook gave the speech and it was good. I thought I would blog about it now, while it's fresh in my mind, even though this post will be out of order.&lt;br /&gt;&lt;br /&gt;The speech involved William doing a strip tease from industry suit to academic shorts and t-shirt; luckily he stopped there (but kudos to SPJ - "we want more!").&lt;br /&gt;&lt;br /&gt;The theme of the talk was industry and academia and also a bit of motivation for academics. There were many interesting points raised, including: industry are not as slow/conservative as we think; industry have lots of ideas - problems and solutions; industry need complete, not partial, solutions; and many more.&lt;br /&gt;&lt;br /&gt;One point I thought was intersting was about the WWW: William wondered why it was an industrial, not academic invention, and suggested this was a shortcoming of academia: apparently, the fundamentals were done in academia, but putting it all together was not "publishable" and so was never tackled. I think that this is a perfect synergy between academia and industry. Academia tackled the fundamental problems, which it was it does best - small, difficult, abstract, and, presumably, not commericially viable problems., and insustry used the academic research to produce a 'product' - something academia couldn't do easily because it requires a lot of work, and shouldn't do, because it involves work that is alredy well-understood.&lt;br /&gt;&lt;br /&gt;The other thing that made me think from William's talk was his idea that one should have a "purpose" in research or anything else. I tend to have short term goals, but realise that I have no longer term purpose in my research. I thimk, this has been something I've been looking for, subconciously, but haven't yet found. And he is right, that nearly all academics who I look up to, have obvious purposes in their work (although often more than one, it seems). So the search is on!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8956878760961599073?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8956878760961599073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8956878760961599073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8956878760961599073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8956878760961599073'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/banquet-speech.html' title='Banquet Speech'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3716705591657110086</id><published>2009-07-08T21:51:00.003+01:00</published><updated>2009-07-08T22:06:09.097+01:00</updated><title type='text'>Ecoop '09</title><content type='html'>Ah, ECOOP is here again. This year, the world's sweatiest conference on object-oriented programming is being held in Genova, Italy. It's a lovely city full of very old and expensive-looking buildings, mostly old palaces - I am amazed that there could be so many palaces in one city! The conference is being held in one such palace and it is an awe-inspiring place for a conference - the conference room would suit the Queen better than a bunch of shabby academics. The food is also much better than normal - even the coffee is drinkable. On the downside, there is no aircon, so it is very hot and sweaty, there are not enough power points, the wifi has issues, and there are three toilets to be shared amongst 200 or so delegates - not good. It is also expensive, but hey.&lt;br /&gt;&lt;br /&gt;I arrived on friday and headed to the aquarium, which was amazing. Dolphins, sharks, turtles, penguins, seals, and many, many fish - it was great to hang out with underwater stuff again. Also hummingbirds which were so cool, buzzing around and hovering and twisting around in the air, one of the nicest things I've seen really.&lt;br /&gt;&lt;br /&gt;I then met up with Dave Clarke and the Swedes (although Dave is really swedish, it just doesn't say that in his passport), it was great to catch up with everyone, just a shame Nik and Maria weren't sticking around for the conference.&lt;br /&gt;&lt;br /&gt;So, in the next few posts I'll go over some of the talks that I enjoyed. But first some general impressions: much less language design stuff - there are barely any formal systems in the proceedings and those are not really proposing new features. SToP (Scripts To Programs) was the most popular workshop, and gradual/hybrid typing seems to be very much in fashion right now. Ownership seems to be losing peoples' interest - which makes me sad, but I guess there has been a lot of work in the area. In fact I would say people are looking beyond static type systems in general a lot more (although there is still lots of interest in verification). Effects seems to be everywhere though, or at least effect-like things, which made me think of effects.  A lot of empirical studies of one kind or another are around. Dynamic languages (not just dynamic typing) seem to be popular, and reflection in particular is getting talked about (although I haven't seen any papers). Much fewer industry poeple, although I guess that is to be expected with the economy, and ECOOP hasn't had a strong industry presence for a while. More people have multiple papers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3716705591657110086?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3716705591657110086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3716705591657110086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3716705591657110086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3716705591657110086'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/07/ecoop-09.html' title='Ecoop &apos;09'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6237566843347709509</id><published>2009-06-21T23:32:00.001+01:00</published><updated>2009-06-21T23:33:58.622+01:00</updated><title type='text'>Corrections</title><content type='html'>I've edited the post before last ("an opinion on...") because the blogger editor did funny things to angle brackets (turning them into invisible html elements) which made all the types look stupid. Serves me right for only proofreading in the editor, not the blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6237566843347709509?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6237566843347709509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6237566843347709509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6237566843347709509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6237566843347709509'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/06/corrections.html' title='Corrections'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8978544057319162314</id><published>2009-06-13T00:28:00.001+01:00</published><updated>2009-06-13T00:30:05.102+01:00</updated><title type='text'>Papers online</title><content type='html'>I've put the papers I mentioned a few posts back online, they are all at ECOOP workshops. You can find them &lt;a href="http://www.doc.ic.ac.uk/%7Encameron/papers/index.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8978544057319162314?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8978544057319162314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8978544057319162314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8978544057319162314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8978544057319162314'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/06/papers-online.html' title='Papers online'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-4988162202033897149</id><published>2009-06-08T22:46:00.003+01:00</published><updated>2009-06-21T23:31:15.605+01:00</updated><title type='text'>An Opinion on Ownership Types (generics)</title><content type='html'>I've been thinking a bit about ownership and generics and I have formed an opinion that I wish to share. I imagine that some people will disagree, but that could be interesting.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ownership and generics are both desirable in a language: (to paraphrase the OGJ paper) generics let you say I have a list of books (rather than just a list) and ownership types let you say this is my book (rather than just a book). It is also desirable to have both, that is, to say this is a list of my books; and both are needed - there is no overlap in expressivity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are basically two ways to combine generics and ownership: &lt;i&gt;orthogonally&lt;/i&gt;, where both are present and fulfil their standard tasks without much overlap, and the &lt;i&gt;mixed&lt;/i&gt; approach, where type parameters provide the ownership information. (My terminology, and I don't think it is very good terminology at that). Jo\exists, generic universes, and generic confinement fall into the first camp, OGJ, OIGJ, WOGJ, etc. fall into the second.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Example in the orthogonal style:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;List&amp;lt;owner,X&amp;gt; {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;List&amp;lt;owner,X&amp;gt; next;&lt;br /&gt;&lt;/owner,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;X datum;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Example in the mixed style:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;List&amp;lt;Owner,X&amp;gt; {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;List&amp;lt;Owner,X&amp;gt; next;&lt;br /&gt;&lt;/owner,&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;X datum;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, not much difference in this example, but the subtle difference is an important one: the first example has two kinds of parameter (context parameters and type parameters) and the second example only has type parameters - the type rules are tweaked slightly to enforce ownership.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My opinion is twofold: first that adding generics adds expressive power to an ownership language and second that the orthogonal way, &lt;i&gt;with an adjustment&lt;/i&gt;, is the better way to do things, and furthermore, in this case you don't need context parameters at all (other than the owner).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So first off, the 'generics are good' bit: a non-generic list only lets you express the owner of the list and the owner of objects in the list. A generic list lets you express these things and other contexts relevant to objects in the list; for example, List&amp;lt;world,Button&amp;lt;&amp;gt;this,win&amp;gt;, I'm imagining a list of buttons where the buttons have fields owned by the window they're placed in. Without generics the best I could do is List&amp;lt;world,this&amp;gt;, I have to forget about the window the buttons are in (as well as the fact that they are buttons, obviously).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Second, the adjustment, in regular ownership types the owner and other context parameters are usually grouped together. However, if you look at the type rules they are often treated differently, or the owner is treated as a special case. This is made explicit in Joe_3 and some other calculi by putting the owner before the type and separating it from the other context parameters: eg, world:List&amp;lt;this&amp;gt; for a list owned by world containing objects owned by this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My opinion is that the owner context should be treated differently to the other context parameters and should not be a type parameter. This is because I think that although the behaviour is similar (almost the same as) a context or type parameter it does something extra and different and that it is confusing to confuse the two concepts. This means that type parameters in my ideal system are all just type parameters, there is no special This or World types with special meaning.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now what is nice is that with generics you no longer need context parameters: you can trivially replace any context parameter with a type parameter and the actual context parameter a, with the actual type parameter a:Object. However, I believe you don't really need to do even this, because any extra context parameters should be in some way tied to a type parameter, so there is a natural way to include the type parameters.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Technical note: when we consider bounds we have to think about context parameters again. For example, in List&amp;lt;X&amp;gt;, what is the upper bound on X? Well in Java it would be Object, but we need an owner, so we could follow OGJ and assume the owner is implicitly present, ie, the upper bound is x:Object where x is an implicitly declared, fresh formal context. Or we could use existential types, ie, the upper bound is \exists x.(x:Object), or in wildcard syntax, ?:Object.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just looking at the existential types syntax there makes me wonder if it should be (\exists x.x):Object or \exists x.(x:Object), and if there is any difference, and even what the precise meaning of the former is (which are kind of left over questions from the Jo\exists paper that I should think about answering).&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-4988162202033897149?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/4988162202033897149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=4988162202033897149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4988162202033897149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4988162202033897149'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/06/opinion-on-ownership-types-generics.html' title='An Opinion on Ownership Types (generics)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-126301006890731560</id><published>2009-05-31T22:39:00.002+01:00</published><updated>2009-05-31T22:46:06.434+01:00</updated><title type='text'>Visit to LA</title><content type='html'>On the way back from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ETAPS&lt;/span&gt; in the UK I stopped off in LA to visit Todd &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Millstein&lt;/span&gt; and some friends. Visiting UCLA was great fun and very interesting. I delivered a slightly rambling and jet-lagged talk about ownership, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;existential types&lt;/span&gt;, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;wildcards&lt;/span&gt; and had some interesting discussions with Todd and his PhD students. They are doing some really interesting things on permissions, effects, and more; look out for their upcoming papers.&lt;br /&gt;&lt;br /&gt;I also paid a visit to the Museum of Jurassic Technology. This is a museum in the old school sense - meant to entertain as much as educate. It is part living art, part museum, part collection of curios. It is probably the most fun I've had in a museum and many of the exhibits were genuinely beautiful and/or fascinating. If you ever have the misfortune of passing through LA, then I highly recommend a visit, it will improve your time in LA by an order of magnitude&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-126301006890731560?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/126301006890731560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=126301006890731560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/126301006890731560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/126301006890731560'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/05/visit-to-la.html' title='Visit to LA'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-712129685412576028</id><published>2009-05-15T12:11:00.002+01:00</published><updated>2009-05-15T12:14:09.850+01:00</updated><title type='text'>Some light relief</title><content type='html'>&lt;a href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html"&gt;A brief, incomplete, and mostly wrong history of programming languages&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The funniest thing written about programming languages since James Noble's ECOOP '08 speech. Thanks to Alex Summers for the link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-712129685412576028?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/712129685412576028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=712129685412576028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/712129685412576028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/712129685412576028'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/05/some-light-relief.html' title='Some light relief'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5028386451299575995</id><published>2009-05-15T11:36:00.003+01:00</published><updated>2009-05-15T11:43:17.803+01:00</updated><title type='text'>PL-Group at VUW</title><content type='html'>I am in the process of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;resurrecting&lt;/span&gt; PL-Group meetings at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;VUW&lt;/span&gt;. This should be a regular meeting to discuss all kinds of programming language research, both our own and other peoples in the form of papers; kind of like a reading group, but with the aim of fostering more communication and collaboration between people doing PL research at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;VUW&lt;/span&gt;. I have taken over a mailing list to coordinate the whole affair, and hopefully it will feature lots of interesting discussions about PL research. If anyone is interested, I invite you to join the mailing list (even if you're unlikely ever to visit NZ for a meeting) and contribute your thoughts and comments on anything interesting which arises.&lt;br /&gt;&lt;br /&gt;To join go to &lt;a class="moz-txt-link-freetext" href="http://ecs.victoria.ac.nz/mailman/listinfo.cgi/pl-group"&gt;http://ecs.victoria.ac.nz/mailman/listinfo.cgi/pl-group&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5028386451299575995?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5028386451299575995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5028386451299575995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5028386451299575995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5028386451299575995'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/05/pl-group-at-vuw.html' title='PL-Group at VUW'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8323311591005071261</id><published>2009-05-12T03:32:00.005+01:00</published><updated>2009-06-21T21:28:03.260+01:00</updated><title type='text'>ETAPS report (finally)</title><content type='html'>I've been putting this off for ages and I've finally lost motivation to write a new report. Instead I will reprint the report I produced as part of my funding requirements. Sorry it's not as good as some of the other conference reports. Lesson learned: write the blog as you go, don't leave it until later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The YOGI Project: Software Property Checking via Static Analysis and Testing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This project sought to combine static analysis with testing to verify programs written in C. The main application has been to verify drivers; at which it has, apparently, been successful. The system is of course undecidable --- it is possible that their algorithm does not terminate. If the algorithm does terminate, then it either finds an error in the code or produces a proof that the program satisfies its specification.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Well-Typed Programs can't be Blamed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This paper (presented brilliantly by Phil Wadler) is another step towards combining dynamic and static typing. The main contribution is that defiing the `can't be blamed' property: ``in a program with both dynamic and statically typed parts, if a type error occurs, then it must be the fault of the dynamically typed part''. This is essentially a formulation of type soundness for hybrid/gradually typed systems.&lt;br /&gt;&lt;br /&gt;I found the four variations of subtyping, and how these relate with co- and contravariance, very interesting.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exploring the Design Space of Higher-order Casts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Similar to the previous talk , this work addresses the problem of type safety in hybrid/gradually typed systems. The contribution here is the use of higher-order casts, that is, casts over function types (which cannot be statically checked). By labelling each cast (with blame labels) and propagating these labels during execution, the source of runtime errors can be accurately reported.&lt;br /&gt;&lt;br /&gt;The system is formalised using a calculus with coercions to model casts; coercions are normalised, and blame labels propagated through normalisation. Several approaches for assigning blame are presented.&lt;br /&gt;&lt;br /&gt;I particularly like this work as inaccurate error messages are a very real problem when programming, and this paper presents a solution to some of these problems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Is Structural Subtyping Useful? An Empirical Study&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This work presents an empirical study of Java programs and shows that certain benefits of structural subtyping may be beneficial in a Java-like language. The motivation is that dynamic languages with structural typing are growing in popularity, and so it is sensible to ask if elements of these systems could be useful in more static languages.&lt;br /&gt;&lt;br /&gt;The study was undertaken by inferring structural types in the programs and checking when the nominal types were too precise in comparison to the (minimal) structural types. These results were further broken down into cases where there is no possible nominal supertype and where there is; the implication being that in the former case, structural types would be of benefit.&lt;br /&gt;&lt;br /&gt;The study found that most types were over-specified (which is unsurprising --- one wouldn't expect all fields and methods of a class to be used in every method), but furthermore that suitable nominal types did not usually exist, that the required structural types were usually small, and that these structural types were not used often --- which implies that they are not worth making into named interfaces.&lt;br /&gt;&lt;br /&gt;My criticism of the work is that just because some of the benefits of structural types are beneficial does not mean that structural types are the best solution, and this aspect is not addressed in the paper. That said, the analysis itself is important and, without the link to motivating structural types, ranks as one of the most interesting papers in the conference.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;An Interval-based Inference of Variant Parametric Types&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This talk presented an interesting and useful way to infer inference annotations. However, the talk was let down by some misunderstandings of variant parametric types and Java wildcards, for example, assuming they have the same semantics, which is wrong. It was also unclear what role annotations on receivers played in the inference algorithm, versus being present in the source language.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Financial Crisis, a Lack of Contract Specification Tools: What can Finance Learn from Programming Language Design&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This was an interesting, mostly non-technical, invited talk which described a mechanism for sepcifying financial contracts using types. The author spoke about some details of their system and his business which runs it. The motivation is that financial trades are not well-understood, in particular, the contracts which specify them are informal and imprecise. The solution is essentially modelling trades like a programming language entity.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Global Principal Typing in Partially Commutative Asynchronous Sessions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The contribution of this work is a session based type system for the Pi Calculus and some interesting meta-theoretic results. Subtyping is sound and complete, and inference is shown to find a principal typing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Automatic Parallelisation with Separation Logic&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This work uses separation logic to perform an independence analysis of expressions. A trace semantics with sophisticated labelling  facilitates this. The result is an analysis of a program's footprint which can be used to parallelise expressions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Deny-Guarantee Reasoning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This work extends rely-guarantee reasoning to handle fork/join concurrency. The crucial concept is interference: some action which affects the state of the program; rely-guarantee creates interferences, but interference must be constant to support forking. Deny-guarantee uses separation logic techniques to split interference, this is used to ensure consistency of interference across forked threads. This technique is similar to fractional permissions. Another crucial concept is the thread predicate, which is a predicate in separation logic which gives a postcondition when and if a thread is joined.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Basis for Verifying Multi-threaded Programs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Based on fractional permissions, this idea supports complex concurrency primitives (including fork/join, as in the previous talk). Permissions are extended with more complex operations, such as sharing and unsharing. Complex specifications can be written and verified by the system, which also prevents deadlock.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8323311591005071261?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8323311591005071261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8323311591005071261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8323311591005071261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8323311591005071261'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/05/etaps-report-finally.html' title='ETAPS report (finally)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6104398644762412499</id><published>2009-05-09T22:32:00.002+01:00</published><updated>2009-05-09T22:47:41.420+01:00</updated><title type='text'>Papers, papers, ...</title><content type='html'>I have had a few papers accepted to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ECOOP&lt;/span&gt; workshops recently, they will be up on my website (which I know needs updating) in a week or so, once I have made the suggested changes. The papers are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;OGJ&lt;/span&gt; Gone Wild&lt;/span&gt; with James Noble at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;IWACO&lt;/span&gt; '09, we use &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;wildcards&lt;/span&gt; to mimic the magic 'This' owner in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;OGJ&lt;/span&gt;, thus using only the Java type system (and a couple of coding patterns) to support parametric ownership types.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Comparing Universes and Existential Ownership Types&lt;/span&gt; with Werner &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Dietl&lt;/span&gt; at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;IWACO&lt;/span&gt; '09, we show that Universes and a restriction of Jo\exists are equivalent, and thus that the two systems reflect the same underlying hierarchy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;On &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Subtyping&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Wildcards&lt;/span&gt;, and Existential Types&lt;/span&gt; with Sophia &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Drossopoulou&lt;/span&gt; at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;FTfJP&lt;/span&gt; '09, we use existential types to model both &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;subclassing&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;wildcards&lt;/span&gt;, and show that the two mechanisms can be modelled in a unified way, and that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;wildcards&lt;/span&gt; are a natural mechanism for expressing subtype variance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6104398644762412499?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6104398644762412499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6104398644762412499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6104398644762412499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6104398644762412499'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/05/papers-papers.html' title='Papers, papers, ...'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7207969293135480456</id><published>2009-05-01T01:20:00.002+01:00</published><updated>2009-05-01T01:24:09.218+01:00</updated><title type='text'>Things I like in a programming language</title><content type='html'>I posted a while back about things I dislike in programming languages, and it was a fairly long list, so in order to appear balanced and not too biased, here is a list of things I like in programming languages (perhaps not all at the same time):&lt;br /&gt;&lt;br /&gt;Objects&lt;br /&gt;Classes&lt;br /&gt;Multiple inheritance with traits/mixins&lt;br /&gt;Virtual Classes&lt;br /&gt;Virtual Classes some more (with Tribe typing)&lt;br /&gt;Static types&lt;br /&gt;Dynamic typing&lt;br /&gt;Higher order functions/closures&lt;br /&gt;Readable syntax&lt;br /&gt;Good error messages&lt;br /&gt;Loads of other stuff that I can't think about right now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7207969293135480456?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7207969293135480456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7207969293135480456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7207969293135480456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7207969293135480456'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/05/things-i-like-in-programming-language.html' title='Things I like in a programming language'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7871989892450251555</id><published>2009-04-29T00:30:00.003+01:00</published><updated>2009-05-01T01:19:36.372+01:00</updated><title type='text'>Climbing the Coq learning wall</title><content type='html'>So I am currently trying to learn &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Coq&lt;/span&gt;, this is a monstrous and Herculean task. It is one of those things where the learning curve is so steep as to deserve a climbing grade (I reckon about v6 for the intersection of the bouldering and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;PLT&lt;/span&gt; communities).&lt;br /&gt;&lt;br /&gt;I have the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Coq&lt;/span&gt; art book winging its way to me, but due to my remote location at the end of the earth (from the perspective of shipping companies, to everyone else I am in the capital of a developed country a days flight from &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Europe&lt;/span&gt;), it hasn't arrive nearly a month after ordering.&lt;br /&gt;&lt;br /&gt;But, I Benjamin Pierce teaches a course on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Coq&lt;/span&gt; and has made the lecture notes (which are all &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Coq&lt;/span&gt; scripts) available online (link is to 07's &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;course&lt;/span&gt; schedule which has the whole course, as opposed to the current one):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.seas.upenn.edu/%7Ecis500/cis500-f07/schedule.html"&gt;&lt;/a&gt;&lt;a href="http://www.seas.upenn.edu/%7Ecis500/cis500-s09/index.html"&gt;http://www.seas.upenn.edu/~cis500/cis500-s09/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is an excellent tutorial for learning &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Coq&lt;/span&gt; from a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;PLT&lt;/span&gt; perspective and I highly &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;recommend&lt;/span&gt; it - more so than any of the other &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Coq&lt;/span&gt; resources I've found online.&lt;br /&gt;&lt;br /&gt;So, although tough, learning &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Coq&lt;/span&gt; is actually fun, and I hope will be useful. At the moment doing full proofs for a full calculus seems too daunting, but I can see that it is not as bad as some people make out, and hopefully once I have the hang of things will not be too hard. Also seems like a very interesting place to do research - there are so many things crying out to be studied.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7871989892450251555?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7871989892450251555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7871989892450251555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7871989892450251555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7871989892450251555'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/04/climbing-coq-learning-wall.html' title='Climbing the Coq learning wall'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7387964635783056180</id><published>2009-04-10T09:47:00.002+01:00</published><updated>2009-04-10T09:50:04.529+01:00</updated><title type='text'>Busy, busy</title><content type='html'>Sorry for no ETAPS report thus far. It will be coming soon. I have been very busy, jetting around, having very interesting discussions in London and LA and writing papers for ECOOP workshops. I visited Todd Millstein et al at UCLA and I blog a little about that too, all after easter.&lt;br /&gt;&lt;br /&gt;For now I am back in NZ and going to visit Taupo tomorrow morning....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7387964635783056180?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7387964635783056180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7387964635783056180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7387964635783056180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7387964635783056180'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/04/busy-busy.html' title='Busy, busy'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3894333672502701483</id><published>2009-03-27T10:06:00.002Z</published><updated>2009-03-27T10:12:44.235Z</updated><title type='text'>ETAPS 09</title><content type='html'>So, I've now moved to New Zealand, and in time there will be a post about all that, but right now I am back in the UK, in fact back in York, my childhood home - weirdly this is the longest I've spent in York for about 8 years and I'll have circumnavigated the globe to do it.&lt;br /&gt;&lt;br /&gt;Anyway, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ETAPS&lt;/span&gt; is at York university, which is very pretty - lots of grass and a lake and some ugly old buildings. It also, apparently, has the highest duck to student ratio in the UK. The downside of the venue is that most of us are staying in student halls, which although cheap(-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ish&lt;/span&gt;) are not particularly luxurious. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Pokey&lt;/span&gt; is a word that comes to mind - I at first mistook the bathroom for a cupboard. They also have a temporal-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;tardis&lt;/span&gt;-like effect - they appear older on the inside than on the outside!&lt;br /&gt;&lt;br /&gt;Anyway, the first two days had interesting sounding talks, but were well outside my area of knowledge and so I gained little. Once &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ESOP&lt;/span&gt; started, however, there were many interesting talks and I will describe these in the following blog posts (over a few days).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3894333672502701483?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3894333672502701483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3894333672502701483' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3894333672502701483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3894333672502701483'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/03/etaps-09.html' title='ETAPS 09'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-4075076558965204128</id><published>2009-01-25T13:59:00.002Z</published><updated>2009-01-25T14:02:38.040Z</updated><title type='text'>ESOP paper</title><content type='html'>As I noted below (I think), my supervisor (Sophia) and I have had a paper accepted to ESOP 09 which is in march in York, England. The title is existential quantification for ownership variance and it can be downloaded &lt;a href="http://www.doc.ic.ac.uk/%7Encameron/papers/cameron_esop09.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm moving to NZ tomorrow and looking forward to starting some proper research, as opposed to continuously correcting my thesis. Although not looking forward to the 27.5 hr flight so much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-4075076558965204128?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/4075076558965204128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=4075076558965204128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4075076558965204128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4075076558965204128'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/01/esop-paper.html' title='ESOP paper'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-1000517665217140840</id><published>2009-01-04T22:09:00.002Z</published><updated>2009-01-04T22:13:40.542Z</updated><title type='text'>Busy, busy,...</title><content type='html'>A quick update: on the academic front I have submitted my thesis and passed the viva with minor corrections, which I am working on now. Sophia and I have a paper accepted at ESOP 09 (link coming soon) on existential ownership for variance. Other than that I've been trying to learn Coq, which turns out to be very difficult. On the personal side, I got married and have been busy saying bye-bye to relatives and friends before we head off to NZ; talking of which, I got my visa yesterday, so now all I need to do is finish my thesis corrections and pack.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-1000517665217140840?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/1000517665217140840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=1000517665217140840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1000517665217140840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/1000517665217140840'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2009/01/busy-busy.html' title='Busy, busy,...'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3199115064642657968</id><published>2008-10-23T17:29:00.002+01:00</published><updated>2008-10-23T17:35:19.226+01:00</updated><title type='text'>Things I don't like</title><content type='html'>Specifically, things I don't like in programming languages. When I design the world's perfect programming language, none of these things will be in it. I'm not going to justify any of these things, I am after all meant to be finishing my thesis.&lt;br /&gt;&lt;br /&gt;arrays&lt;br /&gt;overloading&lt;br /&gt;pointers&lt;br /&gt;inner classes&lt;br /&gt;primitive types&lt;br /&gt;raw types&lt;br /&gt;private/protected/public annotations&lt;br /&gt;Java-style reflection&lt;br /&gt;non-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;reified&lt;/span&gt; generics&lt;br /&gt;almost everything to do with concurrency&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;wildcards&lt;/span&gt; (the syntax, the underlying idea is nice)&lt;br /&gt;packages&lt;br /&gt;non-virtual inheritance&lt;br /&gt;friend &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;functions&lt;/span&gt;&lt;br /&gt;\* *\ comments (rather then \\)&lt;br /&gt;&lt;br /&gt;These are mainly &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;OO&lt;/span&gt;/Java-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ish&lt;/span&gt; things, I'm sure I could think of as many from other paradigms, but I'm a bit &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;OO&lt;/span&gt; focused at the minute.&lt;br /&gt;&lt;br /&gt;Some we just have to put up with because there is no neat, all round solution (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;eg&lt;/span&gt; primitive types). Others are not as good as they could be (reflection, concurrency support), and others just shouldn't exist (statics, arrays, most of the rest)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3199115064642657968?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3199115064642657968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3199115064642657968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3199115064642657968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3199115064642657968'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/10/things-i-dont-like.html' title='Things I don&apos;t like'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-2989047550352276079</id><published>2008-10-15T19:47:00.002+01:00</published><updated>2008-10-15T19:49:34.132+01:00</updated><title type='text'>Feynman Quote</title><content type='html'>&lt;b&gt;"Physics is like sex. Sure, it may give some practical results, but that's not why we do it."&lt;br /&gt;&lt;br /&gt;Substitute "PLT" for "physics"...&lt;br /&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-2989047550352276079?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/2989047550352276079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=2989047550352276079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2989047550352276079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2989047550352276079'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/10/feynman-quote.html' title='Feynman Quote'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-4133549417499713738</id><published>2008-10-15T14:39:00.002+01:00</published><updated>2008-10-15T14:50:46.148+01:00</updated><title type='text'>Fun</title><content type='html'>Surprisingly, this is not going to be a post about functional programming, nor about the existential types calculus, Fun; but, about fun, as in "having fun" or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;something&lt;/span&gt; being fun to do. More specifically, programming.&lt;br /&gt;&lt;br /&gt;OK, most people who know me will know that I hate programming. Well, that's not really true, I love programming, but I hate all the crap that goes with it. Writing neat, elegant code to achieve some task and see it work is more fun than most (but not all) things I can think of. However, testing, debugging, writing documentation, writing boiler plate code, maintaining code, all of these are about as much fun as a kick in the nuts.&lt;br /&gt;&lt;br /&gt;I believe the fun aspect of programming is important, it motivates lots of people to write open source and free software and to code in their spare time "just for fun"! It pretty much explains why anyone would work in the games industry. Even in well paid development jobs, I think that tasks that are fun to do are given priority, done with more enthusiasm and concentration, and, therefore, done faster and with less mistakes.&lt;br /&gt;&lt;br /&gt;So here's an idea for language design, how about making a language that maximises the fun in using it? It would maximise the time spent on fun things and try and make the not-fun things more fun, rather than more &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;efficent&lt;/span&gt; or more safe or whatever other software-engineering-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ey&lt;/span&gt; things are considered important nowadays.&lt;br /&gt;&lt;br /&gt;Of course, you would need to find out precisely what was fun and why and how to put these ideas into a programming language, but maybe that will be fun to do itself.&lt;br /&gt;&lt;br /&gt;How's that for a research project that will never get funded and will never happen?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-4133549417499713738?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/4133549417499713738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=4133549417499713738' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4133549417499713738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4133549417499713738'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/10/fun.html' title='Fun'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-758456586778122516</id><published>2008-08-17T19:31:00.001+01:00</published><updated>2008-08-17T19:31:42.121+01:00</updated><title type='text'>Papers</title><content type='html'>I'm currently writing the background chapter of my thesis, and this involves a lot of re-reading of papers. Several times now I've thought "if only I had read this two years ago! This would have been so helpful, I could have avoid so many mistakes!" Of course, I had read the papers two years ago, and I thought at the time that I understood them (in the same way that I think I understand them (better) now). So, maybe, I should have put a lot more effort into properly understanding these papers when I first read them? Well, yes, I probably should, it would have saved me a lot of pain and effort. But, I can't help thinking that maybe I had to do all the work and suffer all the mistakes before I really could understand them. I like to think so, because then I don't feel so bad about wasting months on bad ideas that I could have avoided by spending a few days more on a paper.&lt;br /&gt;&lt;br /&gt;p.s. I would particularly like to single out the two variations on the variant parametric types paper by Atsushi Igarashi and Mirko Viroli. It seems to be the paper that keeps on giving; I've read it at least five times now, each time in some detail, and yet everytime I seem to get more out of it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-758456586778122516?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/758456586778122516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=758456586778122516' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/758456586778122516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/758456586778122516'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/08/papers.html' title='Papers'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-839318948727080951</id><published>2008-08-05T12:04:00.001+01:00</published><updated>2008-08-05T12:04:33.013+01:00</updated><title type='text'>Egypt</title><content type='html'>Currently I am in Egypt, to be precise I am in Dahab in the south Sinai. My mission is to write my thesis. I figured that it is a lot cheaper than London and there are a lot less distractions. So far I am doing quite well, I have written more than I think I would in London even though I have been busy moving into an apartment and settling in etc. Now I am ready to accelerate to never before seen levels of productivity! This is kind of dependent on the air con in my apartment getting fixed because otherwise it is too hot too sleep and far too hot to think, but, insha'allah, it should be fixed today.&lt;br /&gt;&lt;br /&gt;My other reason for being here is that it is the freediving capital of the world. There is lovely warm, clear, and, most importantly, deep water 3 minutes from my apartment, loads of people to freedive with (most of whom are very good) and some great people to take some coaching from. I am pretty much on my pb from last year (41m) and it feels easy. I am taking it slowly, doing lots of dives to about 40m, and have some technique to learn, but I hope to be hitting 50m and more soon. So these are my goals for the summer - one complete thesis and 50m+. My schedule is pretty much work in the mornings, noon, and evenings and freedive in the afternoon. No late nights, no alcohol, no noxious London pollution; by the end of September I should either feel more healthy and alive than I have done in years, or a complete physical and mental wreck, we'll see...&lt;br /&gt;&lt;br /&gt;Update, well I seem to be edging toward the physical wreck end of the spectrum, had a bit of boo-boo freediving and was spitting a little blood afterwards. Apparently not too much to worry about, but need a few days rest and to take it easy for a week. That will teach me for being so optimistic! On the bright side it means I have even more time to write my thesis, so I am plowing ahead with the background chapter!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-839318948727080951?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/839318948727080951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=839318948727080951' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/839318948727080951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/839318948727080951'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/08/egypt.html' title='Egypt'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-4114655858959928800</id><published>2008-08-02T08:02:00.000+01:00</published><updated>2008-08-02T08:03:04.990+01:00</updated><title type='text'>PostDoc in NZ</title><content type='html'>Slightly belated news, but I wanted to blog the other things before I forgot them all. From 2009 I will be working for James Noble in New Zealand. We wrote a grant proposal (with more than a little help from Sophia - thanks!) to study existential types for ownership types and other mechanisms for making ownership types more flexible. Our proposal was accepted (yay!) and so I'll be starting work in NZ just as soon as I finish my thesis and get married. This is obviously very exciting and I'm really looking forward to moving to NZ and to working with James. We already seem to have too many ideas for two years and I still have a bunch of things to do with wildcards, so hopefully I won't be stuck for something to do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-4114655858959928800?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/4114655858959928800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=4114655858959928800' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4114655858959928800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4114655858959928800'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/08/postdoc-in-nz.html' title='PostDoc in NZ'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8480533233563633770</id><published>2008-08-01T07:52:00.000+01:00</published><updated>2008-08-01T07:53:14.382+01:00</updated><title type='text'>A visit to an Najah University, Nablus.</title><content type='html'>After leaving Cyprus I went to Israel, to visit a couple of friends and to do a few days sightseeing in the West Bank. After a couple of days in Jerusalem and Bethlehem, I headed north to visit a friend; he lives on a Kibbutz in a little corner of Israel squeezed between Lebanon and the Golan Heights. It was very beautiful there and as he had to work during the days I got some work done too - thesis writing and some proofs, occasionally interrupted to cool off by swimming in the beautiful, and freezing cold, river Dan.&lt;br /&gt;&lt;br /&gt;After a few days of this it was back to Jerusalem and straight on to Nablus, where, on the bus I met some very nice Palestinian guys, one of whom put me up for the night in Nablus. All of his house mates were students at the university, so I was taken along to a few lectures the next morning.&lt;br /&gt;&lt;br /&gt;An Najah university is the largest Palestinian university and has 16,500 students in 3 campuses around Nablus. The campus I visited was very modern and the buildings were much nicer than, for example, Imperial College. Furthermore, as it is quite high on a mountain overlooking Nablus, it has probably the best views of any university I've ever visited. The facilities do not seem too bad either, plenty of computers, etc. Nicest of all it seems very relaxed, other than the slightly over-keen security at the gates, there is none of the background tension that permeates most Palestinian towns. Also, if you have travelled in Palestine, you may wonder where all the young women are, the answer seems to be that they are all at university, there seemed to be (and apparently this is the case) far more female than male students, especially in engineering and science, apparently - which makes a bit of a change from Imperial!&lt;br /&gt;&lt;br /&gt;Mostly the place reminded me of any other university, lectures seemed pretty much like lectures anywhere else. There were a few differences: students talk a lot more in lectures than you'd get in England, the classes were a bit smaller, some lectures were in Arabic (although its amazing how much of an Arabic statistics lecture you can understand!), and there are probably more martyrs posters than you'd find in an English university.&lt;br /&gt;&lt;br /&gt;I sat in on an English lecture and listened to a very nervous girl speak about colours. And was then press ganged into talking in English and probably confused everyone a great deal. Most students seemed more interested in chatting about why I was there and which football team I supported than anything about English, but I guess it is all practice.&lt;br /&gt;&lt;br /&gt;After a late breakfast I knocked on the door of the head of Information Technology to try and find out a little about computer science in Nablus. He was a very nice guy and we were joined by a couple of professors who were also very nice, one of whom had done his PhD in program verification, so we had a little chat about my work and on PLT. They had the kind of problems you'd expect, not enough staff, not enough money, not being able to travel. Even though many of the lecturers have PhDs, they don't have time to do any research. In fact they seem to have lot of clever people (in contrast to say Addis Ababa, where all the lecturers with PhDs left to work in the states), but not enough time and money. They teach pretty much what you'd expect of a computing course, Java and C++ and databases, hardware, etc. Less maths and theory than at Imperial and more general options - the first year is a bit liberal arts like and they continue to do English and other options throughout.&lt;br /&gt;&lt;br /&gt;Anyway, what was nicest was to meet so many friendly people, it was amazing how many people wanted to chat or say hello or were interested in this that or the other. Overall it was a great experience and I wish I'd had longer there; the staff wanted me to give a seminar on my research and it would have been nice to meet more of the staff and maybe sit in on some CS lectures.&lt;br /&gt;&lt;br /&gt;After all this fun it was time to go back to Jerusalem, which entailed lots of waiting and queuing at checkpoints and very young and nervous (but always polite) Israeli soldiers pointing guns in my direction and general tension. I won't go into it here, but suffice it to say that the Palestinians really suffer for the security measures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8480533233563633770?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8480533233563633770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8480533233563633770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8480533233563633770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8480533233563633770'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/08/visit-to-najah-university-nablus.html' title='A visit to an Najah University, Nablus.'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-2413133892417741714</id><published>2008-08-01T06:54:00.000+01:00</published><updated>2008-08-01T06:56:16.764+01:00</updated><title type='text'>ECOOP day 3</title><content type='html'>First paper of the day was "Programming with Live Distributed Objects". I used to be quite into distributed programmer, so I was interested to hear this talk. I have some interesting looking notes which I will put here verbatim:&lt;br /&gt;    everything is a live, distributed object&lt;br /&gt;    eg naming&lt;br /&gt;    composition is fundamental&lt;br /&gt;    compatible end points is the most important relation, basis for subtyping&lt;br /&gt;    constraints on endpoints&lt;br /&gt;    parameterised types, XML&lt;br /&gt;Unfortunately, I can no longer remember what any of it means (it has been almost 3 weeks since the talk), perhaps I will edit this once I read the paper and remember how it all works, but I wouldn't hold your breath.&lt;br /&gt;&lt;br /&gt;Ray (Hu) from Imperial gave his talk on "Session-Based Distributed Programming in Java". They have implemented session types for Java and it all seems to work very nicely. Session types are cool and their use of them in Java seems to work very well, and they got good benchmarks. It is nice to see static typing used to verify something like distributed protocols, it just seems to make really good sense!&lt;br /&gt;&lt;br /&gt;I'm afraid I missed "ReCrash: Making Software Failures Reproducible by Preserving Object States", which I wanted to see, so another paper to push onto the stack.&lt;br /&gt;&lt;br /&gt;Next up in this session was "An Extensible State Machine Pattern for Interactive Applications". I started off understanding a lot and thinking the problem was quite easy. It reminded me more than slightly of work we did on StateJ (although they didn't mention us :-(   ). They have a problem with interactive, stateful applications that is similar to the expression problem. Their solution seems to involve refactoring in some factory methods. I would have thrown some virtual classes at it and given my usual sales pitch about how nice and elegantly it would all work, but each to their own. Then they started talking about interrupting events and delimited continuations and I'm afraid I got a little lost, but I was motivated to read the paper and understand it.&lt;br /&gt;&lt;br /&gt;Probably the most useful idea at the conference, "Practical Object-Oriented Back-in-Time Debugging" did just that, they have a back in time debugger for Java that works with realistically sized programs. If I did any programming I would want their tool! In terms of implementation the key idea is that they keep all of the _relevant_ history, and let the garbage collector get rid of the rest. Seems like a neat idea now that someone has done it!&lt;br /&gt;&lt;br /&gt;The last talk of the conference was "How do Java Programs Use Inheritance? An Empirical Study of Inheritance in Java Software". A study of inheritance in Java programs. Surprisingly they use it a lot, not everyone just hacks things together without thinking of these things. I suspect that in a few years this will be the most widely cited paper presented, whenever we need an excuse to do some more research on anything vaguely related to inheritance, BAM! Motivation!&lt;br /&gt;&lt;br /&gt;And that was that for ECOOP '08. I had a great time and look forward to next year, although Sophia is PC and so it might be difficult to write a paper for it, not to mention an inconvenient wedding just before the deadline.&lt;br /&gt;&lt;br /&gt;I left Cyprus the next day, although obviously it did not go smoothly. After getting a ride to Larnaca airport (thanks to the Swedish contingent!) I had a marathon wait, followed by more waiting as my flight was delayed, followed by more waiting for an interview with security in Israel because they didn't like some of the stamps in my passport (I was kind of prepared for this). By the time I cleared the airport my hotel was closed so I spent what was left of the night sleeping on the roof of a full hostel in the wrong city; the sun was coming up as I finally tried to get to sleep...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-2413133892417741714?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/2413133892417741714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=2413133892417741714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2413133892417741714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/2413133892417741714'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/08/ecoop-day-3.html' title='ECOOP day 3'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-9034211752910774230</id><published>2008-07-30T21:05:00.000+01:00</published><updated>2008-07-30T21:06:12.812+01:00</updated><title type='text'>ECOOP day 2</title><content type='html'>Well my notes get sparser by the day and I attribute this to conference fatigue rather than fewer good talks, so here is my rather brief account of day two at ECOOP.&lt;br /&gt;&lt;br /&gt;The first paper I would like to describe was on UpgradeJ and the talk was given by Gavin Biermann. To be honest I thought this problem had been solved because I have not seen any work addressing it recently, but it seems I am wrong, and just as well because this was one of my favourite talks. The problem is to dynamically update running Java programs, which entails all sorts of headaches: Gavin started off the talk by warning that this was a topic for experts, not novice programmers. Although, after everything was explained it didn't actually seem _that_ hard, perhaps in real life it is more difficult (which begs the question - "how much can this stuff be encapsulated?"). Anyway, they propose a scheme of class upgrading with explicit (and multiply co-existing) versions; furthermore, upgrading is explicit too. I kind of like this approach - no surprises! There are lots of nice little features, such as fixing classes at a certain version or allowing them to upgrade, or allowing possibly breaking upgrades etc. Also, it is rather conservative, in a good way, you can not rely on versions being loaded at some point to call the upgraded code. I wonder if it is possible to rollback versions too. I suspect so, seeing as the system, is conservative type-wise, but I guess I'll have to read the paper to find out...&lt;br /&gt;&lt;br /&gt;Next was Donna Vali... (sorry Donna! My internet has gone down, and I will be too lazy to check this later) talking about her system for mixing nominal and structural subtyping. I've looked at this work a few times before (see blog posts below  vvv). I like it, it has a nice mixture of the features of both type systems and it seems well thought through. My only quibble is that it is hard enough to convince programmers to use types and I wonder if they will get enough benefit to deal with the extra overhead. Actually, I suspect they would, if they tried, but I also suspect that they are mostly to lazy to try and that language designers are too risk averse to try too. Also, the real joy of structural typing comes from the flexibility, and this has to be lost in order to accommodate nominal subtyping, so I am very interested to see how flexible the system is. I will read the paper and find out! And something to think about - Donna gives objects a structural and a nominal type, the structural type has a clear run-time counterpart - the record, and an object can be thought of as a record and a brand (the nominal part of its type). BUT, what is a brand? Is there a runtime entity that can exist without an object and captures the essential features of this mysterious brand? I am very interested to know, so if anyone has any ideas, please let me know!&lt;br /&gt;&lt;br /&gt;The day was wrapped up with Gilad Bracha's summer school talk on his new language Newspeak, which was very popular (I would be a little gutted if my talk was scheduled for this time) and brought on a lot of George Orwell puns. Anyway, it was a great talk, Gilad is a wonderful speaker,and the language is interesting and abides by a lot of very sensible rules. One thing I lied was the design philosophy - you think of a rule, and everything else just kind of follows from it, no exceptions.&lt;br /&gt;&lt;br /&gt;After all this intellectual tomfoolery we had the conference banquet in the evening. This was in a touristy taverna in Paphos town where the music was too loud and the entertainment was very cheesy, and apparently provided by perverts. If I ever have daughters they will never set foot in Paphos as long as I live. James Noble started a very entertaining speech, including heckling some tourists at one point, but was quite rudely cut off by the band halfway through, which is a shame since it looked like it was going to be the only entertaining conference speech in history. This was followed by more 'entertainment', not least of which was my supervisor, Sophia, dancing with performers and generally enjoying herself (there is video, although I have not received it yet...). We made a sharp exit, and had an enjoyable night chatting with various ECOOP people in various ECOOP places.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-9034211752910774230?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/9034211752910774230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=9034211752910774230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9034211752910774230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/9034211752910774230'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/07/ecoop-day-2.html' title='ECOOP day 2'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6276494957363708244</id><published>2008-07-29T19:26:00.001+01:00</published><updated>2008-07-29T19:26:18.975+01:00</updated><title type='text'>ECOOP day 1</title><content type='html'>And so to the main conference. First of all I would like to brag that our paper was nominated for best paper, which is very flattering, unfortunately we didn't win, but at least we have something to aim for next year :-)&lt;br /&gt;&lt;br /&gt;The day started (well, after the usual welcome chit chat) with an invited talk about transactions, that dialled the usual numbers about multicores and concurrency being the next big thing, and transactions being _the_ way to address the whole concurrency problem, and asked the question "are these transactions the same as we were talking about 30 years ago?"&lt;br /&gt;&lt;br /&gt;Following this was my talk, which went swimmingly, although I was still a little rushed at the end, although I still managed to finish (almost) on time and earn myself a pear.&lt;br /&gt;&lt;br /&gt;Unfortunately I was to drained emotionally to pay any attention to the nest talk, which is a shame because it looked really interesting and I will definitely be reading the paper - it was about mixing inheritance between languages.&lt;br /&gt;&lt;br /&gt;Later, I attended the summer school talk on JavaCOP which was very interesting and really sold the concept. They basically implement pluggable types, a concept of which I am a very big fan, and allow you to add your own type systems to Java. I think it is defiantly worth looking at a bit closer and I will do this as soon as I have some time (which really means after my thesis is finished). In a nutshell: you write extra types as annotations to your Java code, and define a bunch of predicates that makes them all work and JavaCOP compiles it all into a class file which can then check the programs you annotated. It all seems like an interesting and practical idea with probably a never ending list of extra things that could be added.&lt;br /&gt;&lt;br /&gt;I rounded off the day with another summer school talk, this time by Jonathan Aldritch on SASyLF - a proof assistant for students. This was a great session and we all had a go at making and running SASyLF proofs. It got me even more convinced that I must learn how to use one of these proof assistant things. There seemed two novelties with SASyLF: first that it is really aimed at the ECOOP (rather than POPL) crowd, and so has natively a lot of things that you waste a lot of time doing in other proof assistants; secondly, it is aimed at students, which means you have to spell everything out and can't tell it do as much as it can with guidance at any point. Most people seemed to regard this as a shame as they'd like to be able to use it since it is adapted to their needs. There was much talk of some kind of professor switch to make things quicker whilst still making students understand everything, but this seemed impractical from a security point of view. Anyway, it was all very cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6276494957363708244?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6276494957363708244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6276494957363708244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6276494957363708244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6276494957363708244'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/07/ecoop-day-1.html' title='ECOOP day 1'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-320001979464027195</id><published>2008-07-29T06:36:00.001+01:00</published><updated>2008-07-29T06:36:41.774+01:00</updated><title type='text'>FTfJP and the DLS</title><content type='html'>So on to day 2 of the conference, where I mainly attended FTfJP and briefly popped into the Dynamic Languages Symposium.&lt;br /&gt;&lt;br /&gt;First of all I'd like to bing attention to my colleague, Alex Summers' talk, which was a good talk, but more importantly the work is interesting. Actually I have been a little bit involved with it (only a little though) so I have heard a lot of teh stuff he talked about. But, I think it is very interesting, it is about adding static fields and methods to the universe type system. Frankly, I think this is a terrible idea, we should just avoid static anything like the plague (see Gilad's summer school talk and (I think) an earlier blog post), but if you're going to do it, then it turns out to be an interesting problem with no easy solution (the best kind, or worst, depending on your point of view).&lt;br /&gt;&lt;br /&gt;The next great talk was by Stefen Wehr who talked about wildcards (a topic very close to my heart). He is concerned with decidability, admitedly not directly. In his work he shows that _a_ model for wildcards and another for interfaces in JavaGI, both of which use a similar kind of existential type, are undecidable. This is obviously interesting since decidability of wildcards is still an open question, which I'd love to look at if I had the time and skills, but I have neither, so I have to make do with reading interesting papers like this one.&lt;br /&gt;&lt;br /&gt;The next talk of note was at the DLS, it was an invited talk given by Laurence Tratt entitled Language Design: Back to the Future?. The gist of the talk was that all current languages are almost identical and language designers are not really being creative. He also claimed there are some valuable things that people have done and that have been ignored. I kind of agree, although I don't agree that it is due to a lack of creativity on the part of language designers - there are plenty of fairly wild ideas floating around, but it is true that most never make it into real life languauges. He seemed to concentrate on 'micro' level language features such as new expressions, which is an area (I thinK) that has been neglected in research lately in favour of more 'macro' ideas - such as ownership types, different object meta-models etc. I was a little inspired by the speaker to think a bit more about language culture. His point is that programmers, lanaguage designers, and researchers are all absorbed in a certain culture of a language - the paradigm, the programming idioms, way of thinking, etc. It would be interesting to see some research on this - to charecterise and compare these programming cultures and the effects they have on programming languages, and importantly, vice versa. A quote I liked was that innovative language features were destined to have "some spotty twat at the front take the piss out of it".&lt;br /&gt;&lt;br /&gt;I'm afraid that by this point I was a little drained and failed to make any meaningful notes, but I'd like to draw attention to the last two talks of the day that I thought were interesting - Rok Strnisa on the Java Module System and Samir Genaim and Fausto Spoto on constancy analysis&lt;br /&gt;&lt;br /&gt;And an interesting thought from one of the talks - if we have an underlying database implementation (for example) that only has a next method as an accessor that returns null at the end of the table. If we wish to implement a wrapper with a hasNext method, then this method will have an internal side effect (it must cache the returned row, if it is not null), but logically it should be pure. Can this be handled elegantly in the various ownership/invariants/effects systems that are around?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-320001979464027195?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/320001979464027195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=320001979464027195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/320001979464027195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/320001979464027195'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/07/ftfjp-and-dls.html' title='FTfJP and the DLS'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7405480082685849168</id><published>2008-07-22T12:24:00.002+01:00</published><updated>2008-07-22T13:09:27.053+01:00</updated><title type='text'>ECOOP '08, Cyprus</title><content type='html'>This is turning into nothing more than a conference blog, and I apologise if anyone actually reads this (actually, at least one or two people do, as I found out - hello!). Its not that I've stopped having ideas, its just that I've been very busy. I'm now in Israel, en route to Egypt to write my thesis (yes, it is a good idea, actually). I have a little time to write a little in the blog, so here is my summary of ECOOP...&lt;br /&gt;&lt;br /&gt;ECOOP this year was in Cyprus, not an altogether popular choice, since getting there from anywhere except London was a nightmare, but I came from London so I was happy. Also happy to be very close to the beach and for it to be very warm, thus making for a very enjoyable conference. Well, except for the fact that I was working a little and had a walk to the hotel and it was hot and I inevitably sweat so much I spent most of the conference smelling like a tramp, but hey.&lt;br /&gt;&lt;br /&gt;Anyway, the first day was IWACO, which was great. I really like this little workshop and enjoyed nearly all the papers, so you could go worse than go to &lt;span style="text-decoration: underline;"&gt;http://www.cs.purdue.edu/homes/wrigstad/iwaco08/programme.html&lt;/span&gt; and read them all! Some comments on some of the talks follow:&lt;br /&gt;&lt;br /&gt;First was Jonathan Aldritch's invited talk - the theme of which was making ownership types systems usable by real programmers. It was a great talk and he discussed a lot of aspects that make type systems more or less likely to ever make it into real langauges. He talked about the adoptability and applicability of ownership systems - adoptability concentrated on making these systems easier to use: less annotations, more inference, etc. And how to get the programmer to give the right guidance to the compiler to do inference. Applicability was basically about offering less strict organisation than classical ownership types - such as existential types (!), multiple ownership (!), domains, etc. He also encouraged us to _actually_ study more code to find the strucure of large software.&lt;br /&gt;&lt;br /&gt;Alex Potanin then talked about unifying ownership and immutability by using generics, which is a very interesting idea at its early stages.&lt;br /&gt;&lt;br /&gt;I gave a talk on existential types for ownership variance, which uses the nice clean framework of existential types to give owner variance without the kind of hackery we use in, for eg, MOJO.&lt;br /&gt;&lt;br /&gt;The talk by Nicholas D. Matsakis and Thomas R. Gross was also good. They parameterise types with partitions that restrict effects and use this information to ensure thread safety. It seemed to me like a more fine-grained version of atomic sections, since they restrict the atomic-ness (i.e., the non interfernce of effects) to a parition, while atomic sections apply to the whole heap. I also wonder what would happen if you allowed some kind of variant partitions, like wildcards (not that I'm developing a one-track mind for wildcards or anything).&lt;br /&gt;&lt;br /&gt;John Boyland gave a good position paper, which basically said non-linear reasoning (ownership) is better for reasoning about non-linear problems, specifically volatile fields, than linear reasoning (seperation logic).&lt;br /&gt;&lt;br /&gt;The talks were rounded off by some interesting demos and a talk about J* by Dino from Queen Mary's, which inspired me to read the seperation logic literature, which I've been meaning to do for a while, but never got round to...&lt;br /&gt;&lt;br /&gt;James Noble made the astute comment that some kind of ownership was creeping into seperation logic techniques in order to address certain problems. Also the composite pattern is the new subject-observer - it is difficult to model since you go bottom-up, breaking all the invariants as you go, and then repair them all. I wonder what we will do for motivation when we finish the design patterns book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7405480082685849168?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7405480082685849168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7405480082685849168' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7405480082685849168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7405480082685849168'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/07/ecoop-08-cyprus.html' title='ECOOP &apos;08, Cyprus'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-7023717260257195017</id><published>2008-01-14T21:03:00.000Z</published><updated>2008-01-14T21:32:58.592Z</updated><title type='text'>Existential types everywhere!</title><content type='html'>I am certainly biased in this respect, since most of my research work has been with existential types, but I think that existential types are vastly important to the world of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OO&lt;/span&gt; programming languages, and probably the rest of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;PLT&lt;/span&gt; too. Existential types give us a way of expressing data hiding (i.e., abstraction) in the type system, and seeing as this is what most of software engineering is all about, it shouldn't be surprising that existential types start cropping up all over the place.&lt;br /&gt;&lt;br /&gt;My own work has so far focused on Java &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;wildcards&lt;/span&gt;, which are a (relatively) simple way of using existential types to deal with the mismatch between parametric (i.e., generics) and inclusion (i.e., &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;subclassing&lt;/span&gt;) polymorphism. In the same way I have found existential types to be useful in the world of ownership types. I believe Werner &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Dietl&lt;/span&gt; is having a similar experience with universes.&lt;br /&gt;&lt;br /&gt;Existential types are also a foundational model for objects themselves in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;OO&lt;/span&gt; languages. And, I suspect, are a better way of thinking of generic classes than the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;universal&lt;/span&gt; types that people often assume.&lt;br /&gt;&lt;br /&gt;Furthermore, I've found some pretty elegant tricks that can be played using existential types mechanisms such as packing and unpacking types, in the realms of path dependent types and virtual classes. I'm pretty sure the same techniques can be used elsewhere.&lt;br /&gt;&lt;br /&gt;More than a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;whiff&lt;/span&gt; of existential types can be had all over the place in current research, delayed types, ownership domains, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;MOJO&lt;/span&gt; all come to mind, and I'm sure I've come across more that I can't remember.&lt;br /&gt;&lt;br /&gt;And so what? Well I'm not sure, but I guess I'm glad I've managed to get pretty deep into existential types. I'm sure they'll keep coming in useful for some time to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-7023717260257195017?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/7023717260257195017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=7023717260257195017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7023717260257195017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/7023717260257195017'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2008/01/existential-types-everywhere.html' title='Existential types everywhere!'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-4535772970127521755</id><published>2007-10-26T14:34:00.000+01:00</published><updated>2007-10-26T14:45:15.775+01:00</updated><title type='text'>OOPSLA Day 4</title><content type='html'>The last day at OOPSLA had the session on ownership types, which was great. It also had my talk (paper and slides available &lt;a href="http://www.doc.ic.ac.uk/%7Encameron/papers/index.html"&gt;here&lt;/a&gt;) which went well and I got some excellent feedback. I was also a bit more relaxed once it was out of the way!  The talks that I founf interesting today were:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ownership Transfer in Universe Types&lt;/span&gt; Seemed to take a lot from the ideas of external uniqueness and ownership domains, also doesn't seem to work with concurrency. But, the ideas are very interesting and I'm really motivated to read the paper.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lost in Translation: Formalising Proposed Extensions to C#&lt;/span&gt; Dealt manly with LINQ (again), and had a lot of formal stuff in the talk, which is normally a bad sign, but it was pretty easy to follow and the formalism looks interesting&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Java Module System: Core Design and Semantic Definition&lt;/span&gt; Was a good talk, all about formalising the proposed Java Module system. Its kind of interesting seeing how it will all work and the work has obviously been well thought through. The size of the formalism is staggering!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And that was the end of OOPSLA, well actually I had quite a few very interesting conversations along the way, especially oni the last day it seems. Had an ice cream and went home, well back to my hotel anyway. All in all it was a great conference, and I look forward to coming back, insha'allah.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-4535772970127521755?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/4535772970127521755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=4535772970127521755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4535772970127521755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/4535772970127521755'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/10/oopsla-day-4.html' title='OOPSLA Day 4'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5076206351713626810</id><published>2007-10-24T22:18:00.000+01:00</published><updated>2007-10-24T22:43:17.044+01:00</updated><title type='text'>OOPSLA Day 3</title><content type='html'>And so to day 3, and without further ado, the papers I found most interesting:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;StreamFlex&lt;/span&gt;: High throughput stream programming in Java&lt;/span&gt; A mini-solution to real time &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;strea&lt;/span&gt;m programming, because the general problem, that is real time programming is horrible. Streaming apps have no buffering and no messages can be dropped. Plus all the usual real time constraints. In particular, garbage collection is the big headache. They have an interesting &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;combination&lt;/span&gt; of channels, capsules and transient and stable regions of the heap, and an interesting, simple variation on ownership types. Plus region based memory management and transactional memory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Can programming be liberated from the two-level style? Multi-level programming with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;DeepJava&lt;/span&gt;&lt;/span&gt; Presented a cool meta-type system, but I wasn't sure how it was different from other meta-type systems. Nice though. The interesting bits were their &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;potency&lt;/span&gt; annotations that give a nice way to specify types in classes lower down the chain of meta-types than the immediate &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;implementer&lt;/span&gt;. They also suggest that the system can be used as an alternative to generics, which looks kind of virtual types like, I must look closer at that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modular &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;typestate&lt;/span&gt; checking of aliased objects&lt;/span&gt; Can prevent a lot (apparently) of dynamic errors (or exceptions) statically (always a good thing) using fractional permissions. Seems a nice, little system and deserves a closer look because of the reference to a pack/unpack system, possibly similar to existential types.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Establishing object invariants with delayed types&lt;/span&gt; This seems like a big, clever solution to a small, dumb problem, however, the motivation and evaluation seemed convincing. The problem seems to be handling constructors and establishing invariants. The solution is interesting, using delayed types (obviously). James noted an interesting connection to ownership types that deserves further investigation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5076206351713626810?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5076206351713626810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5076206351713626810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5076206351713626810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5076206351713626810'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/10/oopsla-day-3.html' title='OOPSLA Day 3'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-198342845691787150</id><published>2007-10-24T03:09:00.000+01:00</published><updated>2007-10-24T03:54:39.450+01:00</updated><title type='text'>OOPSLA Day 2</title><content type='html'>Day 2 started with two long talks, fortunately both speakers were excellent and the subject matter interesting enough to keep my attention for one and a half hours. The first was by &lt;span style="font-weight: bold;"&gt;Erik &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Meijer&lt;/span&gt;&lt;/span&gt;, titled &lt;span style="font-weight: bold;"&gt;confessions of a used programming language salesman&lt;/span&gt;. The talk (and accompanying essay) is part autobiography, part introduction to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;LINQ&lt;/span&gt;, and part sales pitch for functional languages; which you might have thought would be a hard sell at an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;OO&lt;/span&gt; conference, but hey. Erik started by talking about his background in category &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;theory&lt;/span&gt; and functional programming, and reminded me that I wish I could understand this stuff. He then went on to slate C Omega as a a bad job with too many types, but seemed happy with the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;LINQ&lt;/span&gt; stuff, which he revealed are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;monad&lt;/span&gt; comprehensions in disguise. He gave his theory for non-adoption of functional languages and good science in general, by saying the perceived pain of adoption was too high. He thus strives to reduce this to close to zero. He then went off on a bit of a tangent - the aforementioned sales pitch/rant for pure functional languages. on the way he gave the best metaphor for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;monads&lt;/span&gt; I've come across - in the context of a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;getTime&lt;/span&gt; function, the time changes and so isn't a function, but if you return the clock then you're OK, because the clock does not change. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Monads&lt;/span&gt; are like clocks. He explained it much better than that though. Another good metaphor was making the comparison between functional and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;OO&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;nouveax&lt;/span&gt; cuisine and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;McDonalds&lt;/span&gt;, although I think this is a little unfair on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;OO&lt;/span&gt;,  its a nice image.&lt;br /&gt;&lt;br /&gt;The second talk was &lt;span style="font-weight: bold;"&gt;Second Life: The World's Biggest Programming Environment&lt;/span&gt; by &lt;span style="font-weight: bold;"&gt;Jim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Pubrick&lt;/span&gt;&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Mark &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Lentczner&lt;/span&gt;&lt;/span&gt;. This was very cool, it ticked all the boxes - games, 3d graphics, distributed systems, massively &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;parallel&lt;/span&gt; and concurrent, and user definable everything! The basic idea is they have this 'game' (or world for creativity and business, depending on your point of view) with huge numbers of users, 15% of whom write scripts. The numbers for programmers, scripts, lines of code, etc. were staggering, never mind the sheer number of potential users for each script. They weren't shy in admitting that there scripting language is an abomination, but they claim the distribution model is great. In effect they have very real encapsulation, each unit is tiny and self-contained, but there are millions of them and they all run concurrently on thousands of processors, so the kind of stuff we've been promised for the future in countless motivation chapters. On a side note they have an explicit of state in their language and I think this is a great opportunity to plug some work I participated in - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;StateJ&lt;/span&gt;, paper available from the &lt;a href="http://www.doc.ic.ac.uk/%7Encameron/papers/index.html"&gt;usual place&lt;/a&gt;. Anyway, the long and short of things is that they are porting it all to Mono so it all works properly at scale and they employ a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;cornucopia&lt;/span&gt; of neat tricks to do this, most of which are hacks to get poor design decisions in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;CLR&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;eg&lt;/span&gt;. lightweight threads, serialisation, etc. Basically they have a very cool problem on their hands. They finished off by selling Second Life as a development environment, showing how their &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;dev&lt;/span&gt; team collaborate virtually. It was a pretty cool demo, everyone loves pretty graphics at the end of the day! On another note, their security model is cool, looks like security is more interesting than I thought.&lt;br /&gt;&lt;br /&gt;The last session I attended was research papers &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Atushi&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;Igarashi&lt;/span&gt; &lt;/span&gt;presented &lt;span style="font-weight: bold;"&gt;Variant Path Types for Scalable &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Extensibilty&lt;/span&gt;&lt;/span&gt;, which is an extension of the FOOL paper I've described before, so won't do so again, its still very cool stuff.&lt;br /&gt;&lt;br /&gt;Next up was &lt;span style="font-weight: bold;"&gt;Dependent Classes&lt;/span&gt; by &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;Vaidas&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;Gasiunas&lt;/span&gt;&lt;/span&gt;, a &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_26"&gt;development&lt;/span&gt; of virtual classes that subsumes multiple dispatch, it is one of the most interesting papers I've read in a long time. But we've discussed it in SLURP, so I won't write more.&lt;br /&gt;&lt;br /&gt;The last paper was &lt;span style="font-weight: bold;"&gt;User-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;Changable&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;Visibilty&lt;/span&gt;: Resolving Unanticipated Name Clashes in Traits&lt;/span&gt;, the idea was adding access modifiers to traits and being able to change them on trait composition by freezing and defrosting. It looked like interesting stuff, but the talk was quite basic, mostly taken up with an &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_29"&gt;introduction&lt;/span&gt; to traits. The paper looks worth reading though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-198342845691787150?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/198342845691787150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=198342845691787150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/198342845691787150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/198342845691787150'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/10/oopsla-day-2.html' title='OOPSLA Day 2'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-5496420009239869918</id><published>2007-10-23T20:03:00.000+01:00</published><updated>2007-10-23T20:24:42.556+01:00</updated><title type='text'>OOPSLA Day 1 - Dynamic Languages Symposium</title><content type='html'>The Dynamic Language Symposium was interesting, the invited talk was on security and this (in particular capabilities) seemed to permeate a lot of the questions. I found a lot of the talks (esp the invited talk) thought provoking, but not directly interesting, which is a shame because dynamic &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;languages&lt;/span&gt; are a hot and interesting area. In particular the invited talk got me thinking about security as an interesting topic, which takes some doing!&lt;br /&gt;&lt;br /&gt;This is pretty lazy, but I'm not going to write anything specific about the talks, mostly because I don't have anything deep to say. But here's a list of the ones I found most enjoyable/interesting/thought provoking:&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Tradeoffs&lt;/span&gt; in Retrofitting Security: An experience Report&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;OMeta&lt;/span&gt;: An Object Oriented Language for Pattern Matching&lt;br /&gt;&lt;br /&gt;Dynamic Ownership in a Dynamic Language&lt;br /&gt;&lt;br /&gt;Highly Dynamic Behaviour through Prototypes with Subjective &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Multimethods&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mirages: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Behvioural&lt;/span&gt; Intercession in a Mirror Based Architecture&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-5496420009239869918?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/5496420009239869918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=5496420009239869918' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5496420009239869918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/5496420009239869918'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/10/oopsla-day-1-dynamic-languages.html' title='OOPSLA Day 1 - Dynamic Languages Symposium'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-8943438675431890102</id><published>2007-10-22T14:54:00.000+01:00</published><updated>2007-10-22T15:01:35.115+01:00</updated><title type='text'>OOPSLA 07, Montreal - First Impressions</title><content type='html'>So, I'm at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OOPSLA&lt;/span&gt; and I'll be blogging about it. I'm talking on Thursday, so I can't relax until the end, but hey, should still be fun.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Montreal&lt;/span&gt; is beautiful at the moment, all the trees are gold, red and green, really stunning stuff. I've seen a few parks and wondered around the city, and its all very nice. Not much in the way of history though, the old town is only old relatively. In fact the whole place feels slightly soulless, but still a nice town.&lt;br /&gt;&lt;br /&gt;The conference venue is pretty impressive, very posh and huge - a real difference from the usual academic conference in a university! Also there are a lot of people and a lot of stuff going on, it certainly feels like a pretty unique kind of conference (at least compared to what I'm used to).&lt;br /&gt;&lt;br /&gt;Anyway, the next posts will deal with the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;interesting&lt;/span&gt; stuff - the talks...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-8943438675431890102?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/8943438675431890102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=8943438675431890102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8943438675431890102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/8943438675431890102'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/10/oopsla-07-montreal-first-impressions.html' title='OOPSLA 07, Montreal - First Impressions'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-438933385354273872</id><published>2007-08-08T21:57:00.000+01:00</published><updated>2007-08-08T22:18:35.986+01:00</updated><title type='text'>ECOOP day 3</title><content type='html'>And so the last and shortest day began. It started with &lt;span style="font-weight: bold;"&gt;Jonathan Aldrich&lt;/span&gt;'s invited talk. This was another good talk, describing the research he has been involved in with software architecture. The general gist is that the architecture of software should be part of the code and enforced by the compiler. To this end he talked about ownership, and his variant - ownership domains, and also ArchJava. He motivated ownership domains with the MVC pattern, showing that owners-as-dominators style ownership is too restrictive to be used there. The whole thing sounded very ambitous and also extremely practical, so pretty exciting stuff. Also mentioned existential types in the context of ownership types, which is something I want to look at.&lt;br /&gt;&lt;br /&gt;The first talk on friday was &lt;span style="font-weight: bold;"&gt;MAO: Ownership and Effects for more Effective Reasoning about Aspects - &lt;/span&gt;motivated by the difficulty of reasoning about aspects (their greatest drawback in my opinion), the authors used ownership and effects to aid this reasoning and claimed to get good results.&lt;br /&gt;&lt;br /&gt;I'm afraid that by friday I was suffering conference fatigue and my notes were getting pretty flakey, but I did manage to write down which talks I found intersting, so I can read the papers:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Joinpoint Inference from Behavioral Specification to Implementation&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;A Machine Model for Aspect-Oriented Programming&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Tracking Linear and Affine Resources with Java(X)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Attribute Grammar-based Language Extensions for Java&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;And that was the end of ECOOP. Now I have to find some time to read a lot of papers in more detail, I fear the list never gets shorter.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-438933385354273872?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/438933385354273872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=438933385354273872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/438933385354273872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/438933385354273872'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/08/ecoop-day-3.html' title='ECOOP day 3'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3211036331361060790</id><published>2007-08-08T09:20:00.000+01:00</published><updated>2007-08-08T09:44:59.528+01:00</updated><title type='text'>ECOOP day 2</title><content type='html'>The day kicked off with &lt;span style="font-weight: bold;"&gt;Luca Cardelli&lt;/span&gt;'s invited talk. This was a personal history of his involvement with OO theory (and practice to some extent) and type theory, which turns out to be a pretty good history indeed. Once again concurrency reared its ugly head as its Luca's current research area and he thinks its the next intersting thing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Yi Lu - Validity Invariants and Effects -&lt;/span&gt; Lu and Potter's annual ECOOP paper was as interesting as expected. This year they extended ownership types with invariants, the idea being it is easier to reason about invariants in the presence of ownership types.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Non-null references by default in Java -&lt;/span&gt; was a case study on delarations that could be declared non-null or nullable and found that most could be non-null. They then argued that non-null should be the default, which seems fair, but is unlikely to happen in Java.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Burak Emir - Matching Objects with Patterns -&lt;/span&gt; Compares various OO pattern mathcing techniques and suggests a new one. Pattern matching seems like a good idea, but is sometimes criticised for being non-OO, will read the paper and decide...&lt;br /&gt;&lt;br /&gt;I liked the talks on &lt;span style="font-weight: bold;"&gt;DirectFlow: a Domain-Specific Language for Information-Flow Systems&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;A Relational Model of Object Collaborations and its Use in Reasoning about Relationships&lt;/span&gt;, but don't have much to say about them, sorry.&lt;br /&gt;&lt;br /&gt;I missed the talk on &lt;span style="font-weight: bold;"&gt;JavaGI&lt;/span&gt;, but I think I read an earlier version of the work (I seem to remember it being very powerful, but complex) and liked it so will go back and read the paper.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Aaron Turon - Metaprogramming with Traits -&lt;/span&gt; Uses a flexible version of traits to do metaprogramming (just like it says on the tin). They have an interesting type system that is hybrid structural/nominal. On a side note, I like traits, I think they are cool.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Shan Shan Huang - Morphing: Safely Shaping a Class in the Image of Others -&lt;/span&gt; more metaprogramming than morphing (classes do not change during execution), this seems powerful and generic and (relatively) easy to use. I've written "label checking" in my notes, but can't remember why now. An interesting view on this work is that they have a form of type-checked reflection, which is still a big open question at the moment. The claim that the language was more intuitive (has more "synergy" ) than the competition, was unsurprisingly provocative.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Higher Abstraction Level using First-Class Inheritance Relations -&lt;/span&gt; An interesting idea that basically 'does components' by having a complex and novel form of inheritance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3211036331361060790?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3211036331361060790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3211036331361060790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3211036331361060790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3211036331361060790'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/08/ecoop-day-2.html' title='ECOOP day 2'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3567893062033957622</id><published>2007-08-07T17:34:00.000+01:00</published><updated>2007-08-07T17:54:50.607+01:00</updated><title type='text'>ECOOP day 1</title><content type='html'>The first day of the conference was probably the most interesting to me and there was loads of good stuff. It all started with the invited talk by &lt;span style="font-weight: bold;"&gt;Joe Armstrong&lt;/span&gt; about Erlang. Apparently he is quite well known as an opponent of OO programming, so was a bit of an odd choice, but a good one. He was an excellent speaker and the talk was not actually very confrontational. He expounded a lot of good design ideas and concepts and evangelised a bit for Erlang (which seems pretty hot right now in PL circles). He has a real thing against mutable state, which, I guess, in its shared incarnation with concurrency around, is fair. I liked the idea that you don't catch expcetions, but let the process fail, but I'm not entirely convinced you can do this in real life, since other processes are going to have to catch the mess at some point. The other controversial point (according to me) is that we 'natively' understand concurrency, but not OO. I think the opposite is true, I think objects and classes are pretty natural, but that we function very sequentially. We only really notice what other people (processes) are doing when we interact occasionaly. But I think this is even more reason to like something like Erlang which really concentrates on concurrency.&lt;br /&gt;&lt;br /&gt;The invited talk was also good beccause it seemed to capture a few of the big 'feels' of the conference - that concurrency is hard and fertile ground for research, and that we might be reaching the limits of OO research (although I don't think I agree with the latter, I do with the former).&lt;br /&gt;&lt;br /&gt;The first proper talk was on &lt;span style="font-weight: bold;"&gt;gradual typing&lt;/span&gt;, a great idea that is getting some attention recently in various guises, this is another iterative development in the field. The idea is to be able to safely combine dynamically and statically typed program fragments (and some kind of grey area between the two). I really think this is the way forward for programming languages, especially as type systems get more complex.&lt;br /&gt;&lt;br /&gt;Next up (in my notes) is &lt;span style="font-weight: bold;"&gt;Werner &lt;/span&gt;again, this time talking about extending &lt;span style="font-weight: bold;"&gt;universe type systems with generics&lt;/span&gt;. This is the continuation of the work at FOOL that I describe below. Surfice to say I like it a lot and its worth reading.&lt;br /&gt;&lt;br /&gt;Possibly the most controversial talk of the conference was on &lt;span style="font-weight: bold;"&gt;object identity and relation types&lt;/span&gt;. The authors propose special classes called relations where the equals and hashcode methods are automatically supplied by the compiler by comparing fields marked 'key'. This was the first step towards some kind of heap/database project. A few members of the audience disliked the use of the term object identity in such a context, but I think this is a pretty petty objection, changing things for the better is what we are meant to be doing. I kind of liked this, it addresses a long standing problem (the subtyping/equals mismatch) and does it nice and simply. However, the extra syntax and machinary seems a lot of effort for what is really a fairly small problem.&lt;br /&gt;&lt;br /&gt;To round off the day was the panel discussion, discussing the future for OO programming languages. Martin Odersky and Gilad Bracha gave the most interesting and animated opening talks, but the rest of the discussion was a bit too restrained. Popular points were about concurrency and the (allegedly) growing division between expert and casual programmers. Whether reflection was essential for OO programming seemed to get people excited too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3567893062033957622?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3567893062033957622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3567893062033957622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3567893062033957622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3567893062033957622'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/08/ecoop-day-1.html' title='ECOOP day 1'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6481144213918944857</id><published>2007-08-07T09:58:00.000+01:00</published><updated>2007-08-07T10:21:54.369+01:00</updated><title type='text'>FTfJP 07 (at ECOOP)</title><content type='html'>The second day at ECOOP was taken up with the &lt;a href="http://cs.nju.edu.cn/boyland/ftjp/index.html"&gt;FTfJP &lt;/a&gt;workshop. There were lots of interesting talks and I'll only blog about a few of them. I spent all day there, but I really should have been elsewhere at 2 to listen to Gilad Bracha's &lt;a href="http://dyla2007.unibe.ch/?download=dyla07-Gilad.pdf"&gt;talk &lt;/a&gt;at &lt;a href="http://dyla2007.unibe.ch/"&gt;DyLA&lt;/a&gt;, which lots of people were talking about and sounded pretty interesting from chatting to Gilad. The talk was (apparently, I still need to read the paper) about Gilad's new language which he is developing at Cadence. All I really know is that it is dynamically types and involves some kind of virtual class construct, of which I am a big fan!&lt;br /&gt;&lt;br /&gt;So onto the talks, the accompanying papers can be found at the FTfJP link above:&lt;br /&gt;&lt;br /&gt;First up was a good looking lad talking about some &lt;span style="font-weight: bold;"&gt;wildcards&lt;/span&gt; rubbish. I thought the talk went pretty well and I got interested questions, so at least some people were following and were interested. I also got some useful feedback afterwards, so that is always nice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Vincent Cremet&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;Philippe Altherr - Adding Type Constructor Polymorphism to Java -&lt;/span&gt; This was a nice idea to make Java generics more expressive by allowing formal type parameters to be parameterised, thus having the power of full type constructors. You get quite a lot of extra expressivity for no extra syntactic constructs and very little syntactic overhead, which is similar to what already exists, so its a winner all round really. However, it does make the declaration of generic classes even more complex and ugly, so I can't see it being in Java 7.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Chieri Saito - The Essence of Lightweight Family Polymorphism -&lt;/span&gt; This was really interesting to me, particularly as I think the lightweight family polymorphism idea is great. The idea here was to attempt to translate lightweight family polymorphism programs into Java with generics to discover how much of their system is syntactic sugar and how much is actually new. They found that most could be translated away, but they needed an extra construct, to give a more specialised type to 'this', in order to translate the complete language. This was formally done by translating .FJ to FGJ.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Elena Giachino - Seperating Type, Behaviour and State to Acheive Very Fine-Grained Reuse -&lt;/span&gt; this is another neat idea, this takes the ideas behind traits a step further and further breaks up classes, so there are seperate constructs for behaviour, state, object creation and types. This seems to break things down to the bottom level and means reuse levels are really high. This is very elegant and interesting, however, there must be a tradeoff in the real world with practicality, and having so many little 'micro-classes' kicking around must get to be hard work, I think this even came across in the talk as the conceptual divisions were pretty porous and so in the examples bits of state would appear in the behaviour modules and so forth. Still a great idea and intellectually very interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6481144213918944857?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6481144213918944857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6481144213918944857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6481144213918944857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6481144213918944857'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/08/ftfjp-07-at-ecoop.html' title='FTfJP 07 (at ECOOP)'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3204894981648976182</id><published>2007-08-06T13:12:00.000+01:00</published><updated>2007-08-06T14:01:50.150+01:00</updated><title type='text'>ECOOP 07 - Berlin - IWACO</title><content type='html'>I was in Berlin last week for &lt;a href="http://ecoop07.swt.cs.tu-berlin.de/"&gt;ECOOP&lt;/a&gt;. The conference was really interesting, I got to meet lots of interesting and important people and I got to explore Berlin a bit too - it is, in fact, a wonderful city - I was well impressed! As I have quite a lot to say, I'll go one day at a time:&lt;br /&gt;&lt;br /&gt;On the monday I attended the &lt;a href="http://people.dsv.su.se/%7Etobias/iwaco2007.html"&gt;IWACO &lt;/a&gt;workshop, there were talks of 5, 10 and 25 minutes (I think) and nearly all were interesting, the ones I found most interesting were (papers available &lt;a href="http://people.dsv.su.se/%7Etobias/accepted.html"&gt;here&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Erik Ernst - Exclusive References (Primitive Associations) -&lt;/span&gt; Combining virtual classes and ownership is a great idea, Erik has an alternative that looks interesting and made me want to read the paper, I think its stuff I need to think about...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Matthew Parkinson - Class Invariants - The End of the Road? -&lt;/span&gt; Interesting and deliberately contraversial talk about the limitations of class invariants. Class invariants are described as too inflexible beacuse they can not describe the invariants of a group of classes (eg subject-observer). A heavier alternative using predicates is proposed. I don't know much about class invariants, but the argument seemed to make sense. However, class invariants have the advantage that they are easy to understand for the programmer, which seems to be lost by using predicates. I think this is another motivation for family polymorphism/virtual classes, as class invariants over a family should solve the problem - hmm, another research idea...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Invited talk on X10 by Vijay Saraswat -&lt;/span&gt; sounds very interesting and I look forward to reading the paper when its finished. He talked about having constraint types in X10 and extending FJ with xonstraint types as a formal version. These constraint types are a form of depedent types and the type system is undecidable, but he argued that this was not a big problem.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Johan Ostland (I think) - On the benefit of adding modes to owners (Ownership, Uniqueness and Immutability) -&lt;/span&gt; Extending ownership types with mutability annotations - simple and effective idea, looks good.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;James Noble - Ownership meets Java and Peter Muller - State of the universe addess -&lt;/span&gt; These two talks were meant to give an overview of the current state of the art in the two 'competing' systems of ownership types and universes. Both were good talks and convincing, and both outlined really exiciting directions for future work. I guess the result is that ownership types are more flexible and powerful and univeses are easier to use and have less overhead, hopefully we'll get the best of both worlds one day...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;John Boyland - Iterators can be independent "from" their collections -&lt;/span&gt; an intersting, if complex, solution to the iterators/ownership mismatch. I need to read the paper on this one!&lt;br /&gt;&lt;br /&gt;??? &lt;span style="font-weight: bold;"&gt;- Using ownership types to support library aliasing boundaries -&lt;/span&gt; good talk on using ownership in a C++ library which their students used to produce a 3d game. The combination of concurrency and ownership was interesting, they adopted a message passing approach and used 'tethers' to communicate back to the message sending process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Werner Dietl - Runtime Universe Type Inference -&lt;/span&gt; a really good presentation, Werner used a live demo with funky animations to demonstrate the inference of unvierse types. All seemed to work nicely.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mawan Abi-Antoun - Compile-Time Views of Execution Structure Based on Ownership and Ownership Domains in the real world -&lt;/span&gt; the first talk presented a system to visually present the runtime structure of objects using ownership domains. The visualisation is produced at compile time but still gives the dynamic structure of the program. The second talk presented an implementation of ownership domains and a case study on how ownership domains can be added to existing programs. Finding that they served as a useful way to identify bad design 'smells'. I thought this is an interesting point, that seems so obvious when you think about it - a mechanism used for enforcing design in the type system, when applied to an existing system, can be used to identify bad design!&lt;br /&gt;&lt;br /&gt;In summary - yay for ownership!&lt;br /&gt;&lt;br /&gt;More on the rest of the conference to follow...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3204894981648976182?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3204894981648976182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3204894981648976182' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3204894981648976182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3204894981648976182'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/08/ecoop-07-berlin-iwaco.html' title='ECOOP 07 - Berlin - IWACO'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3656772961407901573</id><published>2007-07-28T11:08:00.000+01:00</published><updated>2007-07-28T11:10:06.247+01:00</updated><title type='text'>Papers</title><content type='html'>The papers mentioned below (Multiple Ownership and Towards an Existential Types Model for Java Wildcards) are now available from my website:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nicholascameron.co.uk/papers/index.html"&gt;http://www.nicholascameron.co.uk/papers/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3656772961407901573?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3656772961407901573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3656772961407901573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3656772961407901573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3656772961407901573'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/07/papers.html' title='Papers'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-6883251582368248069</id><published>2007-07-28T10:45:00.000+01:00</published><updated>2007-08-06T13:59:31.126+01:00</updated><title type='text'>F-bounds and wildcards</title><content type='html'>An odd one this, that doesn't fit into our current model of wildcards. First, to set the scene, remember that the Java type checker always treats wildcards as unique. So, for example, if a method requires a parameter with type Pair&lt;x,&gt; and we give it a Pair it will not type check (since each wildcard is capture converted to a different, fresh type variable).&lt;br /&gt;&lt;br /&gt;However, if we have a generic class C that has an f-bounded formal type variable:&lt;br /&gt;&lt;br /&gt;class C&amp;lt;X extends C&amp;lt;X&amp;gt;&amp;gt; ....&lt;br /&gt;&lt;br /&gt;And we instantiate this type with wildcards, C&amp;lt;? extends C&amp;lt;?&amp;gt;&amp;gt;, it does type check. This is surprising since the type variables in the declaration are the same and yet the wildcards in the wildcard type are 'different', but here they are regarded as the same wildcard! There is no unsoundness as we can not create a type that violates the constraints of the formal parameters, but it is surprising that the type checker can apply this knowledge to the wildcard type.&lt;br /&gt;&lt;br /&gt;Time to upgrade our model...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-6883251582368248069?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/6883251582368248069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=6883251582368248069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6883251582368248069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/6883251582368248069'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/07/f-bounds-and-wildcards.html' title='F-bounds and wildcards'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-3935654966568993362</id><published>2007-06-10T22:34:00.000+01:00</published><updated>2007-06-10T22:43:56.840+01:00</updated><title type='text'>MOJO and \existsJ papers</title><content type='html'>I was suitably elated to have two papers accepted in the last month or so. The first, with Sophia Drossopoulou, James Noble and Matthew Smith, is called Multiple Ownership and has been accepted at OOPSLA. We describe a system of ownership types where objects may have multiple owners. The formal language described is MOJO. The description using simple sets (the 'Venn diagram' decription) is particularly pleasing in its simplicity.&lt;br /&gt;&lt;br /&gt;The second paper (Towards an Existential Types Model for Java wityh Wildcards) is written with Sophia and Erik Ernst and describes an OO calculus with traditional-style existential types that we describe as partially modelling Java with Wildcards. It is a nice summary of some of the work we have done towards proving type soundness for Java with Wildcards; which we are still working on, and is looking like it will occupy the bulk of my thesis!&lt;br /&gt;&lt;br /&gt;I've been lucky to work some really good people on both papers, and they have been an excellent experience.&lt;br /&gt;&lt;br /&gt;I'll post links to copies of the papers once we've made corrections and generally given them a little extra polish.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-3935654966568993362?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/3935654966568993362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=3935654966568993362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3935654966568993362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/3935654966568993362'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/06/mojo-and-existsj-papers.html' title='MOJO and \existsJ papers'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-116998507465556249</id><published>2007-01-28T11:29:00.000Z</published><updated>2007-01-28T11:51:14.703Z</updated><title type='text'>Functional vs OO languages</title><content type='html'>Passing judgement on this kind of thing is a bit out of my scope, but I was wound up enough by one of the invited talks at POPL to put my opinion to paper (as it were). First of all, there are a few issues, first is imperative vs functional (ie state-less) programming and the other is abstraction using objects (usually classes) vs abstraction using functions (and, in particular, higher order functions). As the two are usually lumped together so will I, as I'm not so much expressing an opinion as expressing my disgust at other peoples'.&lt;br /&gt;&lt;br /&gt;So, I have a problem with the "functional languages are better" opinion that seems to be going around a large part of the programming languages community at the moment. First off, we are all engineers to some degree and should realise there is no such thing as 'better' and especially not 'best'. Functional may be better sometimes and imperative at others. Secondly, I know functional languages are easier to reason about for theorists, easy to optimise, easier to parallelise and generally easier to work with (for theorists); BUT, that doesn't mean they are better for programmers (they might be, but there is no logical implication &lt;span style="font-style: italic;"&gt;here&lt;/span&gt;). Third: there was a big theme at POPL this year to listen to the software engineers, which is for sure a good idea; however, most software engineers want OO languages, not functional ones, because they believe they scale better to large projects. Maybe they are wrong, but it seems odd to want to listen to them, but then ignore this rather large point. Lastly, my personal opinion is that the better language in a given situation is the one that better matches the underlying physical situation. For things like image processing this may well be a functional model. However, we live in a stateful world and most things in it have state (including programmer's brains), it therefore seems like avoinding state in many programming situations increases the mismatch between the physical and abstract models and thus makes the programs harder to write and understand.&lt;br /&gt;&lt;br /&gt;On a side note, Chet Murphy's talk at POPL inspired this overlong rant, and it was kind of inspiring; he certainly had good results and it was a novel and practical use for more hi-tec languages. BUT, it wound me up for a few reasons: it had a hint of preaching to the choir about it; I didn't like the blanket statement (unbacked up) that functional languages are better (which set off the above rant); I didn't agree that functional interefaces to a module imply that the module can naturally be written better in a functional way (there may be internal state that is hard to get rid of, further more at the largest level of abstraction, &lt;span style="font-style: italic;"&gt;everything&lt;/span&gt; has a functional interface, but not all programs can be happily rewritten in a functional language); the result seemed to be that a mess of a program in one language ran like a dog, when rewritten nicely in another language it ran much faster. This seems to miss the point that the rewriting itself (no matter which language was used) would probably result in improved efficency. Basically, a lot of what he said may be both true and impressive, but the implications he drew didn't seem to be warranted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-116998507465556249?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/116998507465556249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=116998507465556249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116998507465556249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116998507465556249'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/01/functional-vs-oo-languages.html' title='Functional vs OO languages'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-116972232320695977</id><published>2007-01-25T10:45:00.000Z</published><updated>2007-01-25T10:52:03.913Z</updated><title type='text'>Arrays considered harmful</title><content type='html'>I've come to the conclusion that arrays are bad. They really have no place in a modern programming language and should go the way of the pointer: being considered an implementation detail.&lt;br /&gt;&lt;br /&gt;The reason is that lists are just simply better: they are more flexible, allow for a wider variety of implementaion, give the compiler more room to optimise, are easier to type (this is probably the best reason here, consider the grief Java arrays cause to the type system), integrate nicely into an object-oriented model, etc, etc. All that is needed is some syntactic support so they are as easy to use as arrays and allow the compiler to optimise lists to arrays as it sees fit (as far as I'm aware this is fairly easy to do). Of course we can still let systems programmers have arrays just as they have pointers, but 99% of programmers should never use them.&lt;br /&gt;&lt;br /&gt;I hope to never have to deal with arrays again (not that I do already), and never have to answer questions about how such and such a feature will work with arrays. If I can type generic collections that should be enough.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-116972232320695977?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/116972232320695977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=116972232320695977' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116972232320695977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116972232320695977'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/01/arrays-considered-harmful.html' title='Arrays considered harmful'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-116967133570731932</id><published>2007-01-24T20:41:00.000Z</published><updated>2007-01-24T20:49:45.100Z</updated><title type='text'>POPL and FOOL/WOOD '07</title><content type='html'>&lt;p&gt; I was privileged to attend the &lt;a href="http://www.cs.ucsd.edu/popl/07/"&gt;POPL&lt;/a&gt; conference in Nice last week, followed by the &lt;a href="http://foolwood07.cs.uchicago.edu/"&gt;FOOL/WOOD&lt;/a&gt; workshop on the saturday. I had a great time (especially enjoying the sunny weather, I managed to fall asleep in the sun on the beach at one point), it was my first 'proper' conference experience and once I got into the swing of things a bit, I really enjoyed talking to lots of interesting and reputable people and soaking up all the brain waves floating around.&lt;/p&gt;&lt;p&gt;Most of the talks were excellent and very interesting, even in topics from which I normally run away from screaming. A lot of the subject matter at POPL was a out of my usual scope and went a bit over my head, and that I was still interested in the talks is a real credit to the presenters. FOOL on the other hand was so spot on, topic wise, that I was pretty much in research heaven. Almost every talk was relevant, interesting and well-presented.&lt;/p&gt;&lt;p&gt;I'll go over some of the talks/papers that interested me below. Links to the papers can be found &lt;a href="http://www.ccs.neu.edu/home/dherman/popl2007.html"&gt;here&lt;/a&gt; or &lt;a href="http://foolwood07.cs.uchicago.edu/program.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;POPL:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Invited talk: Advanced Programming Language Design in Enterprise Software: A lambda-calculus theorist wanders into a datacenter&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  I thought this was going to be inspiring, but actually it was a bit disappointing. In the end it just made me angry and I'll have a rant on the functional vs imperative (OO, more to the point) thing in another post.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Operational Semantics for Multi-Language Programming&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  An interesting (and necessary) idea is how to integrate type systems between programming languages or calculi. This seems like the first paper in a series building up to do this properly, but even so, it is well developed and a good solution to this problem.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Semantics of Static Pointcuts in AspectJ&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Although I loathe aspects from a software engineering prespective, they seem to be fairly hot right now, and they do allow for some nice programming techniques. This is a formalism of the pointcut language of AspectJ as does just what it says on the tin. The use of Datalog as an 'intermediate language' adds a bit of spice to the mixture. I admit to being surprised that somthing like this has not been before.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;A typed Intermediate Language for Compiling Multiple Inheritance&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Again, I'm surprised this hasn't been done before, and, in a way, I wasn't sure why this was so important. But, I think to compiler people it is quite cool. Anyway, I really liked the talk and hope one day to be able to understand the paper as it sounded interesting.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Cork: Dynamic Memory Leak Detection for Garbage-Collected Languages&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Very cool use of profiling/dynamic analysis of programs. I liked the talk because dynamic analysis is something I've not really come across before and profiling and instrumentation stuff has always interested me. I will go back and try to understand the theory in detail, but the intuitive stuff was quite exciting. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Scrap Your Boilerplate with Xpath-like Combinators&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  This really got me thinking. XSLT and Xpath are pretty intersting subjects and there has to be a better way to deal with these and XML in programming languages (in fact its getting a lot of attention at the moment). Other than the motivation the talk and paper were pretty heavy going (at least with my lack of knowledge about FPLs), but I'll definitly be reading the paper in some detail.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Towards a Mechanized Metatheory of Standard ML&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  A 'rather than you than me' bit of research this. It is important and necessarywork, but it looks like really dull stuff to actually do! The talk, though, was far from dull.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Extracting Queries by Static Analysis of Transparent Persistence&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Another interesting paper on integrating queries/databases with programming languages, a bit of a hot topic at the moment, me thinks. The idea here is to use transparent persistence, but extract queries during compilation for the sake of efficency. It sounded like a really good idea and the details seem interesting. Another talk, that 'sucked me in'.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Assessing Security Threats of Looping Constructs&lt;br /&gt;&lt;br /&gt;  &lt;/strong&gt;I enjoyed this talk as the subject matter was interesting from a non-academic perspective. I always find information theory-style stuff quite cool, I don;t really know well. The talk was really well presented too.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Javascript Instrumentation for Browser Security&lt;br /&gt;&lt;br /&gt;  &lt;/strong&gt;Again, an interesting talk due to the subject matter, browser security being relavent to pretty much everyone. The scheme presented here seemed solid and straightforward (in a good way). The complications due to the nature of Javascript were well explained and solutions presented. I was not completely convinced that it dealt with 100% of cases correctly, in the question and answers there seemed a degree of reliance on conservatism and the fact that no legitimate program would use techniques that appeared to be obfuscation. Still, I should read the paper more thoroughly before passing judgement.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;FOOL/WOOD:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Generic Universe Types&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Werner gave a really good talk, reminding me that ownership is awsome, and convincing me that universe types are a pretty good idea. The contribution itself (extending universe types to type parameters) seems very nice: a slight extension to generics and universes that produces an elegant system and some real benefits for the programmer.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Fine-Grained Api Evolution for Method Deprecation and Anti-Deprecation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  This seemed like one of those really useful things that people have been struggling with for a long time. This solution sounds like a good one, although interface evolution seems to be one of those problems that will never be properly solved. Its part of the Scala project so should get some real world testing, I'll be interested to see how it performs in practice. The talk itself was good, and got me interested in something I'd normally just skip over.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Invited talk: Fortress and Object-Oriented Programming&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  It was good to hear about Fortress without all the parallelism stuff that (although important) I'm not really intersted in. The syntax thing wasn't too over-played for a change either. Instead Eric focussed on the object model and related elements. The talk was good and it was nice to see some large scale, real world, innovative language design in action (I've been following Fortress for a while now). Fortress has some interesting ideas in the object model, an (almost) class-less system with traits for reuse and some practical&lt;br /&gt;  looking details. Its looking like a fairly innovative and practical system, although not as radical as it sounded at first.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Variant Path Types for Scalable Extensibility&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  A topic close to my heart, being related to virtual classes and similar mechanisms. The authors have an approach that has classes belonging to classes as opposed to classes belonging to objects (as in Tribe and VC etc.). This approach is attractive because it is simple and does not require a dependent type system, but the loss of flexibilty and expressiveness is considerable. They go someway to addressing that with this paper, the system vastly increases the flexibilty with a simple and low overhead type system (an extension of exact types). It is impressive work, but I can't help thinking that when they work this to its logical conclusion they'll end up with something very similer to the Tribe/VC model....&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;On Decidability of Nominal Subtyping with Variance&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Interesting stuff again, and closely related to my work on wildcards. Andrew Kennedy gave a really good talk on decidabilty for simpler variance systems; starting off with examples that crashed the Java and Scala compilers (good for getting your attention!). The result seemed to be that these systems (pretty much what C# and Scala have) are theoretically undecidable, but are saved by unintentional tweaks in the specifications. How this crosses over to Java remains to be seen.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Formalizing and Extending C# Type Inference&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Probably the best talk of the conference, Gavin Bierman had amazing energy and presentation skills. The talk basically went over his exprience in writing a type inference algorithm for C# 3.0, which to be honest sounded like a nightmare. The reasons for the complications were not obvious and it was interesting subject matter. The future work also sounds tricky...&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Combining Structural Subtyping and External Dispatch&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  This is an idea for combining structural and nominal subtyping. The motivation was good and it looks like an interesting concept, I'd be interested to see how it works out in practice (or at least a more fleshed out theory). Although the syntax looks quite similar to standard OO languages, I think the truth is that there is a big difference arising from the typing that would affect how programs are written etc. I'll be going back and reading the paper in&lt;br /&gt;  detail soon.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;LazyJ: Seamless Lazy Evaluation in Java&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  Not coming from a functional background, I don't really know if lazy evaluation is a good idea for OO languages or practical programming. But, it is an interesting concept, and if it were to be a good idea then this is how it should be done! The language was simple and yet seemed to do everything it needed to; the extensions fitted nicely into Java and the details had been thought through (even though there were a lot of ideas from the audience).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Looking forward to next year already...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-116967133570731932?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/116967133570731932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=116967133570731932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116967133570731932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116967133570731932'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2007/01/popl-and-foolwood-07.html' title='POPL and FOOL/WOOD &apos;07'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-116293875563377755</id><published>2006-11-07T22:19:00.000Z</published><updated>2006-11-07T22:32:35.693Z</updated><title type='text'>Flattening and class tables</title><content type='html'>Brief intro: a class table is (often) used when modelling OO languages to store the details of a class. Sometimes (I can't think of a paper off the top of my head) they store just the same information as is given syntactically in a class declaration. Sometimes (as is normally done with Traits and also in the Tribe paper by Clarke et al.) they do more than this: they store a flattened view of the classes. This means a class in the class table has all the methods and fields it has access to via inheritance. A class C with method m1() that extends a class D with method m2() would be represented in the class table as a method C with methods m1() and m2(). The inheritance hierarchy has been &lt;span style="font-style:italic;"&gt;flattened&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The (uncovered) meat of this post: flattening is cool! First off I think it makes for slightly simpler formal systems, but more importantly it gives a formal defintion of the object model of a language.&lt;br /&gt;&lt;br /&gt;A language's object model is the set of mechanisms (inheritance, trait composition, delegation, etc.) that allow a programmer to define objects and classes and their relationships. It is very often the most interesting part of a language. However, defining a language's object model is quite difficult. We generally resort to a core language that has a minimum of expressions but the important bits of the object model (for example Featherweight Java). Indeed we require such a language to prove type safety and other similar properties. However, the class table gives us a way to describe the object model without the baggage of expressions. The flattened classes are, in a way, the interface of a class - the set of methods and fields that can be called on an object of that class. The syntax of the language corresponds to an implementation - how the programmer can define which classes have which methods and fields in a succint and useful manner. The functions that do the flattening effectively describe the object model as a translation from the syntactic object model to its semantics (the flattened object model).&lt;br /&gt;&lt;br /&gt;That isn't explained very well, but I hope it gives a glimmer of insight into why my formal systems will have flattened class tables in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-116293875563377755?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/116293875563377755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=116293875563377755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116293875563377755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116293875563377755'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2006/11/flattening-and-class-tables.html' title='Flattening and class tables'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-116162255352517643</id><published>2006-10-23T17:48:00.000+01:00</published><updated>2006-10-23T17:55:53.556+01:00</updated><title type='text'>I need a name...</title><content type='html'>Virtual types/classes are very cool. I firmly believe that they are a "good thing" in the world of programming language design. Especially when combined with dependent types and you get the likes of vObj/VC/Tribe. Tres bien!&lt;br /&gt;&lt;br /&gt;However, the trouble is, there are so many flavours: virtual types, virtual classes, nested types, nested classes, nested inheritance, family polymorphism, higher order hierarchies, virtual patterns... I want a name to describe the whole bunch of various flavours where a class or type may occur inside another class or object and there is some kind of inheritance, binding or subtyping between the 'inside' classes or types. Trouble is, all the good names (and permutations of names) have been taken...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-116162255352517643?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/116162255352517643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=116162255352517643' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116162255352517643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116162255352517643'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2006/10/i-need-name.html' title='I need a name...'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36017112.post-116107442560637268</id><published>2006-10-17T09:33:00.000+01:00</published><updated>2006-10-17T09:40:25.613+01:00</updated><title type='text'>Alex Buckley, King of the (Java) world!</title><content type='html'>Friend, former colleague and Imperial alumnus &lt;a href="http://blogs.sun.com/abuckley"&gt;Alex&lt;/a&gt; &lt;a href = "http://notesfromwestlondon.blogspot.com/"&gt;Buckley&lt;/a&gt; is now &lt;a href="http://blogs.sun.com/gbracha"&gt;King of the World&lt;/a&gt;, or at least, the Java spec. This is very impressive, well done to Alex and I'm sure he'll do well. We'll miss Gilad though...&lt;br /&gt;&lt;br /&gt;So, Flexible Dynamic Linking in Java 7.0 then?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36017112-116107442560637268?l=featherweightmusings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://featherweightmusings.blogspot.com/feeds/116107442560637268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36017112&amp;postID=116107442560637268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116107442560637268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36017112/posts/default/116107442560637268'/><link rel='alternate' type='text/html' href='http://featherweightmusings.blogspot.com/2006/10/alex-buckley-king-of-java-world.html' title='Alex Buckley, King of the (Java) world!'/><author><name>Nick Cameron.</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
