Laboratory for Foundations
of Computer Science
.NET lab

.NET talks

Seminars on topics related to .NET usually appear as part of the Applied Theory and Software Engineering club on Wednesday mornings. If you have any ideas for future talks, or suggestions for people to invite to Edinburgh, please contact Ian Stark (

Sam Lindley Normalisation by Evaluation for SML.NET
Erik Meijer X# Overview: Unifying the Object-Oriented, Relational and Hierarchical Data Models
Jonathan Cook P#: A Concurrent Prolog for the .NET Framework
Dave Berry Gyro: Generic types for .NET

Talks are in room 2511 of the James Clerk Maxwell Building.

Normalisation by Evaluation for SML.NET

Sam Lindley, LFCS
5 April 2004

SML.NET is a whole program compiler, which compiles standard ML to .NET bytecode. It uses a monadic intermediate language, MIL, based on Moggi's computational metalanguage. Most of the compile time is spent rewriting a single large MIL term, which represents the whole program. We investigate the use of normalisation by evaluation as a tool for efficiently rewriting MIL.

SML.NET site:

X# Overview: Unifying the Object-Oriented, Relational and Hierarchical Data Models

Erik Meijer, Microsoft Research
11 April 2003

Over the last couple of years my research has focused on growing languages to write typical three-tier programs that munge relational tables into hierarchical trees by means of an object-oriented or functional language.

The early attempts resulted in a family of domain specific embedded languages in Haskell. While the DSL approach is certainly elegant, it remained a purely academic exercise. In particular it is impossible to add new syntax (for example for XML literals), and more importantly, embedding foreign type-systems into the host language requires lots of tricky type hackery (phantom types, monads, rank-n polymorphism, ...) while still not achieving full fidelity.

More recently, I have therefore been investigating language and type-system extensions in an imperative object-oriented setting instead of embedding into a pure functional language. This talk will discuss the preliminary outcome of trying to unify the object-oriented, relational and hierarchical data-models by growing an object-oriented host language by adding streams (lazy lists), tuples (sequences), union and intersection types, closures, generalized member access (XPath queries) and joins (SQL select queries), and XML literals.

Paper: Unifying Tables, Objects and Documents

P#: A Concurrent Prolog for the .NET Framework

Jonathan Cook, LFCS
9 April 2003

We discuss P#, our implementation of a tool which allows interoperation between a concurrent superset of Prolog and C#. This enables Prolog to be used as a native implementation language for Microsoft's .NET platform. P# compiles an extended Prolog to C# source code. This allows us to create C# objects from Prolog and to use C#'s graphical, networking and other libraries. We discuss the addition of concurrency language features to P# and give some examples of its use.

P# site:

Gyro: Generic types for .NET

Dave Berry (
19 February 2003

Microsoft have released a "shared source" implementation of the .NET runtime, assembler, and C# compiler, nicknamed "Rotor". Gyro is a project from Microsoft Research that extends Rotor with support for "generic" types (i.e. parametric polymorphism).

In this talk I briefly explain the design of generic types for .NET, and describe their implementation in Gyro. This will be a useful introduction to anyone who plans to modify either Gyro or Rotor themselves, e.g. in research projects.

At OOPSLA last November, Microsoft announced that generic types will be included in the next production version of .NET. Gyro is a useful testbed for experimenting with this feature before the main release.

Gyro web page: