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.
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.
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.
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.
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.
You should illustrate your interpreter and typechecker by writing some MiniEML code that exploits the new language features in an interesting way.
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.
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.
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: