Hi,
Am 2011-04-16 um 13:32 schrieb Ted F.A. van Gaalen:
> Hi there.
>
> I am probably not the first, and will not be
> the last person to come up
> with this suggestion, neverTheLess:
>
> To increment a numeric value I would like to write:
>
> aNum := 1.
> aNum ++. to increment it
> aNum --. to decrement it
>
> instead of:
> aNum := aNum + 1.
>
> For reasons of efficiency and readability.
>
> Why?
> Most, if not all, of today's computer processors
> ( they used to be called microprocessors :o)
> have INCrement en DECrement instructions,
> which are much more efficient than addition
> and subtraction instructions.
> (less clock cycles, perhaps even just one)
>
Interestingly, this is already done when using a JIT,
eg, the CogVM.
But what is more important is, that in Smalltalk, Integers
are unmodifiable.
There are different concepts:
in C,
i++
means,
"increase the number in the memory cell that i represents"
however, in Smalltalk,
i ++
would mean
"send the object that is stored in i the message #++"
And if a number, eg 42, is stored in i, then this would mean
"send 42 the message #++"
but what should the result be?
should 42 transform itself into 43?
Moreover, it is bad style in Object-Oriented programming to
rely on side effects of a message:
You're implicitly saying
"I want the state of the object in i to change and rely on it
later-on"
whereas
i := i + 1
is explicitly saying
"I want a number greater than i and work with it later-on"
> Of course, the work should to be done by primitives,
> which directly utilizes the processor's INC, DEC instructions.
>
As I said this is subject to a JIT.
> So, wouldn't it be convenient to implement these ++ and ---
> methods in Pharo? and VM. I am not sure, but I suspect also a number
> of system classes e.g. in do: [:i|...] would perform better,
> wenn this method/ instruction is supported?
>
I don't think so.
So Long,
-Tobias