[GOODIE] Arithmetic assignments (+= and friends)

Stephen Pair spair at advantive.com
Mon Jun 17 21:07:02 UTC 2002


Maybe it would be possible to generalize assignments of the form "x := x
+ 1".  This is an assignment of the variable "x" to a value that is the
result of sending some message to that variable.  This way it could
apply to any selector, not just a special few. 

How about something of the form:

  x: + 1
  x: increment.
  X: asString
  x: copyWithout: someObject

Hmmm...that would probably get confusing to read in certain
circumstances.  Anyway, how much are we really saving?

x += 1
x := x + 1

Four keystrokes (including the spaces).

- Stephen

> -----Original Message-----
> From: squeak-dev-admin at lists.squeakfoundation.org 
> [mailto:squeak-dev-admin at lists.squeakfoundation.org] On 
> Behalf Of Andreas Raab
> Sent: Monday, June 17, 2002 4:33 PM
> To: squeak-dev at lists.squeakfoundation.org
> Subject: RE: [GOODIE] Arithmetic assignments (+= and friends)
> 
> 
> Lex,
> 
> > You haven't tried to teach people to program, have you?
> 
> I have. It's a while back and was mostly Smalltalk, but yes, I have.
> 
> > I have the biggest success in teaching people by teaching 
> them Common 
> > Lisp, because there was little discussion at all on syntax. 
> I've never 
> > tried Scheme, but I imagine it would be simpler.  The times I've 
> > tutored or taught people in Pascal, C, or Ada, the syntax 
> has really 
> > gotten in the way. Smalltalk is hard for a different 
> reason: you have 
> > to grok a bunch of the library before you can do anything.
> 
> I agree - but the other languages are not hard simply because 
> of += and friends. While I agree that "too much syntax" is 
> hard to grasp, I would argue that "too little syntax" makes 
> the experience less comfortable in the mid to long term. As 
> always there is a fine line between "too much" and "too 
> little", but for me, Smalltalk is clearly on the "too little" 
> side. If += is on the other one stands to reason but I don't 
> believe so.
> 
> > The worst cases I've seen are C++ and Java: you have the same 
> > difficulties from Smalltalk, plus you have a lot of syntax to learn.
> 
> Agreed on all points.
> 
> > Aside from that, there is a possible cost even an expert programmer.
> > Time spent learning the extra forms could have been spent becoming a
> > better programmer in general with the existing forms. 
> 
> If the extra forms make it possible to write more readable, 
> easier to maintain code I would argue that this is time well spent.
> 
> > There is an interesting parallel to functional languages, 
> by the way.
> > In functional languages, := is often a function, and the
> left-hand-side
> > is a value holder.  That is, when you see  ":=" in a functional 
> > languages it is really  more like "value:" in Smalltalk.  
> (And ":=" in 
> > Smalltalk doesn't map over at all.)  The difference is 
> whether you are 
> > talking about the variable (:=), or about the value the 
> variable holds 
> > (value:).
> > 
> > To return to the point, the new += seems more like := than
> > like #value:.
> 
> Whoops? What makes you think that?! It's exactly the opposite 
> - the entire intent is to ask the receiver to increase 
> itself, e.g., accurately represented it should be "foo 
> addValue: bar". And the only reason the assignment form is 
> required because some of the "more stupid" but unfortunately 
> fundamental literals can't do it any other way.
> 
> > The new += affects the variable, not (typically) the value.
> 
> Wrong. Exactly wrong. It *always* affects the value and only 
> the value if propertly implemented. Again, the only reason 
> for putting it in assignment form is because you cannot 
> affect the value of a SmallInteger nor should it affect any 
> of the other literals (like LargeInts and Floats). If you 
> will reread my other posts you will notice that I always 
> pointed out "polymorphic receivers" to which SmallIntegers 
> and other literals belong. There is no single implementor of 
> += besides these literals that do (or should) implement += in 
> any other fashion than you are describing.
> 
> > In fact, there are existing implementations of += that
> > are more like #value: -- just check out implementors-of +=
> > to see 4 interesting implementations. 
> 
> Well, yeah, look at the initials of those methods ;-)
> 
> > Maybe we should leave += acting like #value:, and use a
> > different syntax for the version that acts like :=.
> 
> See above. In order to make += polymorphic (how often do I 
> have to repeat this in this thread - this must the third or 
> fourth time) it is required that += is an assignment form.
> 
> Cheers,
>   - Andreas
> 
> 
> 




More information about the Squeak-dev mailing list