November 8, 2002
Microsoft chose the venue of the OOPSLA conference
, being held this week in Seattle, to reiterate what company officials called "Microsoft's commitment to computer science" and to announce important upgrades to the Visual C++ and Visual C# languages. In separate keynote presentations yesterday and today, Anders Hejlsberg and Bill Gates discussed innovations in programming languages as a springboard to the announcements of several new features that will bring both languages closer to developers' needs.
The upcoming version of Visual Studio (code-named Everett and planned for release in the first part of next year) will include four major enhancements to Visual C++.NET, including 98 percent conformance to the ISO standard. C#, too, will get four major feature enhancements in its next release.
[Editor's Note (Friday, Nov. 8, 10:30 p.m. PT): The original version of this story erroneously reported that the new features of C# would be released with "Everett." Only the Visual C++ language enhancements are scheduled for release with that product. ]
DevX spoke to Prashant Sridharan, Product Manager for the Microsoft Visual C# .NET team, and Nick Hodapp, the Visual C++ .NET Product Manager to get some early details on the new features.
New Visual C# Features
Briefly, the four new C# version features are:
Generics: Similar to the concept of C++ templates, generics let developers create strongly-typed collections, such as an ArrayList of integers, more easily. Currently, the base collection classes that ship with the framework accept Object typeswhich allow developers to write their own strongly-typed collection classes by inheriting from the abstract CollectionBase, NameValueCollectionBase, and DictionaryBase classes. However, doing so requires writing explicit code, both to identify each object type stored in the collection and, when extracting values from the collection, to cast the stored Object variable back into the appropriate type.
In contrast, generics are built into the language; in fact, says Sridharan, they're built into the next version of the framework itself, and thus accessible to any language that wants to use them. Sridharan said "surfacing" the feature in any particular language requires a certain amount of code; it's not automatic.
C# is the first .NET language to make the new feature available. It's unclear whether Microsoft will update other languages to implement the feature, although from the number of newsgroup requests about creating strongly-typed collections in VB.NET, one might reasonably expect that the VB.NET team is at least considering it.
this.Click += new EventHandler(sender, e)
// code to handle click event here
}; // end of anonymous method
Note that the method that handles the eventthe new EventHandler is unnamed, or anonymous. Without anonymous method capability, your code would look more like this:
this.Click += new EventHandler(OnClick);
private void Click(object sender, EventArgs e)
// code to handle click event here
Not only is the first version shorter, but it's also dynamic; you can change the method body depending on the program state.
Partial Types: This feature allows a team of programmers to split large classes containing lots of code into multiple files. Without this capability a team would have to use source code management features such as check-in/check-out and merge changes for multiple programmers to work on a single class; with partial pipes, each team member can work on a separate part of the class, and the system will handle merging the separate code files back into a single class at compile time.
Iterators: Iterators simplify the process of building classes that support the C# foreach iteration syntax, absolving programmers of the requirement to implement the IEnumerable interface to enable simple iteration.
New Visual C++ .NET Features
Visual C++ .NET has also been given an overhaul. February 2003 marks Visual C++'s 10th birthday, and the venerable language will gain several new capabilities in the upcoming version.
RAD Windows Forms: C++ developers using Visual Studio .NET will gain RAD form-building capability equivalent to that long enjoyed by Visual Basic (and lately Visual C#) developers.
98 percent ISO Conformance: Even more important, Hodapp says that the new version of Visual C++ conforms to the ISO C++ specification at around the 98 percent level, which is a huge improvement over previous versions. The current version of Visual C++.NET is only 90 percent conforming, said Hodapp.
"We really expect that we'll be turning a lot of heads in the C++ community. There's between 15 and 20 areas in the standard that we have to address [to achieve this]," said Hodapp.
Defensive Programming: The new version improves and assists developers writing secure code. Hodapp said that Microsoft has attempted to give developers the same C++ tools for defensive programming that Microsoft uses internally. The currently shipping version of C++ has a buffer security check feature (GS switch) that checks code against a built-in repertoire of security attacks and can provide warnings of potential weaknesses. The new version improves on that feature with a greatly expanded set of known security vulnerabilities, and can also work with Windows itselfspecifically, Windows .NET serverto recognize types of attacks that would otherwise be impossible to detect.
Improved Performance: Finally, the new version has "G7" performance enhancements that allow programmers to compile applications targeted explicitly for newer chipsets, such as AMD's Athlon, and Intel's P4. Hodapp said "[programmers] can expect to see a 5 to 10 percent performance increase" by using the G7 features. Some of the increased performance occurs because of the compiler's ability to take advantage of ARCH SSE, or SSE2, which improves floating point throughput.
How will Visual C++'s new capabilities affect your existing code? Hodapp said "Impact on existing code is pretty small. We strove to enable the compiler to continue to build existing code. Any new feature that would break existing code we made so you can turn it on and off. The majority of the features we implemented are new, so existing code doesn't use those features and won't be affected by their presence. In our own tests against large volumes of code, we believe the Everett compiler will break less than 1 in 16,000 lines."
At publication time, Microsoft was still making final modifications to a series of whitepapers about these features. When completed, the documentation will be available for download at www.csharp.net.