Paul Smith (27 January 2024 21:32) wrote:
> I'm interested in peoples' opinions about which of these two
> implementations they would feel to be more "intuitive" or "correct".
> Also please consider issues of "action at a distance" where a variable
> is assigned in one makefile and appended to in some other makefile,
> potentially far away.

A naive C-programmer approach starts from

  x += y

in C meaning the same as

  x = x + y

This leads to an "intuitive" approach being to have

  x +:= y

mean

  x := $(x) y

in make, with analogous statements for each of the other increment
operators.  IIRC, that runs into trouble because plain x += y has
already been implemented and preserves the type of x, rather than
revising it to be recursive evaluation.  Then again,

  x = $(x) y

would be problematic in any case, since $(x) would then be an infinite
recursion.  That's an argument for += to get special treatment.

Perhaps it would be useful to enumerate the other types of assignment
(I'm unfamiliar with the ones beyond = and := myself) and describe what
putting a $(x) to the right of each (as replacement for a + before it,
when x is the left-hand operand) would do and what problems each would
pose.  That might give some clarity to the options.  In particular,
given that it's immediately clear what

  x := $(x) y

does, having +:= do the same thing is semi-redundant.

        Eddy.

Reply via email to