# Oberon/ETH Oberon/oberon.net

This document was originally hosted at the ETHZ. It remains under the ETH license and is in the WayBack archive.
Active Oberon for .net A Language Interoperability Project with Microsoft Research
* Overview
* Active Oberon for .net is an evolution of the programming language Oberon in the context of the new Microsoft .net technology.
* Its highlights are:
* an explicit notion of object type including "active objects" with integrated thread of control
* a uniform concept of abstraction called definition representing both "facet" and unit of use
* a module construct simultaneously acting as name-space and singleton object
* Definitions are abstractions. More precisely, a definition is an interface, optionally equipped with a state space and predefined method implementations. Definitions can be refined (that is extended in terms of state, functionality or implementation) to new definitions or implemented by object types. Each definition implemented by an object type corresponds to a facet or service unit of the object type exposed to clients.
* Programs in Active Oberon for .net are typically structured as populations of active objects or agents communicating with each other via definitions. Consequently, the Active Oberon programming model integrates seamlessly with the architecture of distributed systems. Also provided in Active Oberon for .net is a generic type OBJECT, optionally followed by a set of postulated definitions. However, there is no (non-trivial) type hierarchy or class hierarchy in Active Oberon for .net. In particular, Oberon's type extension is re-interpreted in Active Oberon for .net as implemented abstraction.
* Also new to the language is a block statement construct of the form
* BEGIN { modifiers } ... ON EXCEPTION ... END;
* where modifiers is a list of directives like ACTIVE (separate thread), (mutually) EXCLUSIVE, and CONCURRENT, and the optional ON EXCEPTION clause is used to handle any exception occurring within the block statement.
* In addition, the language features enumeration types along the Pascal/ Modula lines.
* Active Oberon for .net was developed at the ETH Zürich in the group of Prof. Jürg Gutknecht. More information can be found via links in the side bar on the left.
* Language History
* Oberon is a member of the Pascal language family. From its ancestors Pascal and Modula-2 it inherits a compact, highly expressive and self-explanatory syntax, strictly enforced data types, and a concept of module in combination with public view. In addition, the original Oberon language supports sub-typing and polymorphism based on record type extension. Active Oberon for .net is an evolution of Oberon. It was specially designed to be compatible with the new Microsoft .net platform.
* Project Goals
* Our idealistic goal in the Active Oberon for .net project was the design of an interoperable, imperative object-oriented language that is simpler, more economical, more powerful and better scalable than comparable programming languages. More specifically, our goal was a language that:
* preserves the spirit of Oberon
* provides a rich object model including self-contained (that is self-controlling or "active") objects
* disentangles different concerns like code reuse, polymorphism, sub-classing etc.
* emphasizes the view of software development as implementation of predefined abstractions
* unifies the logical structure of programs and distributed systems
* is able to interoperate with other participating languages both as a consumer and as a producer
* maps naturally to the .net framework