InfoQ

News

The Future of Microsoft .NET Programming Languages

Posted by Jon Arild Tørresdal on Jan 16, 2009

Community
.NET
Topics
Language
Tags
Microsoft ,
C#

Looking at the current trends within programming languages targeted at the .NET platform specifically, a few things are showing up at the horizon. During PDC2008 many of Microsoft’s thoughts around .NET and programming languages were revealed,  which makes it interesting to look into the future of .NET.

The .NET platform started with C# and VB.NET running on the Common Language Runtime (CLR). The CLR is an implementation of the Common Language Infrastructure (CLI) specification. The CLI specification can be implemented by anyone wanting to create a new language, allowing developers to choose from a broad set of programming languages. On December 10th 2008 Microsoft released version 0.9 of the Dynamic Language Runtime (DLR) built on top of the CLR, allowing language developers to create dynamic languages for the .NET platform as well.

Some of these languages are developed and maintained by Microsoft, like C#, VB.NET and F#, but most of them are being created in the community as open-source projects. Some of the better known open-source languages are IronPython, IronRuby (both dynamic) and Boo (static). The two first ones are actively being developed at Microsoft as open source projects and are based on the two existing languages, Python and Ruby. Boo has been around since 2003, created by Rodrigo B. De Oliveira and is still actively being developed. You can find a more complete list of .NET languages in Wikipedia.

To find out where the .NET languages are headed, the natural first place to look is to what Anders Hejlsberg (creator of C#) says about the future of C#. In the previous versions of C# Microsoft focused on Managed Code (C# 1.0), Generics (C# 2.0) and then Language Integrated Queries (LINQ) (C# 3.0). Looking forward to C# 4.0, coming soon with Visual Studio 2010, the main focus is Dynamic programming. In his talk at PDC2008, Anders spoke about current language trends:

I think they fall into three large buckets. The first one being this move that we see toward more declarative styles of programming. The next one being the sort of resurgence we’ve seen over the last few years over dynamic programming languages and how that influences us, and then last but not least the coming multi core inflection point if you will.

The thing that to me is interesting about these trends is that, the über trend of it all if you will, is that I think the classical taxonomy of programming languages are starting to break down. Where we traditionally would categorize a language to be object oriented, functional, dynamic or structured, we’re increasingly seeing languages borrowing from each other. I really think the new paradigm in a sense is multi paradigm.

This explains why C# has elements of Declarative programming (LINQ) and Dynamic programming (the dynamic keyword in C# 4.0).

In an earlier interview with Anders and Guy Steele about concurrency and language design, Anders points out that:

We already have an existing programming language called C# and now concurrency is happening to us, so now we got to think about what that means. I think a lot of the work with C# 3.0 and LINQ is pretty relevant to the concurrency phenomenon. Like having things like lambda expressions and the other stuff that we’ve added, makes it possible to build higher order kinds of API’s.

We’re sort of lacking mechanisms in the language to control side effects or to call attention to them. It would sure be nice to have language support for pure functions and a formalization of immutable data, and possibly support for isolation in some form where you can in the compiler reason about whether an object has been revealed to anybody else. As long as it hasn’t and you’re dealing with it in a local variable then it is actually safe to mutate.

In relation to concurrency there is a project going on at Microsoft called the Parallel Computing Initiative. S. Somasegar, Senior Vice President Developer Division, in a Q&A paper, recently talked about what to expect in Visual Studio 2010:

This will include new .NET Framework libraries such as the Task Parallel Library (TPL) and Parallel LINQ (PLINQ), as well as the Parallel Pattern Library (PPL) and Concurrency Runtime for developing native applications with C++ and parallel profiling and debugging tools.  Microsoft is also making ongoing investments in the .NET Framework through the addition of new functionality in Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF).

This project is a natural place for Microsoft to get feedback on which changes are needed on the .NET programming languages in order to easier support concurrency. Moore’s law is still applicable for transistor density, but not for CPU speed (GHz), so the need to go parallel will not go away. Of course, Microsoft knows this and has some major challenges to solve together with the other language implementers working in the same space. More likely this will be the next step for languages like C#.

Talking about programming languages on the .NET platform often brings up the topic of VB.NET vs. C#. Anders talks about a Co-Evolution between C# and VB.NET:

…when we try to do a different feature in one, the other group wants it too. The reality is that co-evolution is the right way to evolve these languages.

To conclude, there is no doubt that concurrency will be the next big thing. Dynamic coding possibilities will show up in C# 4.0, but one would expect more to come in future versions. VB.NET is promised to co-evolve with C#, allowing the two languages to be syntactically different but give the same output. There will be a much greater availability of dynamic languages to the main stream in the coming years with the DLR shipping with Visual Studio 2010 and with the availability of IronPython and IronRuby.

Microsoft .NET and Azure platform presentation by Haytham El-Fadeel Posted Jan 16, 2009 10:32 AM
  1. Back to top

    Microsoft .NET and Azure platform presentation

    Jan 16, 2009 10:32 AM by Haytham El-Fadeel

    See my Microsoft .NET and Azure platform presentation presentation

    www.hfadeel.com/Blog/?p=111

Educational Content

Brian Marick on 4 Challenges and 5 Guiding Values of Agile Software Development

Brian Marick takes us through a quick tour of the most important values and challenges to adopting Agile successfully (they aren't the typical challenges and values we hear in the community).

Are You a Software Architect?

The line between development and architecture is tricky. Does it exist at all? Is an ivory tower actually needed? There's a balance in the middle, but how do you move from developer to architect?

Agile – A Way of Life and Pragmatic Use of Authority

The word 'authority' sometimes produces an allergic response in hard-line agilists. Freedom and authority – both are bad if misused and both are good if used in right spirit for a noble cause.

Getting Started with Grails, Second Edition

"Getting Started with Grails" brings you up to speed on this modern web framework. Companies as varied as LinkedIn, Wired, and Taco Bell are all using Grails. Are you ready to get started as well?

Using ITIL V3 as a Foundation for SOA Governance

Those familiar with only ITIL V2 often scoff at the thought that ITIL could serve as a governance framework for SOA. With ITIL V3, the focus of the framework shifted towards service-orientation.

Adrian Colyer on AspectJ, tc Server and dm Server

SpringSource CTO Adrian Colyer discusses AspectJ, SpringSource's dm Server and tc Server products, OSGi and Scrum.

Adam Wiggins on Heroku

Heroku's Adam Wiggins talks about Rails, Background Jobs, Add-Ons, Ruby, and how Heroku manages to work around Ruby's inefficiencies using Erlang and other languages.

SOA as an Architectural Pattern: Best Practices in Software Architecture

For Grady Booch the foundation of a good architecture is patterns, SOA being just one of many patterns. In this Second Life presentation, Booch attempts to bring more clarity on what architecture is.