LINQ is getting hotter and hotter. Just announced on the PDC, and now Danny is blogging about it.
Language Integrated Query seems to be the biggest feature of upcoming C# 3.0. Searching for LINQ resources I have found The LINQ Project whitepaper written by Don Box (that used to love COM) and Anders Hejlsberg (The Architect). This is definitely not for beginners. There are some cool features like type inference. Eventhough the C# language remains strongly typed, a programmer can define a variable without a type declaration. Cool. Wonder what will be Delphi syntax for this. To understand LINQ, one have to understand .NET 2.0 concepts like generics, anonymous methods. This MSDN Mag article explains anononymous methods very clearly.
If your not super geek, you’ll probably find this LINQ Lab more useful. Step by step instructions with very good background information.
Compilers shield programmers from complexity, and this process continues. We can be more productive as programming language syntax becomes more compact. Good example of this are Lambda expressions, which “are the natural evolution of C# 2.0 anonymous methods”. But the machinery behind it becomes more and more difficult to understand for a common programmer. Does a programmer care what kind of compiler magic is she or he using? I bet you need to care about it. While writing source code you want to have some intuition how it is going to behave at runtime. In .NET you often think: will it involve boxing and unboxing? Should I use a StringBuilder instead of a string?
And the gap is growing. The next big thing to tackle is hiding a complexity of concurrency from programmer. Danny in this interview says that:
The problem with multithreading today is that it is all manual, the programmer has to do everything. The name of the game for tools is to present a simplified model that is automatic and just takes care of the details.
I wonder what is the relationship between LINQ and the Cω project (“C-Omega“):
Cω is a strongly typed, data oriented programming language that bridges the gap between between semi-structured hierarchical data (XML), relational data (SQL), and the .NET Common Type System (CTS). In Cω, the seemingly different worlds of XML, SQL and CTS are bridged and connected through generalization, not specialization.
Besides data integration, Cω extends the C# programming language with new asynchronous concurrency abstractions, based on the join calculus. The language presents a simple and powerful model of concurrency which is applicable both to multithreaded applications running on a single machine and to the orchestration of asynchronous, event-based applications communicating over a wide area network.
It looks like the first objective has already been met by the LINQ project.