Project 3: Object-Oriented Language Project

Due Thursday, March 10, at the start of class

In this assignment, you will do something interesting relating to a non-traditional OO language.  You can pick one of the options below, or you can design your own project of similar scope.

Option A: A Self Interpreter in Diesel

You can build an interpreter for Self, written in Diesel.  A framework for such an interpreter, including a read-eval-print loop driver, a Self parser, a Self AST representation, a Self object representation, and code for evaluating an initial set of Self primitives, is available in /cse/courses/cse505/CurrentQtr/hw3/Self. In addition to the framework, this directory contains a UserGuide.txt which explains how the finished interpreter is to be used, and it includes a lot of Self source code that forms an initial standard library. You need to implement the eval function for each kind of Self AST, the lookupSlot helper function, and the applyToArgs helper function.

The directory /cse/courses/cse505/CurrentQtr/Self/ contains a sample Self interpreter executable (self.linux) and a collection of Self source files forming an initial standard library.

You should illustrate your interpreter by writing some Self code that exploits Self's novel features in interesting ways.

Option B: A Self Type Checker in Diesel

You can design a sound static type system for Self (or a closely-related dialect of your devising) and then implement a checker in Diesel, extending the implementation above.  In this case, we can provide you with a complete Self interpreter implementation for you to build upon.

You should illustrate your type checker by writing some Self code that demonstrates what can and cannot be handled by your static type system.

Option C: A Formal Type System for Self

You can design and formalize a sound static type checking or inference system for the essential core of Self.  Your core could omit blocks, literals, primitives, mutable slots, and multiple inheritance, and simplify the message syntax -- just object expressions with constant slots, one of which may be a parent slot, plus an optional expression.  You should state and prove the key soundness theorems and lemmas.

Option D: MultiSelf

You can design an extension of Self to support multiple dispatching, and then implement it in Diesel, extending the implementation above. In this case, we can provide you with a complete Self interpreter implementation for you to build upon.

You should illustrate your extended language by writing some MultiSelf code that exploits MultiSelf's novel features in interesting ways.

Option E: A MiniEML Interpreter and Typechecker

You can extend your MiniML interpreter to handle the constructs of the EML language. In place of real structures, signatures, and functors, you can design something simpler that defines the granularity of modular typechecking, e.g., allow a top-level declaration to be struct {oodecl} end, where the body is a sequence of zero or more declarations of object-oriented constructs that are typechecked as a unit.  Since full type inference for an EML-like language is an open research problem, you can introduce explicit type declarations where desired in order to make the type inferencer implementable.

You should illustrate your interpreter and typechecker by writing some MiniEML code that exploits the new language features in an interesting way.

Option F: A MultiJava Project

You can use the MultiJava language (available from www.multijava.org) in an interesting way.  For example, we have used MultiJava to write Java language extensions using the Polyglot compiler infrastructure.

Option Z: <Your Project Here>

You can design your own project.  Your project should have the properties that it requires you to learn a non-traditional OO language and use it in some moderately substantial coding effort.

How and what to turn in

Print out hard copy to turn in at the start of class. Also, email your project as a gzip'd tarfile attachment yourfirstname-yourlastname.tar.gz to Keunwoo, with the subject heading 505-proj3. Your project should untar to a directory yourfirstname-yourlastname/ containing:


chambers@cs.washington.edu