On 21 April 2011 17:37, Lukas Renggli <renggli@gmail.com> wrote:
A ++ operator is evil, because you cannot override or redefine it (like any other message).
In C++ you can.
yep.. been there
And it works only for numbers (no pointers in smalltalk) and so, completely falls out of object model.
It can be done and has been done in Helvetia without falling out of the object model.
I don't remember the details, but I was essentially rewriting
  i++
to something along
  i increment: [ :v | i := v ]
where you the semantics of #increment: are implemented in the objects as you wish. For numbers this would be something like:
  Number>>#increment: aBlock     ^ aBlock value: self + 1
For other objects other 'meaningful' implementations can be added, for example:
  SequenceableCollection>>#increment: aBlock     ^ aBlock value: self allButFirst , (Array with: self first)
  Stream>>#increment: aBlock     ^ aStream skip: 1
  etc.
So, what is your point? Yes, we can extend a syntax. And with Helvetia this is piece of cake. The question - do we need it so much that want to sacrifice a syntax simplicity, consistency and clarity for that? (outside of serving as an example of extending syntax ;) Well, yeah, we can introduce weird stuff at any moment. Things like macros or quasi-quotes will eventually turn once self-explanatory smalltalk code into DSL, where only author can understand what it does... I am fine with having DSLs around with any possible extensions that people may want them to be. But making it to be default syntax? Hell no! -- Best regards, Igor Stasenko AKA sig.