Simplified programming model The CLR seeks to greatly simplify the plumbing and
arcane constructs required by Win32 and COM. Specifically, the CLR now frees the
developer from having to understand any of the following concepts: the registry, globally
unique identifiers (GUIDs), IUnknown, AddRef, Release, HRESULTs, and so on. The CLR
doesn’t just abstract these concepts away from the developer; these concepts simply don’t
exist, in any form, in the CLR. Of course, if you want to write a .NET Framework application
that interoperates with existing, non−.NET code, you must still be aware of these concepts.
•
Run once, run always All Windows developers are familiar with “DLL hell” versioning
problems. This situation occurs when components being installed for a new application
overwrite components of an old application, causing the old application to exhibit strange
behavior or stop functioning altogether. The architecture of the .NET Framework now
isolates application components so that an application always loads the components that it
was built and tested with. If the application runs after installation, then the application should
always run. This slams shut the gates of “DLL hell.”
•
Simplified deployment Today, Windows applications are incredibly difficult to set up and
deploy. Several files, registry settings, and shortcuts usually need to be created. In addition,
completely uninstalling an application is nearly impossible. With Windows 2000, Microsoft
introduced a new installation engine that helps with all these issues, but it’s still possible that
a company authoring a Microsoft installer package might fail to do everything correctly. The
.NET Framework seeks to banish these issues into history. The .NET Framework
components (known simply as types) are not referenced by the registry. In fact, installing
most .NET Framework applications requires no more than copying the files to a directory
and adding a shortcut to the Start menu, desktop, or Quick Launch bar. Uninstalling the
application is as simple as deleting the files.
•
Wide platform reach When compiling source code for the .NET Framework, the compilers
produce common intermediate language (CIL) instead of the more traditional CPU
instructions. At run time, the CLR translates the CIL into native CPU instructions. Because
the translation to native CPU instructions is done at run time, the translation is done for the
host CPU. This means that you can deploy your .NET Framework application on any
machine that has an ECMA−compliant version of the CLR and FCL running on it. These
machines can be x86, IA64, Alpha, PowerPC, and so on. Users will immediately appreciate
the value of this broad execution if they ever change their computing hardware or operating
system.
•
Programming language integration COM allows different programming languages to
interoperate with one another. The .NET Framework allows languages to be integrated with
one another so that you can use types of another language as if they are your own. For
example, the CLR makes it possible to create a class in C++ that derives from a class
implemented in Visual Basic. The CLR allows this because it defines and provides a
Common Type System (CTS) that all programming languages that target the CLR must use.
The Common Language Specification (CLS) describes what compiler implementers must do
in order for their languages to integrate well with other languages. Microsoft is itself
providing several compilers that produce code targeting the runtime: C++ with Managed
Extensions, C#, Visual Basic .NET (which now subsumes Visual Basic Scripting Edition, or
VBScript, and Visual Basic for Applications, or VBA), and JScript. In addition, companies
other than Microsoft and academic institutions are producing compilers for other languages
that also target the CLR.
•
Simplified code reuse Using the mechanisms described earlier, you can create your own
classes that offer services to third−party applications. This makes it extremely simple to
reuse code and also creates a large market for component (type) vendors.
•
Automatic memory and management (garbage collection) Programming requires great
skill and discipline, especially when it comes to managing the use of resources such as files,
memory, screen space, network connections, database resources, and so on. One of the
•
10