VS 2008: The Road Ahead
Microsoft was already well on its way to creating the next version of Visual Studio (code-named "Hawaii") when it released VS 2008. Learn what the future holds for .NET developers.
Technology Toolbox: VB, C#, ASP.NET, XML
Visual Studio releases mark waypoints on a continuum of new components and improved features for Microsoft's premier .NET development toolset. Major changes to .NET languages and object libraries usually require a full-version upgrade, but additional capabilities can be slipstreamed into the current VS version by Web releases and fixes applied with service packs. There's an extraordinary number of new products, services, technologies, programming languages, and platforms currently in development at Redmond and in Microsoft Research facilities in the United States, United Kingdom, India, and China. Many--perhaps most--have dependencies on .NET and thus VS. Here I'll give you brief descriptions of the more important VS 2008 and .NET 3.5-related features and additions that were under development when VS 2008 was released to manufacturing (RTM) on Nov. 19, 2007.
Microsoft Gets Dynamic
ASP.NET team leader Scott Guthrie announced on Nov. 29, 2007, that Silverlight 1.1 will be given a full version upgrade as Silverlight 2.0 because of the number and the significance of new features to be included in its first beta version. Beta 1 is scheduled to drop in 2008's first quarter and will include an upgraded WPF UI framework, a set of "rich controls" with a DataGrid; networking support for REST, RSS, POX, and WS-* protocols and cross-domain access; LINQ to XML; and improved HTML DOM integration. Microsoft will issue GoLive licenses for beta 1, and VS 2008 Express editions will be able to use its toolset.
In a related vein, the Dynamic Language Runtime (DLR) is also under development. The DLR adds several new features to the Common Language Runtime (CLR), including an infrastructure for a shared dynamic type system, standard hosting model, and support for generating fast dynamic code. The DLR gives dynamic languages the ability to share code with static CLR languages, such as C#, VB, and F#, and provides them a sandboxed security model and browser integration for running them on the client. Microsoft first announced the DLR at the April 2007 MIX08 conference and already released early versions of its first two members--IronPython and Managed JScript--as part of the Silverlight 1.1 alpha implementation. IronRuby and Dynamic VB (part of VB 10) will be added later.
The new dynamic languages are at significantly differently stages in their development, but here's a quick summary of where they are now.
IronPython began life as an independent open source implementation of Python for the .NET CLR by Jim Hugunin, who joined Microsoft in August 2004. Microsoft released IronPython 1.0 for VS 2005 on Sept. 5, 2005, under a BSD-style open source license. Version 1.1 for the CLR and 2.0 alpha for the DLR are available from CodePlex under the Microsoft Permissive License (Ms-PL) v1.1 here.
Managed Jscript is not an upgraded version of JScript.NET. Managed JScript is a new DLR-based release that implements the ECMAScript 3.0 feature set and is not open source.
IronRuby is the DLR implementation of the Ruby programming language initiated as the RubyCLR by John Lam, who joined Microsoft in January 2007. Microsoft released a pre-alpha version of IronRuby for .NET 2.0 under Ms-PL v1.1 on July 23, 2007. The initial version also runs under Silverlight 1.1 alpha. Later versions are likely to emulate Ruby on Rails; John Lam wrote in a May 2, 2007, response to a question about his Channel9 podcast with Jon Udell: "Nobody would take our implementation seriously if it doesn't run Rails."
Dynamic VB will be a subset of the next version of Visual Basic, presumably VB 10. VB's architect, Paul Vick, said in May 2007 that the VB team planned to release a community technical preview (CTP) that year. As of this writing, the CTP hadn't appeared.
Microsoft had two significant projects underway at RTM that would affect ASP.NET programmers: ASP.NET Futures and the ASP.NET MVC Framework, which merged into the December 2007 ASP.NET 3.5 Extensions release. According to Scott Guthrie, the Extensions include the ASP.NET MVC Framework, Dynamic Data support, AJAX improvements, and Silverlight enhancements. The Entity Framework and ADO.NET Data Services (formerly code-named "Astoria") will release "in parallel with" the Extensions.
The Model View Controller (MVC) architectural pattern, which originated in 1970s Smalltalk apps, has become increasingly important as a framework for Web apps because it enforces separation of concerns and simplifies unit testing. The ASP.NET team doesn't want to be eclipsed by Ruby on Rails, Monorail, SubSonic, or other MVC-patterned Web development platforms, so it announced on October 14, 2007 the development of an ASP.NET MVC Framework add-in for VS 2008. Scott Guthrie's later, more detailed "ASP.NET MVC Framework (Part 1)" blog post provides a complete description of the MVC Framework's architecture and methodology.
Like the DLR group, the ASP.NET Team has been on a "community leader" hiring binge. They hired famed blogger Scott Hanselman in September 2007 as a senior program manager "to spread good information about developing software, usually on the Microsoft stack" and in the same month Phil Haack (of open source SubText fame) became a senior program manager for the MVC add-in. Open-source SubSonic creator Rob Conery joined the MVC group in mid-November to work full-time on making the SubSonic data access and persistence framework the "convention-driven toolset for Microsoft's new MVC Framework." According to Conery, he'll work "across the hall from Phil Haack," although he'll still live on Kauai. Dynamic Data provides "rich scaffolding support" and the ability to auto-generate data-intensive sites with WebForms and the MVC pattern.
Many enhancements added to the C# 3.0 and VB 9 languages to support LINQ are elements that originated in functional programming languages (FPLs), such as Haskell and Erlang. FPLs emphasize stateless computation by evaluating mathematical functions. This is in contrast to stateful imperative programming languages, such as C# and VB. Generics, lambda functions, and type inference, which are new to the CLR, have always been the primary features of functional languages, which use the lambda calculus as their programming model. F# is a CLR-based FPL that's related to the ML language family and incorporates elements of Haskell, C#, and LINQ. Eric Meijer, called by many the "Creator of LINQ," is a strong proponent of FPLs and has made many contributions to Haskell 98. Don Syme of Microsoft Research Cambridge (U.K.) is spearheading integration of F# as a first-class member of CLR languages with a Visual Studio plug-in that delivers IntelliSense, debugging, and other accouterments expected by users of development platforms. Today FPLs hold more interest for the academic and scientific communities than interest for any industrial or commercial roles. F# is expected to result in many new .NET adherents in academia.
F# will appeal primarily to .NET programmers with a mathematical bent, especially those in the financial and scientific sectors, and everyone who wants to take advantage of Parallel LINQ (PLINQ) and Parallel FX for parallel programming with concurrency management on multi-core machines. If you want to give F# a test drive, download the current distribution and documentation from the Microsoft Research site. Tomás Petricek has written a four-part "F# Language Overview" paper that's available in PDF format.
PLINQ and Parallel FX
Multi-core microprocessors offer the potential to speed execution of complex data-intensive apps, especially those for the banking and financial-services industries, as well as for scientific research. Clock speeds are capped by increasing power consumption, so more cores are needed to improve computing performance. Two-core processors are becoming common for desktops and laptops, and even quad-core processors are now appearing on high-end desktops. The problem is that it's a daunting task to write massively multi-threaded apps to take full advantage of the improved performance promised by multiple cores.
PLINQ offers a quick and easy route to parallel processing of LINQ queries, but is most effective with heterogeneous queries that combine databases, XML documents, in-memory generic collections, or all three. Some third-party LINQ implementations, such as Oren Novotny's LINQ to Streams (SLinq) for streaming data from sensor networks, network monitors, or financial services are logical candidates for parallel processing. PLINQ isn't effective with standalone LINQ to SQL or LINQ to Entities queries, which depend on a database as their data source. To take advantage of PLINQ, you must add a reference to the new System.Concurrency.dll namespace and call the System.Linq.ParallelEnumerable.AsParallel extension method to type your data source as IParallelEnumerable. You can learn more about PLINQ from an article by Microsoft's Joe Duffy and Ed Essey, "Running Queries on Multi-Core Processors," published in MSDN Magazine.
PLINQ is part of the Parallel FX Library that also includes the Task Parallel Library (TPL) for VS 2008 and .NET Fx 3.5 or higher. According to Daan Leijen and Judd Hall, the authors of MSDN Magazine's "Optimize Managed Code for Multi-Core Machines," "The library contains sophisticated algorithms for dynamic work distribution and automatically adapts to the workload and particular machine." However, "the library does not help to correctly synchronize parallel code that uses shared memory. It is still the programmer's responsibility to ensure that certain code can be safely executed in parallel." The authors of both articles expected a Parallel FX Library CTP to release in Fall 2007 but it hadn't appeared when this article was written.
ADO.NET Living in the Cloud
ADO.NET Data Services (also known as "Data Services in the Cloud") exposes a RESTful interface to relational data to simplify Web client data access and update programming. REST is the acronym for Representational State Transfer, an architectural style that most commonly uses Uniform Resource Identifiers (URIs) to represent resources on an intranet or the Internet and communicates with HTTP in a stateless manner. In this case, REST uses HTTP POST, GET, PUT, and DELETE methods to perform CREATE, RETRIEVE, UPDATE, or DELETE (CRUD) operations on one or more resources. The SQL Server Data Programmability Team introduced Astoria as an incubator project at the MIX07 conference in late April 2007. Astoria became a formal development project with the name change to ADO.NET Data Services in early November 2007. The primary goal for Astoria is to lower the barrier to making data available to the Web.
The initial Astoria prototype, posted to the Astoria Online Service site for MIX07, demonstrates four Web-facing data resources called DataServices provided by Entity Framework instances connected to a SQL Server database. The "VS 2008: The MIA Features" article (p. 28) describes the Entity Framework and its belated 2008 delivery schedule. Northwind and AdventureWorks deliver traditional relational data as a hierarchical XML document in response to a query formulated as a URI. The Encarta service returns XML-encoded encyclopedia entries and TagSpace sends social bookmarking tags. In September 2007 the Astoria team released an Astoria Toolkit for creating your own intranet data service with VS 2008 beta 2. The same toolkit also supports connecting to DataServices you create and host on a site Microsoft has set up for developers. Look for an update to the toolkit for VS 2008 RTM when the beta 3 version of the Entity Framework becomes available, probably in January 2008.
Democratizing the Cloud with ‘Volta'
Eric Meijer is busy developing LINQ 2.0, an incubator project code-named "Volta," in an Advanced Data Programming and Language Team named "Tesla." Volta's objective is to enable ordinary programmers to "concentrate on the essential aspects of building distributed and mobile applications such as partitioning and flowing code and data across tiers, deployment, security, etc., without getting bogged down in low-level details." The way to do this, according to Meijer's "Democratizing the Cloud" paper for the OOPSLA 2007 conference, is to start all Web projects as client-tier apps and refactor them automatically as distributed client, middle, and data tiers. Refactoring requires that you use the same computational model (the CLR's MSIL) across all tiers and the same query model (LINQ) across the three tiers. Once you implement and test the client-tier, you tier-split the programs automatically by a combination of compiler-generated declarative attributes and refactoring in the IDE. Tier-splitting is an irreversible process, so the key is to tier-split the project at the last possible moment.
Volta is the most far-reaching of all future components described in this article. A concrete implementation of Volta emerged from the incubator in early December 2007 on Microsoft's Live Lab's Volta site. According to Meijer, "We've made very good progress in turning ideas into working code. In particular, the declarative tier splitting is really cool."
Microsoft dev projects have gained notoriety because of the way features fall out along the way for a variety of reasons. The most recent catastrophic failure was WinFS, which went from being a main pillar of Longhorn, as originally discussed, to missing in action. However, it seems to me that the platforms, components, and technologies described here are "keepers," as illustrated by Astoria moving from an incubator project to a product with a sizable management infrastructure in a few months and the Volta technical preview's arrival ahead of schedule. It remains to be seen how Volta will fare, but Erick Meijer's success with productizing LINQ bodes well for Volta's future. There are enough new VS 2008-related projects in the hopper now to keep .NET developers busy testing them for at least the next couple of years.