octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: short circuit & and | in if and while


From: Ernst Reissner
Subject: Re: short circuit & and | in if and while
Date: Thu, 14 Sep 2017 11:11:57 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0

On 09/14/2017 06:07 AM, John W. Eaton wrote:
> On 09/13/2017 09:25 PM, Ernst Reissner wrote:
>> Yes, Mike, I know the what, but not the why and I really cannot figure
>> out a reason.
>> The reason why I ask is among other things, what about until in octave:
>> Maybe short circuiting should be also for until, as it is for while
>> and if:
>> while (false & error("both")) "hi";end shortcuts and thus no error while
>> do "hi" until(true |error("both")); yields and error.
>>
>> This seems a little inconsistent,
>> but on the other hand, ... what sense makes the matlab feature at all?!
>
> It doesn't make much sense.
>
> Have you read
>
>   http://wiki.octave.org/FAQ#Short-circuit_.26_and_.7C_operators
>
> Originally in Octave && was equivalent to &, and || was equivalent to
> |.  Neither form did short-circuiting.
>
> I changed the && and || operators (but not the & and | operators) to
> do short-circuiting in 1994, apparently.  Here is the message I posted
> then:
>
>   http://lists.gnu.org/archive/html/help-octave/1994-05/msg00012.html
>
> When TMW introduced short-circuit behavior for the & and | operators
> in Matlab, they thought they were being clever by not introducing new
> operators, and just making the existing ones do something different in
> some contexts.  To me, this seemed like a really bad choice and I
> could immediately see cases where behavior would be different
> depending on whether the expression appeared directly inside and
> IF/WHILE condition or not.
>
> The Matlab behavior is highly unusual and causes trouble in various
> ways (some documented in the Octave FAQ).  We have it for
> compatibility ONLY.  Using this feature is STRONGLY discouraged.  I
> wish to limit the damage, so I have no interest in extending the
> behavior to other places in the language.  Supporting this feature for
> compatibility is bad enough.
>
> jwe
>
>
ok so in short: there is nothing to be understood; it is just a bad
design choice of TMW.

This explains also why the operators | and & in conditions in until
statements are not shortcut,

i.e. implicitly replaced by && and ||: because until does not exist in
matlab.

Maybe good idea to document this....




reply via email to

[Prev in Thread] Current Thread [Next in Thread]