Ruby's behavior is canonical from a strictly arithmetic perspective. In the
standard order of operations exponentiation is evaluated before
multiplication.

Of course, the `-` is technically a unary negation operator, but as far as
I know, no such operation exists in elementary arithmetic. Rather, `-` is a
shorthand for multiplying by `-1`. It makes sense to evaluate this operator
at the same level as multiplication (at least with respect to the other
arithmetic operations like exponentiation) as it seems to be doing now.

Please see these resources for details (the second deals with the case of
negation before exponents specifically):
https://www.purplemath.com/modules/orderops.htm
https://www.cos.edu/Faculty/rossr/Documents/2.6_Exponents-and-Order-of-Operations.pdf

On Mon, Jan 23, 2017, 1:29 PM <jzakiya / gmail.com> wrote:

> Issue #13152 has been updated by Jabari Zakiya.
>
>
>
>
> I noticed this difference between ruby and crystal when converting a gem.
>
> puts `-2**4` -> -16 (ruby) || 16 (crystal)
> puts `(-2)**4` -> 16 (both)
>
> ruby parses `-2**4` as `-(2**4`), while crystal does `(-2)**4`, which is
> more intuitive.
> This creates need to be careful converting negative number usage from ruby
> <-> crystal.
> (I haven't investigated differences with other languages.)
> Using parentheses to explicitly create intended outcomes can overcome this.
>
> However, on the heels of the discussion/decision to not change the default
> rounding behavior of numerics
> in 2.4.0 would it also be worth it to change this parsing behavior to make
> this more natural
> and intuitive, as in crystal?
>
>
> ----------------------------------------
> Bug #13152: Numeric parsing differences between ruby <-> crystal
> https://bugs.ruby-lang.org/issues/13152#change-62646
>
> * Author: Jabari Zakiya
> * Status: Open
> * Priority: Normal
> * Assignee:
> * Target version:
> * ruby -v:
> * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
> ----------------------------------------
> I noticed this difference between ruby and crystal when converting a gem.
>
> puts   -2**4 -> -16 (ruby) || 16 (crystal)
> puts (-2)**4 ->  16 (both)
>
> ruby parses -2**4 as -(2**4), while crystal does (-2)**4, which is more
> intuitive.
> This creates need to be careful converting negative number usage from ruby
> <-> crystal.
> (I haven't investigated differences with other languages.)
> Using parentheses to explicitly create intended outcomes can overcome this.
>
> However, on the heels of the discussion/decision to not change the default
> rounding behavior of numerics
> in 2.4.0 would it also be worth it to change this parsing behavior to make
> this more natural
> and intuitive, as in crystal?
>
>
>
> --
> https://bugs.ruby-lang.org/
>
> Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
>
(supressed text/html)
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>