Wednesday, April 28, 2010

Russian government uncovers secret documents related to Katyn

The scanned originals are here on the RusArchives site (in Russian). That's big. The Poles should've discovered those natural gas deposits of theirs earlier, I say -- these documents would've been public for years now.

Guido van Rossum and David Pollak on Scala

There's an insightful blogpost and thread followup on Guido van Rossum's blog from 2008 on Scala. Guido skims through the Programming in Scala book and comes out nonplussed:
I have to agree with Steve -- if this is what it takes to have compile-time type-safety in a language, I'll take dynamic typing any day. There's got to be a better way -- perhaps Haskell? Haskell is a pure functional language with a fast implementation that seems to have solved the I/O problem of functional languages well -- while its Monads are truly deep and take real work to create, their use seems quite straightforeward.

Perhaps my biggest disappointment in Scala is that they have so many rules to make it possible to write code that looks straightforward, while being anything but -- these rules all seem to have innumerable exceptions, making it hard to know when writing simple code will work and when not.
David Pollak, the guy behind Lift web framework then makes a valuable point that I think I agree with very much. Scala is about tradeoffs, and getting the compiler involved in validation of your library design while keeping the glue code / code that uses the library pretty and transparent.
Unlike any other language I've used (C, C++, Objective-C, Java, Ruby, etc.), the kind of thinking I have to do as a library consumer and library producer are radically different.

As a library consumer, I rarely concern myself with Scala's type system... or most of the other language complexities. My consumer code looks and feels a lot like my Ruby code did. I've got great DSL support. For the most part, the types that the compiler doesn't infer are the ones I need to document anyway. But, unlike my Ruby code, I only need 50%-60% test coverage (vs. 95% coverage) to have stable, deployable code.

As a library producer (http://liftweb.net), I spend a lot of time reasoning about the types of parameters. This allows the compiler to flag illegal types (e.g., passing an Int into a query against a VARCHAR column). The type system also allows me to reason about my code and how the consumers will use my libraries in a way that I could not do in any other language I've ever used.