Sharp Words with Microsoft's Erik Meijer

The architect for the Microsoft SQL Server Group is interviewed about the various research Sharp languages and their impact on future software development and programming.

As part of her reporting into the Microsoft Sharp languages (see "Look Sharp"), author Mary Jo Foley spoke with Microsoft Architect Erik Meijer. After Anders Hejlsberg, the father of C#, Meijer is the most active Microsoft figure associated with Sharp language research.

Meijer, an architect in the SQL Server group, also works with the C# and Visual Basic (VB) teams. Before joining Microsoft, Meijer was an associate professor at Utrecht University, where he worked on advanced scripting languages such as Haskell, XMLambda and Mondrian.

"Most recently [Microsoft Software Architect] Brian Beckman and I are working on reviving the Mondrian project in the incarnation of Visual Basic for the Cloud; our attempt to democratize distributed dynamic data-intensive applications," explains Meijer on his personal Web page (http://research.microsoft.com/~emeijer).

Foley had a chance to ask Meijer a few questions via e-mail. Here's a transcript of their exchange, edited for length.

"It's obvious to me that the various
research
Sharp languages have had an
impact on future
software development
and programming."

Erik Meijer, Architect, Microsoft SQL Server Group

What fascinates you about the Sharp languages?
It's obvious to me that the various research Sharp languages have had an impact on future software development and programming. The nice thing [about] the Common Language Runtime [CLR] is that it provides an ecosystem for a wide variety of languages that can benefit from the class libraries and runtime infrastructure, which makes it much easier for language implementers to experiment with advanced language constructs.

X#/Xen/C Omega has been a major influence on LINQ, C# 3.0 and VB 9. Matt Warren was one of the developers of X#/Xen/C Omega [and] is now an architect on the C#/LINQ to SQL team. I am myself a member of both the C# and VB language design teams. Spec# has generated a lot of great research and has influenced major commercial languages such as Eiffel.

F# is being used for many different areas. Don Syme, the designer of F#, was one of the implementers of Generics in the CLR. LINQ expression trees and comprehensions have influenced the design of F#.

What do you mean when you say, 'the technology also flows in the opposite direction?' Does this mean some of the traditional language features are making their way back into the Sharps?
What I mean is that traditional languages trigger interesting research questions. For example, Gavin Bierman from MSR has recently formalized the type inference rules as implemented in C# 2.0.

Bart Jacobs, Wolfram Schulte and I formalized the use of iterators as introduced in C#. The work on generics has triggered some new research work. Expression trees and query comprehensions originally came from research [with] Haskell to the mainstream C# and VB and from there back to research in F#.

What does the Haskell language have to do with the Sharps, if anything?
I'm one of the designers of Haskell. Haskell is unique among all modern programming languages because it's a purely lazy functional language. Other functional languages such as F#, Lisp/Scheme [and] OCaml all support functions as first class values, but they allow side effects [assignments, mutable variables, exceptions] and use strict evaluation.

In Haskell there are absolutely no side effects, but they're made manifest using so-called 'monads' [which also form the theoretical basis of LINQ] and expressions are only evaluated when needed.

This sounds pretty geeky, but the end result is that the purity of Haskell makes it an ideal test bed for advanced language and type system features -- for example, Software Transactional Memory.

In a nutshell, what's the impact the Sharp languages have had and will continue to have on programming-language futures?
When you design a commercial language like C# or VB, you have to be extremely careful what [you] put in because once something is in the language you can never remove it. Also, in order to be able to actually ship a commercial language, all hard and fundamental research problems should be solved and it should mainly be a matter of engineering to implement the various language features.

Many people don't realize the amount of work it takes to turn a piece of software into a product. Writing the parser, type checker and code generator is the easy part. Then you have to think about the IDE, pretty listing, coloring, the debugger, the project system, Intellisense, error messages, documentation, localization, security ... So the Sharp languages are a great vehicle for experimentation to see which features really stick, sort out the hard problems, try crazy things. From the experience gained by that we can then prioritize which features to put in the mainstream languages.

Will the Sharps have an impact on other software areas or products -- say, databases?
I really hope that there will be much more influence of the Sharp languages to other areas, in particular databases. There's a lot of very interesting theory about using monads or monoids as the basis for query languages instead of relational algebra [the basis for SQL]. Query comprehensions in LINQ are just the first step -- the tip of the iceberg. I'll be lifting a tip of the curtain at the upcoming InfoQ conference in London in March.

With the advent of many core machines on the one hand and the rise of service orientation on the other, I expect that we'll see ideas from research adopted by commercial languages in the future.

About the Author

Mary Jo Foley is editor of the ZDNet "All About Microsoft" blog and has been covering Microsoft for about two decades. She's the author of "Microsoft 2.0" (John Wiley & Sons, 2008), which examines what's next for Microsoft in the post-Gates era.