From: shyouhei@... Date: 2017-01-24T05:26:22+00:00 Subject: [ruby-core:79232] [Ruby trunk Bug#13152] Numeric parsing differences between ruby <-> crystal Issue #13152 has been updated by Shyouhei Urabe. Martin D��rst wrote: > - What do other languages (in particular languages more well known that Cristal) do? Here we go: ```sh zsh % /bin/sh sh-3.2$ echo $((-2 ** 4)) 16 sh-3.2$ ``` ```perl zsh % perl -e 'warn(eval("-2 ** 4"));' -16 at -e line 1. ``` ```php zsh % php -a Interactive shell php > $a = -2 ** 4; echo $a; -16 php > ``` ```python zsh % python3 Python 3.6.0 (default, Dec 24 2016, 00:01:50) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> -2 ** 4 -16 >>> ``` ```julia zsh % /Users/urabe.shyouhei/Applications/Julia-0.5.app/Contents/Resources/julia/bin/julia _ _ _ _(_)_ | A fresh approach to technical computing (_) | (_) (_) | Documentation: http://docs.julialang.org _ _ _| |_ __ _ | Type "?help" for help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 0.5.0 (2016-09-19 18:14 UTC) _/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release |__/ | x86_64-apple-darwin13.4.0 julia> -2 ** 4 ERROR: syntax: use "^" instead of "**" julia> -2 ^ 4 -16 julia> ``` ```haskell zsh % ghci GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help Prelude> -2 ** 4 -16.0 Prelude> ``` ```ml zsh % ocaml OCaml version 4.04.0 # -2 ** 4 ;; Error: This expression has type int but an expression was expected of type float # -2. ** 4. ;; - : float = 16. # ``` I also checked other languages like C#, Swift, Go, Rust and turned out they don't have this kind of operator. So from my experiment I cannot say if it's Ruby or Cristal who's wrong. I think it's a design choice. ---------------------------------------- Bug #13152: Numeric parsing differences between ruby <-> crystal https://bugs.ruby-lang.org/issues/13152#change-62650 * Author: Jabari Zakiya * Status: Rejected * 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. ```ruby 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: