From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5912 invoked from network); 19 Jun 2008 09:55:11 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.4 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 19 Jun 2008 09:55:11 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 97825 invoked from network); 19 Jun 2008 09:55:08 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 19 Jun 2008 09:55:08 -0000 Received: (qmail 23639 invoked by alias); 19 Jun 2008 09:55:05 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 25213 Received: (qmail 23629 invoked from network); 19 Jun 2008 09:55:05 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 19 Jun 2008 09:55:05 -0000 Received: from mail.o2.co.uk (sidious.london.02.net [82.132.130.152]) by bifrost.dotsrc.org (Postfix) with ESMTP id CD6A08084FA0 for ; Thu, 19 Jun 2008 11:54:58 +0200 (CEST) Received: from sc.homeunix.net (78.105.216.138) by mail.o2.co.uk (8.0.013.3) (authenticated as stephane.chazelas) id 4851DD9501265765; Thu, 19 Jun 2008 10:54:54 +0100 Received: from chazelas by sc.homeunix.net with local (Exim 4.69) (envelope-from ) id 1K9Gr0-0008O9-6k; Thu, 19 Jun 2008 10:54:54 +0100 Date: Thu, 19 Jun 2008 10:54:54 +0100 From: Stephane Chazelas To: "Jun T." Cc: zsh-workers@sunsite.dk Subject: Re: arithmetic operator precedence Message-ID: <20080619095454.GE5016@sc.homeunix.net> Mail-Followup-To: "Jun T." , zsh-workers@sunsite.dk References: <20080616080726.GP10734@prunille.vinc17.org> <20080616144211.276fb0e3@pws-pc> <2d460de70806170219k12ff4cadn441b52c48bf8076f@mail.gmail.com> <20080617094509.GC5016@sc.homeunix.net> <2d460de70806170324o5a44609x9383cc2445d67dd6@mail.gmail.com> <20080617103829.GD5016@sc.homeunix.net> <20080617114340.398c731f@news01> <20080617112815.GF10734@prunille.vinc17.org> <200806171146.m5HBkhfR013230@news01.csr.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.16 (2007-09-19) X-Virus-Scanned: ClamAV 0.92.1/7505/Thu Jun 19 08:25:19 2008 on bifrost X-Virus-Status: Clean On Thu, Jun 19, 2008 at 06:37:17PM +0900, Jun T. wrote: > > At 0:46 PM +0100 08.6.17, Peter Stephenson wrote: > >As it looks like "some sort of" > >compatibility might as well be with other shells (so the option could > >really be called "SH_PRECEDENCES", although it's perhaps less obvious that > >means "something approximating to the precedences you probably expect if > >you are a regular programmer") this doesn't give us room for manoeuvre > >without yet another option. > > -3**2 = 9 is quite counter-intuitive and "mathematically wrong", [...] I don't find it counter-intuitive nor mathematically wrong as there's no "**" operator of that shape in "maths". But to rephrase what I was trying to say rather awkwardly before. With all the existing operators, one can do x=$(( some-expression )) y=$(( some-other-expression )) z=$(( $x $y )) and it's OK whatever some-expression and some-other-expression and as long as they are POSIX. The syntax above is the only one you can write in a POSIX script, and POSIX guarantees it to work at the moment. If you change ** so that it has higher precedence than the unary minus, you break that harmony. Typically, that means you'll have to write: z=$(( ($x) ($y) )) because you now have operators that have higher precedence than the unary "-" and unary "+". Again ** is not a POSIX operator, so it's not really a concern at this time, as you can't use ** in a POSIX script anyway. But that's to show how it could become one if POSIX was to include "**" in a future version of the standard and set its precedence as you suggest. -- Stéphane