How C#, F# and other experimental programming languages are driving next-generation development.
- By Mary Jo Foley
The "Sharps" -- a growing group of programming languages that build on top of the .NET Common Language Runtime (CLR) -- aren't just a bunch of science-project offshoots of Microsoft's C# language. Rather, they are barometers of how and where languages are evolving, according to both theoretical and pragmatic developers.
A#, F#, J#, Sing#, Spec# and X# (now known as C Omega) all have their devotees. Regardless of individual loyalties, "the various research Sharp languages have had an impact on future software development and programming," says Erik Meijer, an architect
in Microsoft's SQL Server group and one of the key driving forces behind
The granddaddy of the Sharp languages is C# (pronounced "C Sharp"), Microsoft's object-oriented alternative to Java. But some of the other Sharps, such as C Omega, have emerged as driving forces behind Microsoft's next-generation tools. C Omega has influenced C# 3.0, Visual Basic (VB) 9.0 and LINQ, Microsoft's Language Integrated Query technology that will be part of the "Orcas" release of Visual Studio. (Orcas is expected to ship in the late-2007 or early-2008 timeframe.)
"Over time, many of the most useful features of the experimental research languages migrate into the mainstream languages, such as C# and VB," Meijer says. "However, the technology also flows in the opposite direction. There's a very interesting pump of ideas and people flowing between research and product development."
'Kick the Tires'
Meijer is not alone in his beliefs regarding the significance of the Sharps.
While the Sharps "are purely R&D languages and will most likely never see commercial life, they are good places for Microsoft to kick the tires of new features and technology, and then those will make it to C#," says Stephen Forte, chief technology officer and cofounder of Corzen Inc., a New York City-based consulting firm. (Forte also is a Microsoft Most Valuable Professional (MVP) and Regional Director.) "So if you want to see what C# may look like in five years, take a look at X#, F# and the other [Sharps]."
Cross-pollination of commercial languages and the Sharps is a growing phenomenon, agrees Joel Spolsky, cofounder of Fog Creek Software and a well-known commentator on software development (via the http://www.joelonsoftware.com blog).
"Historically, there have been two separate tracks in programming language design. The academic track, which includes Lisp, Pascal, ML, OCaml, Haskell, etc., came out of computer science researchers. The practical track, which includes languages like C, C#, Perl, Python and Ruby, came out of working software engineers," Spolsky says. And, "the practical languages often do things the hard way, because they're not paying attention to the inventions of the computer scientists."
"Working programmers have a long history of ignoring Lisp and OCaml, and I don't see that changing now just because it's called F#. What's more likely to happen is that mainstream languages slowly absorb some of the things that were invented 20 or 30 years ago in academia," Spolsky adds.
In Search of the Silver Bullet
The Sharps are "all different attempts at solving the age-old issue of developer productivity and software project backlog. Each language is taking a crack at it in its own way," says Visual Basic expert Jackie Goldstein, founder of Renaissance Computer Systems Ltd., based in Hashmonaim, Israel.
"F# is trying to revitalize [and] modernize functional programming. [C Omega] is recognizing the fact that in today's XML-driven world, we often care a lot more about the data than about the step-by-step algorithms, and therefore a modern programming language should be data-driven. Spec# is trying to take a more theoretical approach, with an emphasis on verifiability," explains Goldstein, a Microsoft Regional Director and MVP.
"I think the Sharp languages are trying to find the silver bullet of productivity for programming languages," Goldstein says, adding: "I've come to the conclusion that there isn't going to be a silver bullet or even a quantum improvement at the language level. I believe that the really significant productivity improvements need to come from the tools and environment, not the language."
There are some coders who are using one or more of the Sharps for their daily development chores. Dominic Cooney, a software engineer at Google's Kirkland, Wash., subsidiary -- and a former Softie who worked on the Office and Connected Systems teams -- is one such developer. Cooney was introduced to F# back in 2004, when he needed to generate Microsoft Intermediate Language (MSIL), the instruction set generated by .NET compilers from .NET languages.
"The best library at the time -- and still the best, I think -- was an OCaml library, AbsIL, that was also the back-end for the F# compiler," Cooney says.
At the moment, the F# project garnering most of Cooney's attention is the compiler for a research language, known as GPSL, which is a concurrent language with direct support for Web services and embedded XML query, he says.
But, as "F# is my language of choice for programming on Windows, pretty much any Windows programming I do is in F#," Cooney notes. "F# is easy to write and read because it's succinct. F# type inference makes it easier to write programs. You get all the benefits of static type checking, [like] finding mistakes early, and a lot of the benefits of dynamic languages: clean syntax, not having to puzzle over names for types.
"In short: I find programming in F# quicker, simpler and more powerful than anything else, and it plays really nicely in the .NET world," Cooney says.
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.