[Coke] Sure, a PR can't hurt. just leave a comment that it's exploratory. 00:09
thanks for trying it out.
[Tux] This is Rakudo version 2016.05-73-g60731a0 built on MoarVM version 2016.05-18-g1339332 06:53
test 19.246
test-t 11.927
csv-parser 22.418
dalek kudo/nom: 42f07cd | lizmat++ | src/core/IO/Handle.pm:
Fix scoping issue with IO::Handle.comb(N)
08:12
kudo/nom: 65e1b54 | lizmat++ | src/core/Iterator.pm:
Squeeze a few % out of default Iterator code

  - use nqp::eqaddr instead of =:=
  - use nqp::not_i instead of !
  - use nqp::add_i instead of prefix ++
  - use postfix until instead of empty body until
lizmat m: class A { method sink { say "sunk" } }; use nqp; nqp::stmts(A.new) # jnthn: looks like nqp::stmts doesn't sink 08:14
camelia ( no output )
lizmat m: class A { method sink { say "sunk" } }; A.new 08:15
camelia rakudo-moar 60731a: OUTPUTĀ«sunkā¤Ā»
lizmat m: class A { method sink { say "sunk" } }; STATEMENT_LIST(A.new)
camelia ( no output )
lizmat nor does STATEMENT_LIST apparently
dalek kudo/nom: d292d76 | lizmat++ | src/core/Any-iterable-methods.pm:
Remove 2 unnecessary no-sink's, MasterDuke++
08:36
lizmat afk for a few hours&
jnthn lizmat: nqp::stmts will not, it's just too low level 08:43
STATEMENT_LIST probably should
lizmat jnthn: ok, so I will not use STATEMENT_LIST to prevent sinking 10:30
m: class A { method sink { say "sunk" } }; my $a = A.new; $a # shouldn't this just say "sunk" ? 10:35
camelia rakudo-moar d292d7: OUTPUTĀ«WARNINGS for /tmp/GDbzqJZ7_5:ā¤Useless use of $a in sink context (line 1)ā¤Ā»
lizmat jnthn: at appears that postfix while also doesn't sink 11:04
m: class A { method sink { say "sunk" } }; while $++ < 5 { A.new } # sinks 11:05
camelia rakudo-moar d292d7: OUTPUTĀ«sunkā¤sunkā¤sunkā¤sunkā¤sunkā¤Ā»
lizmat m: class A { method sink { say "sunk" } }; A.new while $++ < 5 # doesn't sink
camelia ( no output )
lizmat I guess that's one of the reasons MasterDuke could remove the no-sinks in many places without problems
question is: this is probably a bug, right ?
dalek kudo/nom: 57d66ee | lizmat++ | src/core/Iterator.pm:
Remove unnecessary no-sinks from default Iterator

Turns out they were not needed at all because postfix while/until currently doesn't sink (which could be argued is a bug). Replaced with nqp::while/until which *are* guaranteed to not sink.
MasterDuke17++ for pursuing this
11:23
kudo/nom: 3b9b613 | lizmat++ | src/core/ (2 files):
Remove no-sink from basic List/Array iterators
11:48
kudo/nom: 2095ed6 | lizmat++ | src/core/Any-iterable-methods.pm:
Remove no-sink from the grep family
12:16
[Tux] Drrrrrrrrrrrrrrrrrum Rrrrrrrolllllllllllllllllllllllllllllll ā€¦ā€¦ā€¦ 14:36
This is Rakudo version 2016.05-79-g2095ed6 built on MoarVM version 2016.05-18-g1339332
test 18.609
test-t 10.702
csv-parser 21.906
YiiiiiiiiiHa! 14:37
timotimo wow 14:38
that's an improvement!
how many "return" statements are in your code all in all, btw? 14:39
because that's going to get super crazy improvement soon
and after a bit more complex optimization later on it'll almost be free
nine Woah! I would love to know what exactly was responsible for this speedup :) 14:43
[Tux] timotimo, 47 14:45
timotimo [Tux]: any clue how many of them are on hot paths? 14:46
[Tux] moment ā€¦
jnthn Also, note that every routine will get a little faster due to less overhead from return related stuff too, once that stuff lands 14:47
timotimo \o/ 14:48
[Tux] 6 are real hot (when no parse errors happen)
19 including end-of-row and end-of-file states 14:50
many more when extended features are used
masak [Tux]: how many can be trivially removed, because they're the last line of a routine? 14:51
[Tux] none
lizmat and I already did that
masak aha. 14:53
[Coke] nice to give lizmat & jnthn some positive feedback on their speedup work. 15:05
dalek kudo/nom: b6902e5 | TimToady++ | src/core/Exception.pm:
s/call/resolve caller/

  "Cannot call foo(Bar); none of these signatures match" is confusing insofar
as it can be taken to mean that foo(Bar) actually exists as a candidate. Message now reads "Cannot resolve caller foo(Bar)".
17:19
timotimo don't you mean callee? 17:26
[Coke] I htnk you would already have had to resolve the callee. 18:02
wait. 18:03
yup, I need more Coke Zero.
stmuk_ try Club Mate :) 18:06
[Coke] I think I had some of that in switzerland. Wasn't my favorite, as I recall 18:07
hoelzro I've seen very colorful language used to describe the taste of club mate 18:14
hoelzro doesn't care for it either
I think it's an acquired taste 18:15
[Coke] recalls finding an ample supply of Zero there, though.
mst hoelzro: I would rather drink my own urine. 18:23
hoelzro haha 18:41
that's some of the colorful language I've seen employed =)
stmuk_ likes it 18:48
lizmat nine: I think it's 57d66ee76aa727b7ed 20:03
mostly
dalek kudo/nom: 8cfa6c7 | lizmat++ | src/core/Any-iterable-methods.pm:
Streamline .unique

20% faster for all unique values, 30% faster for all identical values.
  - remove unnecessary no-sink's
  - use nqp::eqaddr instead of =:=
  - more generally, use nqp::ops
20:30
[Coke] is the hope that eventually spesh will be smart enough to make rakudo ops like =:= fast enough to use? 20:34
s/fast.*/as fast as nqp ops/ ? 20:35
lizmat that is my hope, yes 20:37
in profiles, infix:<=:=> typically takes 2% of the CPU in any type of iterator 20:38
fwiw, I think the nqp::p6bool is to blame there 20:39
jnthn The problem is that it's a megamorph, and spesh is pretty awful and coping with those. 20:41
(with regard to =:=) 20:42
[Coke] megamorph is a MTG term. Does it mean here that it has a lot of multis? 20:46
jnthn MTG is a TLA I don't know :P 20:47
Not "a lot of multis", but rather "called with a lot of different argument types"
[Coke] magic the gathering, a collectible card game. :) 20:48
jnthn oh :)
timotimo right, because we =:= all kinds of different types
even though it doesn't actually make any difference to the optimization in this very case
jnthn Yeah. Spesh in its present form produces specializations by type, and doesn't yet try to track if the specialization is actually more general :) 20:49
And it puts a limit on how many specializations it'll make, and inlining only uses existing specializations of the target.
Which between them mean bad things for =:= 20:50
(But fine things for many, many cases)
We have the same problem with .sink, which can be called on a huge number of argument types, but just evaluates to Nil 20:51
And various other things
jnthn gets an early night o/ 21:07
lizmat good night, jnthn 21:09
dalek kudo/nom: 4173600 | lizmat++ | src/core/Iterator.pm:
Temporary fix for RT #128357
21:13
kudo/nom: 8887a7c | lizmat++ | src/core/Any-iterable-methods.pm:
Streamline .repeated, like .unique
21:28
kudo/nom: 87e91cc | lizmat++ | src/core/Any-iterable-methods.pm:
Streamline .squish, like .unique
21:50