Technical Reports and White Papers |
![]() |
This page features a variety of white papers and technical reports that address elements of the .NET Framework and its associated languages and compilers.
In addition to these independent papers, we are pleased to feature the entire proceedings of BABEL'01: First International Workshop on Multi-Language Infrastructure and Interoperability, held in Firenze, Italy on September 8, 2001. The proceedings include the following:
Document readers are available from the Additional Resources page. See the Contributors page for information on the authors of the materials contained herein.
| Author: | Damien Watkins Sebastian Lange |
The fundamental features in the Microsoft .NET Framework security system are profiled, including the ability to confine code to run in tightly constrained, administrator-defined security contexts for a dynamic download and execution, and remote execution, model.
| Author: | Andrew Kennedy Don Syme |
The Microsoft .NET Common Language Runtime provides a shared type system, intermediate language and dynamic execution environment for the implementation and inter-operation of multiple source languages. In this paper we extend it with direct support for parametric polymorphism (also known as generics), describing the design through examples written in an extended version of the C# programming language, and explaining aspects of implementation by reference to a prototype extension to the runtime.
Our design is very expressive, supporting parameterized types, polymorphic static, instance and virtual methods, "F-bounded" type parameters, instantiation at pointer and value types, polymorphic recursion, and exact run-time types.
Early performance results are encouraging and suggest that programmers will not need to pay an overhead for using generics, achieving performance almost matching hand-specialized code.
Over the past five years, Microsoft has worked with other computing industry leaders to create and standardize a set of specifications for a new model of distributed computing called XML Web services. Already there are hundreds of customers deploying and running XML Web services and thousands more in the process of development. XML Web services standards, which include SOAP, XML, and WSDL, provide a high level of interoperability across platforms, programming languages and applications, enabling customers to solve integration problems easily.
But as XML Web services solutions become more global in reach and capacity – and therefore more sophisticated – it becomes increasingly important to provide additional capabilities to ensure global availability, reliability and security. Recognizing the need for standardizing these additional capabilities, Microsoft has released a new set of specifications that are the beginning of the Global XML Web Services Architecture. The aim of this architecture is to provide additional capabilities to baseline XML Web services specifications. The Global XML Web Services Architecture specifications are built on current XML Web services standards. Microsoft intends to work with key industry partners and standards bodies on these and other specifications important to XML Web services.
This paper outlines the state of XML Web services today. It demonstrates the need for a set of additional capabilities as companies deploy XML Web services to support increasingly sophisticated business processes. Finally, it addresses how Microsoft is beginning to address the need for additional capabilities with the Global XML Web Services Architecture and its supporting specifications.
| Author: | Tim Landgrave Scott F. Wilson |
Recent inter-process communication standards for Web-based systems have improved information and application portability along with cross-organizational and cross-application interoperability. These new standards provide an evolution in distributed application architecture based on Web Services. The creation of Web services and the deployment of its application infrastructure are enhanced by the implementation of an ECMA-based Common Language Infrastructure (CLI). The CLI incorporates these Web service standards and links the growing need for multiple programming language support to the adopted concepts of virtual execution engines.
| Authors: | Daniel Rubiolo J. D. Meier Edward Jezierski Alex Mackman |
En este artículo se describe cómo nuevas tecnologías, nuevas herramientas y nuevos enfoques para el desarrollo de aplicaciones permiten el cambio a un modelo de computación distribuida basado en Internet. Asimismo, analiza las condiciones del mercado y los avances tecnológicos que han sentado las bases para .NET.
| Authors: | Daniel Rubiolo J. D. Meier Edward Jezierski Alex Mackman |
This article describes how new technologies, new tools, and new approaches to application development are allowing a shift to an Internet-based distributed computing model. It also discusses the market conditions and technology advancements that have provided the foundations for .NET.
| Authors: | Daniel Rubiolo J. D. Meier Edward Jezierski Alex Mackman |
Este artículo describe las tecnologías que constituyen la plataforma .NET y las ventajas que ofrecen a los desarrolladores.
| Authors: | Daniel Rubiolo J. D. Meier Edward Jezierski Alex Mackman |
Este artículo examina lo que significa la visión Microsoft .NET para profesionales de tecnología y de negocios y para el futuro de las aplicaciones de software. Describe la visión .NET y explica las ventajas competitivas que brindará a los negocios.
| Authors: | Daniel Rubiolo J. D. Meier Edward Jezierski Alex Mackman |
This article examines what the Microsoft .NET vision means to business and IT professionals and to the future of software applications. It describes the .NET vision and explains the competitive advantages it will bring to businesses.
| Authors: | Daniel Rubiolo J. D. Meier Edward Jezierski Alex Mackman |
This article describes the technologies that constitute the .NET platform, and the advantages they bring to developers.
| Author: | Erik Meijer Nigel Perry Jason Smith |
Mondrian is a modern purely functional language that is specifically designed to leverage the possibilities of the .NET framework. It brings powerful algorithmic expression and scripting techniques to the .NET programmer. For web programmers Mondrian introduces groundbreaking multi-language ASP.NET, where both C# and Mondrian code can be included on the same page. Mondrian is available to run under Visual Studio .NET, and best of all, it's free!
Mondrian is a purely functional language specifically designed to inter-work with object-oriented languages; as such it is a blend of the two paradigms. From its functional heritage, in particular that of Haskell, it offers:
From the .NET common language runtime (CLR) and C#, influenced by Massey Hope+C and Haskell, it offers:
The language syntax resembles a meld of C# and traditional functional languages to simplify usage by object-oriented programmers.
Mondrian code can call routines written in other .NET hosted languages, and one of its design goals was to be useful as a scripting language. Mondrian also supports standalone programming, and being called from other .NET hosted languages. The latter enables programmers to exploit the particular strengths of functional languages in projects primarily written in other languages.
In the rest of this article we first briefly argue why functional languages have a place in the programmer's toolbox, and then introduce Mondrian by example.
| Author: | Nick Benton Luca Cardelli Cédric Fournet |
Polyphonic C# is an extension of the C# language with new asynchronous concurrency constructs, based on the Join Calculus. We describe the design and implementation of the language and give examples of its use in addressing a range of concurrent programming problems.
| Author: | Erik Meijer Nigel Perry Arjan van Yzendoorn |
We introduce the design of Mondrian, a functional scripting language for gluing together components on the .NET platform. Mondrian is monadic statement centric with pure expressions and non-strict evaluation and explores the melding of the OO and the purely lazy functional paradigms.
| Author: | Andrew D. Gordon Cédric Fournet |
Stack inspection is a security mechanism implemented in runtimes such as the JVM and the CLR to accommodate components with diverse levels of trust. Although stack inspection enables the fine-grained expression of access control policies, it has rather a complex and subtle semantics. We present a formal semantics and an equational theory to explain how stack inspection affects program behaviour and code optimizations. We discuss the security properties enforced by stack inspection, and also consider variants with stronger, simpler properties.
| Author: | John Gough |
A popular trend in current software technology is to gain program portability by compiling programs to an intermediate form based on an abstract machine definition. Such approaches date back at least to the 1970s, but have achieved new impetus based on the current popularity of the programming language Java. Implementations of language Java compile programs to bytecodes understood by the Java Virtual Machine (JVM). More recently Microsoft have released preliminary details of their ".NET" platform, which is based on an abstract machine superficially similar to the JVM. In each case program execution is normally mediated by a just in time compiler (JIT), although in principle interpretative execution is also possible.
Although these two competing technologies share some common aims the objectives of the virtual machine designs are significantly different. In particular, the ease with which embedded systems might use samll-footprint versions of these virtual machines depends on detailed properties of the virtual machine definitions.
In this study, a compiler was implemented which can produce output code that may be run on either the JVM or .NET platforms. The compiler is available in the public domain, and facilitates comparisons to be made both at compile time and at runtime.
| Author: | Erik Meijer John Gough |
The functionality of the recently announced Microsoft .NET system is founded on the capabilities of the Common Language Infrastructure (CLI). Unlike some other recent systems based on virtual machines, the CLI was designed from the start to support a wide range of programming languages. It is also expected that ECMA standardization will make the CLI available on a wide range of computing platforms. This combination of multi-language capability and multi-platform implementation make the CLI an important target for future language compilers.
In this paper the technical details of the CLI are briefly described. To motivate some of the discussion a comparison is made with the Java virtual machine (JVM). The JVM was designed under rather different constraints, making it a much more difficult target for languages other than Java. We also briefly discuss the issues involved in mapping various language constructs to the primitives of the CLI.
| Author: | Andrew D. Gordon Don Syme |
The Microsoft .NET Framework is a new computing architecture designed to support a variety of distributed applications and web-based services. .NET software components are typically distributed in an object-oriented intermediate language, Microsoft IL, executed by the Microsoft Common Language Runtime. To allow convenient multi-language working, IL supports a wide variety of high-level language constructs, including class-based objects, inheritance, garbage collection, and a security mechanism based on type safe execution.
This paper precisely describes the type system for a substantial fragment of IL that includes several novel features: certain objects may be allocated either on the heap or on the stack; those on the stack may be boxed onto the heap, and those on the heap may be unboxed onto the stack; methods may receive arguments and return results via typed pointers, which can reference both the stack and the heap, including the interiors of objects on the heap. We present a formal semantics for the fragment. Our typing rules determine well-typed IL instruction sequences that can be assembled and executed. Of particular interest are rules to ensure that no pointer into the stack outlives its target. Our main theorem asserts type safety, that well-typed programs in our IL fragment do not lead to untrapped execution errors.
Our main theorem does not directly apply to the product. Still, the formal system of this paper is an abstraction of informal and executable specifications we wrote for the full product during its development. Our informal specification became the basis of the product team's working specification of type-checking. The process of writing this specification, deploying the executable specification as a test oracle, and applying theorem proving techniques, helped us identify several security critical bugs during development.
| Author: | Andrew D. Gordon Don Syme |
The Microsoft .NET Framework is a new computing architecture designed to support a variety of distributed applications and web-based services. .NET software components are typically distributed in an object-oriented intermediate language, Microsoft IL, executed by the Microsoft Common Language Runtime. To allow convenient multi-language working, IL supports a wide variety of high-level language constructs, including class-based objects, inheritance, garbage collection, and a security mechanism based on type safe execution.
This paper precisely describes the type system for a substantial fragment of IL that includes several novel features: certain objects may be allocated either on the heap or on the stack; those on the stack may be boxed onto the heap, and those on the heap may be unboxed onto the stack; methods may receive arguments and return results via typed pointers, which can reference both the stack and the heap, including the interiors of objects on the heap. We present a formal semantics for the fragment. Our typing rules determine well-typed IL instruction sequences that can be assembled and executed. Of particular interest are rules to ensure that no pointer into the stack outlives its target. Our main theorem asserts type safety, that well-typed programs in our IL fragment do not lead to untrapped execution errors.
Our main theorem does not directly apply to the product. Still, the formal system of this paper is an abstraction of informal and executable specifications we wrote for the full product during its development. Our informal specification became the basis of the product team's working specification of type-checking. The process of writing this specification, deploying the executable specification as a test oracle, and applying theorem proving techniques, helped us identify several security critical bugs during development.
| Author: | Erik Meijer Clemens Szyperski |
In this paper, we analyze the challenges surrounding the problem of reuse and independent extensibility of software components beyond source sharing, relate them back to the development and deployment process, and show how many of the problems in this area can be traced back to name resolution problems. We show how the Common Language Infrastructure (CLI) addresses these problems in novel ways.
© 2001-2002 Microsoft Corporation. All rights reserved. Terms of Use.