Shelf – Self implemented in Shell Scripts

(Coming really soon now)

So what's here? Nothing yet, obviously. This is just a project I will work on whenever I feel I should waste some time.

The goal of Shelf is to implement the language Self by using just shell scripts and the typical base utilities defined by the POSIX standard.

Each object and each slot will be a shell script, method lookup will be done using the PATH environment variable, and the self object is either $0 (for objects) or will be passed via environment to method invocations. Cloning objects just copies some files around, adding slots creates some new shell scripts (may be partially done with links or symlinks, if the slot scripts will be generic enough), assigment modifies the reader slot – ehm script. Listing an object's slots can be implemented using something like ls(1). And for garbage collection, a special dummy execution mode will be implemented that causes each object and slot reachable from some bootstrap object (e.g. the lobby) to be read, which touches the atime of everything that's reachable. The unused scripts will then be removed using find(1), xargs(1) and rm(1).

I'm yet unsure about a graphical interface. An efficient and relatively easy to implement way would be a helper program written in C that interacts with the Shelf engine using, for example, ksh coroutines. The pure way, however, would be an implementation of the X11 protocol in Shelf, but this may be a little bit inefficient.

About the syntax: since the original Self specification is inconsistent and incorrect (I guess sun urged the Self team to finish the project, so they quickly wrote the spec after the implementation), Shelf will not try to look the same as the Self spec or implementation. Instead, the Shelf implementation will use some frankensyntax, mixed from sh(1) and Self.

Crazy? Useless? Braindead? Insecure? Slow? Of course!

Do you want to (s)help?

There's nothing done yet, so there's no way to help. But I could use some good and funny logo for Shelf. If you're some kind of artist, send suggestions to The logo should reflect the fact that Shelf will be completely useless.

Valid XHTML 1.0! -- Valid CSS! -- Valid ASCII!