Self Interpreter

Due Monday, December 2 at 2pm

In this assignment, you will complete an interpreter for a version of Self, written in Cecil.

Self is a very simple, pure OO language. Step one of the homework is to read the Ungar & Smith paper introducing Self.

Step two is to learn Cecil. Of course, you should have read Ch. 1-3 of the Cecil language reference manual; Ch. 4 you can skim so that you know how to use some of the parameterized collections in the Cecil standard library. You also should browse the Cecil standard library manual; the parts on basic boolean and closure control structures, maybes, and ordered collections like vectors should be particularly relevant. (Note: the new_i_vector_init_from method is Cecil's version of ML's map function.)

Step three is to copy the README, *.cecil, and *.self files from /cse/courses/cse505/02au/hw5 to a directory of your choosing.

Step four is to write some interesting Self functions. Define a few new Self objects, write some methods on them, compute something interesting with them. It is fine to add new operations to existing Self objects in std.self.

Feel free to ask questions of Craig or Todd to clarify your understanding about our version of Self or what you're to do or about standard Cecil libraries (Craig wrote the code).

How and what to turn in

Send Todd email with your fully implemented eval.cecil, eval-env.cecil, and dispatch.cecil files as attachments, plus any files containing your Self objects from step four and instructions on how to use them.

The first person who finds a bona fide bug in the sample solution wins a $1 prize. (There were no winners of the previous prize, so I tested my sample solutions less well this time. :-)