Today's podcast is from the Microsoft PDC, where Tom Yager and I spoke with Anders Hejlsberg and Paul Vick about the LINQ project. The whitepaper that was handed out at the conference is also available online, and it's required reading for, well, basically everybody who cares about the intersection of code and data. Doesn't matter what programming language you use, doesn't matter what kinds of data you work with, read it through and let it sink in.
I've been on the run for a week, and have two more events to go, so I've had little time to process a great deal of input. But I have transcribed some of Anders Hejlsberg's most useful comments about the larger goals of the LINQ project.
on turning query inside out: It used to be that programming languages were the high order bit. Their runtime libraries were just a few functions, but the big learning curve was the language. But today that has inverted. It's all about the gigantic platform you've got to learn, and then there's a little bit of language on top. And that means that the value proposition is opposite. It actually is way more valuable to us to add query capability to C#, because that gives you the breadth of the platform available in the middle of your query, than trying to build a new platform around query.
on data and programming-model agnosticism: If you imagine a 3x3 quadrant, with the forms of data that are relevant along one axis -- objects and relational and XML -- and all of the programming tiers along the other -- client, business tier, database server -- I want to have an X in every box for language-integrated query, and we're getting close, and I think we can get there.
on life beyond query: What we're doing here with the expression-tree capabilities is that, well, today we have objects and classes with metadata, and we have a whole system for representing programs -- up to the class and member level -- that you can reason about in dynamic applications. And we're extending that infrastructure now with the concept of a platform-wide representation of expressions and queries that you can pass around and reason about and build services around and share. And it's not just for queries, actually, because if you think about it, notification systems, they're going to want an edge trigger expressed as an expression in terms of some free object. Well, this is great for that. Constraints in a database, rules engines, they all need code sort of in free form, and that's the capability at a more abstract level that we're bringing into the platform.
on the value of type inference: A lot of the stuff we're doing here would be a lot easier if you just got rid of the types. Hey, we've got queries, and they just return property bags, and you can say dot-foo and dot-bar, and if they're not there then god knows what happens. Doing it with types, and getting the type inference and the flow of types, is much harder. But once you do it the payoff is much bigger, because you get statement completion, and compile-time type checking, and you get reflection capabilities at runtime.
Former URL: http://weblog.infoworld.com/udell/2005/09/19.html#a1305