The Development of the Emerald Programming Language
Andrew P. Black
Portland State University
Norman C. Hutchinson
University of British Columbia
Eric Jul
University of Copenhagen
Henry M. Levy
University of Washington
Emerald is an objectbased programming language and sys
tem designed and implemented in the Department of Com
puter Science at the University of Washington in the early
and mid1980s. The goal of Emerald was to simplify the
construction of distributed applications. This goal was re
flected at every level of the system: its object structure, the
programming language design, the compiler implementa
tion, and the runtime support.
This paper describes the origins of the Emerald group, the
forces that formed the language, the influences that Emerald
Categories and Subject Descriptors D.3.0 [Programming
Languages]: General; D.3.2 [Language Classifications ]:
Objectoriented languages; D.3.3 [ Language Constructs
and Features]: Abstract data types, Classes and objects, In
heritance, Polymorphism
General Terms abstract types, distributed programming,
object mobility, objectoriented programming, polymor
phism, remote object invocation, remote procedure call.
Keywords callbymove, Eden, Emerald, mobility, type
conformity, Washington
1. Introduction
Emerald was one of the first languages and systems to sup
port distribution explicitly. More importantly, it was the first
Permission to make digital or hard copies of all or part of this work for personal or
classroom use is granted without fee provided that copies are not made or distributed
for profit or commercial advantage and that copies bear this notice and the full citation
on the first page. To copy otherwise, to republish, to post on servers or to redistribute
to lists, requires prior specific permission and/or a fee.
HOPLIII June 2007, San Diego, California
Copyright c 2007 ACM [to be supplied]...$5.00
language to propose and implement the notion of object mo
bility in a networked environment: Emerald objects could
move around the network from node to node as a result
of programming language commands, while they contin
ued to execute. Object mobility was supported by location
independent object addressing, which made the location of
the target of an object invocation semantically irrelevant to
other objects, although facilities were provided for placing
objects on particular machines when required. At a high
plementation of remote procedure call (RPC) [14], but with
a much more flexible and dynamic binding system that al
lowed an object to move from one node to another between
(and during) invocations of methods. Furthermore, as seen
from a programmer’s point of view, Emerald removed the
“remote”from“remote procedure call”:theprogrammerdid
not have to write any additional code to invoke a remote ob
ject compared to a local object. Instead, all binding, mar
was the responsibility of the implementation, i.e., the com
piler and the runtime system.
In addition, Emerald sought to solve a crucial problem
with distributed object systems at the time: terrible perfor
mance. Smalltalk had pioneered an extremely flexible form
of objectoriented programming, but at the same time had
sacrificed performance. Our stated goal was local perfor
mance (within a node) competitive with standard program
ming languages (such as C), and distributed performance
competitive with RPC systems. This goal was achieved by
our implementation.
1.1 Ancient History
Emerald forms a branch in a distributed systems research
tree that began with the Eden project [3] at the University
of Washington in 1979. Setting the context for Emerald re
that time. In 1980, at the start of the Eden project, local area
networks existed only in research labs. Although early Eth
Next Page