Saturday, September 27, 2003

It touches on many of the fascinating aspects of distributed filesystem design - and has some truly mindboggling numbers: for example, one of their production clusters has over 300 TB of data in it. Definitely recommended reading!

In this article on Java 1.5 Stephen Jungels is discussing some alternatives to the keywords added in Java 1.5 for iteration over collections (think "foreach"), generics (think "") etc.

The main issue at stake is how to extend an existing language with new keywords witout breaking backwards source-code compatibility.

The mainstream school of programming language design seems to be keep keywords in the same namespace as variables. As a consequence, adding new keywords risks breaking old source code.

A notable exception here is Perl which keeps keywords an variables in separate namespaces.

This is a brilliant solution but the heavy use of $, %, and & does make Perl code a somewhat outlandish to read, compared to the mainstream languages.

As always: there is more than on way to do it!

Protocol and file-format design involves the same kind of problems. However, most well-designed protocols with a long life-time include a version field in the header. This way, they trade more complex software (in the language case, this would be compilers) for not breaking existing implementations.

I belive programming language design could learn from this. Just like we are versioning our components in .NET, we should be adding a version information to the source files as well. This way, any source file could declare, "I am Java 1.4" and the v1.5 compiler would automatically know that a new v1.5-keyword should be interpreted as a variable in the v1.4-context, not as a keyword.

It would also allow tools to easily identify problem spots and assist in porting old code to the new version of the language. In many cases, it could probably be done automagically.

A further benefit of declaring the language version in the source file is that it allows language designers to change the semantics of existing constructs without breaking backwards compatibility either. This is something even Perl cannot do today.

Of course, adding a versioning keyword might break existing code - but you can't have it all. It is, however, worth to keep in mind when evolving existing languages, or designing new ones.

Thursday, September 25, 2003

Most anthropologists go off to remote parts of the world to live among exotic tribes, observe their behaviour and ask endless questions in order to understand and explain their strange customs. In 1992, the BLRA asked the experienced social scientists at SIRC to apply the same research techniques in the British pub.

Our first task in the preliminary research for this project was to find out how much tourists knew about pub etiquette. Not surprisingly, given the lack of information available, we found that what tourists didn’t know about pub etiquette would fill a book. This is the book.

Wednesday, September 24, 2003

Gene Callahan of the Ludwig von Mises Institute has published an eloquent essay on the restricted versus free trade covering many of the usual arguments pro et contra. Free Trade… or Foul? by Gene Callahan.

"I have sympathy for the plight of people whose interests have been hurt by foreign competition. If I had a friend in such a position, I would do what I could to help him. But when those so hurt contend that they should be able to employ the law to deny me the opportunity to freely trade with anyone I wish, my sympathy for them evaporates. At that point, they have become extortionists. If I could persuade the government to allow people to buy my book and no others, I probably could make more money from it. After all, why should I need to endure competition from low-wage foreigners like Homer, Dante, and Shakespeare?"

Gizmodo : The gadgets weblog. The name says it all. While googling for a new widescreen laptop I came across this weblog which looks like a great read for gadgeteers. I am sure Kristian and Anders will love it.

Tuesday, September 23, 2003

Jay Lee has written a piece on using an RDBMS for massive multi-player on-line games. It is very extensive, providing a catalogue of best practices and things to remember. It is a good read and mirrors many of the things we learned while building the Realtime mobile game platform - so I guess it saves me the effort of writing a piece on that.

Note his position on doing proper relational database design - it is evident that he understands the power of the relational model and the fallacy of the sirens' call of trying to optimise performance through database de-normalisation. His advice is simple and apt: "don't do it!".

Monday, September 22, 2003

The Coco/R for C# compiler generator (think lexx/yacc) looks quite interesting. It has more features than old-school lexx and yacc. For example, it has the capability to specify comments easily:

COMMENTS FROM "/*" TO "*/" NESTED
COMMENTS FROM "//" TO eol

Seeing this tool reminds me of an old computer science saying, "you need a compiler more often than you think". Compiler generators definitely make a lot of things easier - come to think of it, it would be interesting to see if I could reduce the lines-of-code count in my email proxy server by implementing the protocol parser using this tool.