Ok, great, thanks for reply! I'm still really new to arc so, to be honest, it doesn't really make sense without looking at the actual. Hopefully, later today/this week, I will have some time to sit down and really look into things. Once I get something functioning I will definitely send a pull request.
You're absolutely right in that I've glossed over quite a few details, and clearly I've screwed up in some ways that were immediately obvious to you :P
I guess the first thing I'd have to introduce for the whole issue of basic operations destroying the entire system is to introduce something like:
def _foo:+(_foo:n, _foo:m):
...
i.e. that "underscore something" is a meta-name.
Then we have:
hello = "hi, "
world = "planet"
hello_world = hello + world # error, since join(hello, world) = top
# and yet...
hello_world = "hi, " + "planet" # not an error: join(bottom, bottom) = bottom
yes, this is exactly the point. The idea is that if you're giving it a name, that actually means something pretty significant, much more than just a way to access some specific bit of RAM with a bunch of ascii characters as reference.
I don't know how it'd scale but I imagine that many users of such a theoretical system would find it really annoying to write in the beginning without good tooling (kind of like Java with all those getters and setters :P). I do believe though that this is also the case in Objective-C and that in ObjC this tradeoff is appreciated later when maintaining big code bases. Maybe my rather draconian idea is unfeasible because of this reason alone!
I would like to have the short forms from my examples in ObjC though.. writing "x:x y:y width:width height:height" is actually something that happens quite a bit ^_-
did you install the latest version of racket? there's an updated version since nicholas published his tutorial. i followed his instructions and everything worked fine.