What do you think of the upcoming language F#, which is touted as a fusion of a functional language and C#?
I’m very enthusiastic about F# and the work that Don Syme from Microsoft Research in Cambridge is doing on this language. I wouldn’t say it’s a fusion of ML and C#. I mean, certainly its roots come from the ML base of functional programming languages, and it is closely related to Caml. I view it as a fusion of Caml and .NET, and a great impact of tooling experience.
Do you think that it’s ever going to become a large competitor to C#?
I think they are both great and very complimentary. A competitor, yes, in the sense that VB is a competitor. But do you think of them as competitors? Or do you think of them as languages on a unified platform? I mean, I don’t personally: to me, the important thing is what’s built on top of .NET. Every language borrows from other languages, but that’s how we make progress in the industry and I’m interested in progress.
What do you think of functional programming in general?
I think that functional programming is an incredibly interesting paradigm for us to look at, and certainly if you look at C# 3.0, functional programming has been a primary inspiration there, in all that we’ve done with LINQ and all of the primitive language features that it breaks down to. I think the time has finally come for functional programming to enter the mainstream. But, mainstream is different from taking over the world.
I definitely think that there is a space for functional programming today, and F# is unique in being the first industrial strength functional programming language with an industrial strength tooling language behind it, and an industrial strength platform underneath it. The thing that’s really unique about F# compared to all of the other functional programming languages is that it really offers first class support for object oriented programming as well, and first class interoperability with the .NET framework. Anything we have in the .NET framework is as easy to use from F# as it is from C# as it is from VB – it does not feel forced.
A lot of functional programming languages have lived in their own little world, and they’ve been pure and mathematical and so forth, but you couldn’t get to the big library that’s out there. If you look at languages today, they live and die by whether they have good framework support, as the frameworks are so big and so huge and so rich that you just cannot afford to ignore them anymore. And that’s why you’re seeing so many languages being built on top of .NET or on top of Java as opposed to being built in their own little worlds.
How do you feel about C# becoming standardized and adopted by Microsoft?
If you’re asking from a personal perspective, I think it’s fantastic. I’ve been super fortunate to have Microsoft give me the opportunity to be the chief architect of a programming language and then have the company put its might behind it. That’s not an opportunity you get every day, and it’s been great.
With respect to standardization, I have always been a strong supporter of standardizing the language and I have always felt that you can’t have your cake and eat it too when it comes to expecting a language to be proprietary and also wanting community investment in the language. Be proprietary, but then just don’t expect people to build stuff on top of it. Or, you can open it up and people will feel more comfortable about investing.
Now, you can argue that we’re not obviously open source or anything, but the language is standardized, and the entire specification is available for anyone to go replicate. Mono has done so, and I think Mono is a fantastic thing. I don’t know [if] you’re familiar with Mono, but it’s an implementation of the C# standard and the CLI standard (which is effectively the .NET standard) on Linux, built as an open source project. And they’re doing great work and we talk to them a lot and I think it’s a super thing.