- We should keep the receiver in message patterns.
- We want to get rid of assignment.
We? :-)
Solution: If we had the notion of "implicit accessors," we could write,
| var | self var: 42. Transcript show: self var printString; cr.
But then do the full step and get rid of "| var |" That piece of syntax isn't needed at all. Make local variable creation (wait, you don't have variables so how to call them?) implicit. Python, btw, does the same and for a Smalltalker who's already used to argumenting for the advantages of dynamic typing against static typing it shouldn't be too difficult to also find some arguments for these dynamic storage location ;-)
"self var: 42" simply creates a new local storage and assigns 42 if there's no storage. Actually, it maintains a simply dictionary of key/value pairs. We can even make this explicit
self localsAt: #var put: 42 Transcript show: (self localsAt: #var) printString; cr
Object>>localsAt: key put: value (WeakMethodContextDict at: thisContext sender receiver ifAbsentPut: [Dictionary new]) at: key put: value Object>>localsAt: key ^(WeakMethodContextDict at: thisContext sender receiver) at: key
Of course, instead of self-sends, using symbols would also work :-)
But what's the benefit of this approach? I don't see it.
bye -- Stefan Matthias Aust // Bevor wir fallen, fallen wir lieber auf.