## Anyone remember Russell (the language, that is)?

Russell was a functional language developed some 25 years ago to explore the idea of data types as full first-class objects. I'm a total amateur when it comes to programming languages, but I remember thinking at the time that it was pretty cool. A cursory search of Lambda and the web didn't turn up much.

The main reference looks to be:
"Data Types are Values"
TOPLAS, vol. 7, #3 (July 1985)

## Comment viewing options

### remember the references

The other thing about Russell which was magical to me was its reference types. I had been working with Fortran and Pascal for several years. Variables with stack-based lifetimes, pass-by-reference, pointer types, and manual allocation on the heap were the way compiled programming languages worked. Then I attended a presentation on Russell and they didn't need any of that! Just reference types and a few basic operations like creation, dereferencing, and assignment.

### Seems like..

Hans Boehm (of conservative garbage collector fame) was involved. You can find an old implemenation here.

### Types as values

Aldor is another language that considered types to be values, if you're interested in such things.

### Russell - that's my language!

Scary and funny. This evening, I'm finishing writing tomorrow's lecture in computer science. I've been teaching postgradutes for the last 10 years, and tomorrow is the first time they let me near 1st years ;-).
I was just doing up a few slides of background, trying to make them understand the larger frame of computer science, so I Googled Russell Programming Language, that IMHO was created by me in the early 80s. Lo and B-hold, I found these pages! I've downloaded the stuff from the xerox server and will carefully look if there's any resemblance...
I named MY language after Bertrand Russell, after reading Primcipia Mathematica and having interesting discussions on various CompuServe fourms about set theory...

### Thankfully, the full paper is

Thankfully, the full paper is online: http://portal.acm.org/citation.cfm?id=3987. This requires an ACM subscription, which is well worth the cost.

### OK, I'll dig out my old tape backups...

Hey Sweeeny. I have ACM sub. Thanks. Reading the paper I'm even more convinced that it's MY language. Perhaps I should write a grant proposal to resusiscicate it ;-)

### Uses for type values

Extending case expressions to allow patterns of different types can in most cases eliminate the need for explicit type values to be exposed. E.g.

case expr of
{
i :: Int -> ...
c :: Char -> ...
Cons x y -> ...
}

The main area where they seem directly useful are for reference subtypes where the type can be determined dynamically. I use them in iterator functions such as:
referrer x (::Socket)


In this example referrer selects a reference of type, say, Socket out of a list of reverse references. The advantage of this kind of approach is that it permits a function to establish its local context in a wider application framework without resorting to global variables.