Re: [sv-bc] [Fwd: Issues with IEEE 1364-2005]

From: Brad Pierce <Brad.Pierce_at_.....>
Date: Tue Aug 15 2006 - 15:51:30 PDT
-----Non-member submission-----
From: Will Adams [mailto:wadams@freescale.com] 
Sent: Tuesday, August 15, 2006 2:52 PM

The expression `h == null || h.data == 5' requires short-circuit
evaluation to avoid an illegal null dereference. Ada uses the name `or
else' for this operator (and the name `and then' for the short-circuit
conjunction). Whenever a condition is naturally expressed with `or else'

  (eg, `h is null or else h.data is 5') or `and then', we can use
short-circuit evaluation.

I agree that short-circuit evaluation is not the best choice for all
conjunctions or disjunctions. For simple conditions where there is no
problem of run-time errors, evaluating both operands in parallel will
give better performance.

I think the Standard should be changed as follows.

(A) Operators `&&', `||' and `?:' are short-circuiting.

(B) Other operators must evaluate all their operands, in any order.

An implementation is allowed to avoid evaluating `a' in `a & b' when `b'

is 0, provided evaluating `a' has no observable side-effects. This has
the same observable effect as applying rule (B).

will


Brad Pierce wrote:
> What's an example of the usefulness of C's left-to-right 
> short-circuiting disjunction?
> 
> -- Brad   
> 
> -----Original Message-----
> From: Will Adams [mailto:wadams@freescale.com]
> Sent: Tuesday, August 15, 2006 6:26 AM
> To: Brad Pierce
> Cc: sv-bc@eda-stds.org; michael.burns@freescale.com
> Subject: Re: [sv-bc] [Fwd: Issues with IEEE 1364-2005]
> 
> The `&&&' operator can only appear in limited syntactic contexts. The 
> following reasonable uses of conjunction are not allowed by the
syntax.
> 
>    c = a &&& b ;
>    if ( ! ( a &&& b ) )
> 
> The second of these is a problem because there is no `|||' short 
> circuiting disjunction, and the syntax does not allow this operation 
> to be expressed with `!' and `&&&'.
> 
> If `&&' is not required to have short-circuit evaluation, and `&&&' is

> suggested as an alternative for cases where short-circuiting is 
> desired, we have a situation where a familiar operator has unfamiliar 
> semantics, and the familiar semantics are only available in limited 
> contexts from an unfamiliar operator.
> 
> will
> 
> 
> Brad Pierce wrote:
>>> It sounds like '&&&' is not appropriate to use as a general-purpose
>> short-circuit
>>> logical AND.
>> Because &&& allows the
>>
>>      expression 'matches' pattern &&& ...
>>
>> syntax, it can do *more* than a general-purpose short-circuit logical

>> AND.  How does its greater generality make it inappropriate for a 
>> more
> 
>> restrictive purpose?
>>
>> Regardless of the original reasons for introducing
>>
>>     if (expression &&& expression)
>>
>> it behaves exactly like C users have come to expect from
>>
>>     if (expression && expression)
>>
>> .
>>
>> -- Brad
>>
>> -----Original Message-----
>> From: Steven Sharp [mailto:sharp@cadence.com]
>> Sent: Monday, August 14, 2006 2:43 PM
>> To: Brad.Pierce@synopsys.COM; nikhil@bluespec.com
>> Cc: wadams@freescale.com; sv-bc@eda-stds.org; 
>> michael.burns@freescale.com
>> Subject: Re: [sv-bc] [Fwd: Issues with IEEE 1364-2005]
>>
>>
>>> From: "Rishiyur Nikhil" <nikhil@bluespec.com> '&&&' is not merely a 
>>> conjunction operator, and its reason for existence is not to 
>>> introduce short-circuiting-- it is because it has
> 
>>> a
>>> variable-binding function unique to the pattern-matching facilities 
>>> of the language.
>> Thanks for the explanation.  It sounds like '&&&' is not appropriate 
>> to use as a general-purpose short-circuit logical AND.
>>
>> Steven Sharp
>> sharp@cadence.com
>>
>>
> 
Received on Tue Aug 15 15:52:11 2006

This archive was generated by hypermail 2.1.8 : Tue Aug 15 2006 - 15:52:19 PDT