Agree, should be closed.
> On 1 Mar 2018, at 15:10, Aleks-Daniel Jakimenko-Aleksejev via RT > <perl6-bugs-follo...@perl.org> wrote: > > It seems like it is fixed properly now. See this discussion: > https://irclog.perlgeek.de/perl6-dev/2018-03-01#i_15872426 > > On 2017-10-22 08:28:20, c...@zoffix.com wrote: >> On Tue, 26 Sep 2017 11:03:11 -0700, c...@zoffix.com wrote: >>> On Thu, 22 Jun 2017 10:29:59 -0700, c...@zoffix.com wrote: >>>> I'd expect the fancy Unicode versions of <=, >=, and != to perform >>>> equally well, instead the >>>> ≥ and ≤ are 36x slower than their Texas companions and ≠ is 15x >>>> slower. >>>> >>>> Here's the timings for >= vs ≥: >>>> >>>> m: my $x = rand; for ^1000_000 { $ = $x >= 1_000_000_000_000 }; say >>>> now - INIT now; >>>> rakudo-moar 43c176: OUTPUT: «0.74663187» >>>> m: my $x = rand; for ^1000_000 { $ = $x ≥ 1_000_000_000_000 }; say >>>> now >>>> - INIT now; >>>> rakudo-moar 43c176: OUTPUT: «(timeout)» >>>> m: my $x = rand; for ^1000_0 { $ = $x ≥ 1_000_000_000_000 }; say >>>> now >>>> - >>>> INIT now; >>>> rakudo-moar 43c176: OUTPUT: «0.2661272» >>>> m: say 0.2661272*100 / 0.729002 >>>> rakudo-moar 43c176: OUTPUT: «36.505689» >>> >>> >>> So I made the static optimizer change Mexico ops to Texas versions, >>> so >>> this problem no longer exist. So, should the ticket be closed? >>> >>> Fixed in https://github.com/rakudo/rakudo/commit/6ec21cb473 >>> >>> I tried writing a test, but couldn't get anything usable. My attempt >>> was this: >>> >>> use Test; >>> subtest 'performance of ≤, ≥, ≠ compared to Texas versions' => { >>> sub measure (&code) { code for ^300; with now { code for >>> ^100_000; >>> now - $_ } } >>> >>> is-approx { rand ≤ rand }.&measure, { rand <= rand }.&measure, '≤', >>> :rel-tol<.5>; >>> is-approx { rand ≥ rand }.&measure, { rand >= rand }.&measure, '≥', >>> :rel-tol<.5>; >>> is-approx { rand ≠ rand }.&measure, { rand != rand }.&measure, '≠', >>> :rel-tol<.5>; >>> } >> >> >> So the optimizer fix didn't do a full job. There were still cases that >> ended up 86x slower: >> >> When chained: >> >> <Zoffix__> m: $ = rand ≤ rand ≤ rand for ^100_000; say now - INIT now >> <camelia> rakudo-moar a042fd927: OUTPUT: «2.91023964» >> <Zoffix__> m: $ = rand <= rand <= rand for ^100_000; say now - INIT >> now >> <camelia> rakudo-moar a042fd927: OUTPUT: «0.094577» >> >> Or when user defines their own version of the ASCII op: >> >> <Zoffix__> m: $ = rand ≤ rand for ^100_000; say now - INIT now >> <camelia> rakudo-moar a042fd927: OUTPUT: «0.0474443» >> <Zoffix__> m: class Foo {}; sub infix:«<=» (Foo, Foo) {}; $ = rand ≤ >> rand for ^100_000; say now - INIT now >> <camelia> rakudo-moar a042fd927: OUTPUT: «1.94282032» >> >> Some proposed to substitute Unicode versions for Texas ones during >> parsing and codegen, but the only way I >> know how to do that would make user's use of `≠` use a custom `!=` op, >> if one exists. >> >> It's possible we *do* want to declare that we do such aliasing: a >> Unicode op is just a grammatical alias >> to the ASCII op and gets rewritten to it. If there's a consensus to do >> that, it should be done for all the ops, >> even ones that don't have this performance issue (which is due to >> capture slipping). >> >> For now, I basically restored lizmat++'s original fix adding whatever >> datish ops that were >> originally missing as well: >> https://github.com/rakudo/rakudo/commit/6ad06fad9f