Zoffix Nope. Removed that check and still only first instance gets optimized. 00:00
Would be awesome to discover that only first occurances of ALL ops are optimized :D
ffs whyyy 00:21
`method optimize_call($op) {` this never gets called on the second occurance of ≥ 00:22
oh man, indeed, it optimizes just one call with just my changes 00:32
*without my changes
$ RAKUDO_OPTIMIZER_DEBUG=1 ./perl6 -e 'say 2 >= 5; say 2 >= 5' 2>&1 | grep ZOF
ZOF1: [0] &infix:«>=»
ZOF1: [1] &say
ZOF1: [2] &say
^ added a print statement to optimize_call. And it prints just once for the op
Oh, man, it's a proper real bug \o/ 00:42
DIBS!! I called it. No one debug this. I wanna fix it :D
samcv My final grant report is now up! cry.nu/grant-report/ 00:50
Zoffix woooo 00:51
samcv \o/\o/ 00:52
Zoffix That's a huge amount of work done. samcv++
w00t got a fix 01:15
Zoffix crosses fingers and stresstests
This is a 1337 bug :) 01:17
Literally... line number 1337 is one of the affected lines :P 01:18
bah "Parse errors: Tests out of sequence. Found (10) but expected (8)" that's no good :D 01:20
Geth rakudo/nom: 8be3eb8ec8 | (Zoffix Znet)++ | src/Perl6/Optimizer.nqp
Remove trailing whitespace
01:37
Zoffix goes to bed and will renew the hunt anew 02:07
I called dibs!
geekosaur wonders how much it will suck to use a role for the multiline marker and .? to invoke the message in the error handler.. 03:02
travis-ci Rakudo build failed. Zoffix Znet 'Simplify conditional 03:05
travis-ci.org/rakudo/rakudo/builds/279771311 github.com/rakudo/rakudo/compare/8...f0ab4f0809
buggable [travis build above] ✓ All failures are due to: GitHub connectivity (1 failure).
[Tux] This is Rakudo version 2017.09-90-g36f0ab4f0 built on MoarVM version 2017.09.1-36-gfbd89898 06:50
csv-ip5xs 1.359 - 1.372
test 9.995 - 10.100
test-t 3.430 - 3.547
csv-parser 12.452 - 12.610
Geth rakudo/nom: b0af549daf | (Elizabeth Mattijsen)++ | 5 files
Remove trailing whitespace
06:59
rakudo/nom: 8cf083c709 | (Elizabeth Mattijsen)++ | 39 files
Remove trailing whitespace in NQP land
07:19
lizmat m: class A { has $.a }; A.a # auto-generated accessors should probably have a :D invocant type ? 07:37
camelia Cannot look up attributes in a A type object
in block <unit> at <tmp> line 1
lizmat Question: how do I change a A to a A:D in World.nqp ? 07:38
there's a "create_coercion_type", but that appears to be for Action usage only 07:39
in any case, I don't know how to specify the "constraint" parameter on that
jnthn timotimo ^^^ :-) 07:40
other question: is it possible for a method to get JITted, but not cached in the method cache ? 07:41
I'm seeing that the generated BUILDALL gets JITted, but I also see it not being method cached (judging from the calls to find_method) 07:42
moritz is that because it's a submethod? 07:43
lizmat: also, there $*W.create_definite_type for the Foo:D type objects 07:44
lizmat moritz: cool
no, it's not a submethod (afaik :-) 07:45
moritz: any suggestions as to the first parameter of create_definite_type ? 07:52
$package_type.HOW does not seem to be it
"Unexpected named argument 'base_type' passed" during setting *parsing* 07:53
moritz $*W.create_definite_type($*W.resolve_mo($/, 'definite'),
lizmat moritz: I don't have a $/ at that point :-(
moritz that's how it's used throughout Actions.pm
lizmat: can you look up DefiniteHOW at that point? 07:54
lizmat with find_symbol you mean ?
yeah, that seems to do the trick 07:58
alas, only for setting itself, not for core.d setting :-( 08:02
or for any execution: Could not locate compile-time value for symbol Perl6::Metamodel::DefiniteHOW 08:05
pmurias Am I right that testing that 3.base(10, $huge_number_of_digits) throws and OutOfRange exception is implementation dependent and should be moved from roast to rakudo tests?
lizmat I think we have quite a few tests like that in roast 08:06
so, not sure
pmurias I moved a one that tested a limit with infix:x out of roast already 08:07
lizmat well, it can't hurt :-) 08:09
pmurias the moving out or the 'too big to fit in memory for sure' check? 08:10
lizmat yeah :-)
jnthn moritz timotimo anyways, my work on :D-ing invocant of auto-generated accessors: gist.github.com/lizmat/e67ae4d93c3...d7f77571b2 08:15
travis-ci Rakudo build passed. Elizabeth Mattijsen 'Remove trailing whitespace in NQP land' 08:30
travis-ci.org/rakudo/rakudo/builds/279836100 github.com/rakudo/rakudo/compare/b...f083c709e6
lizmat afk for a few hours& 08:49
pmurias m: my uint64 $a = -10;say $a; 09:00
camelia -10
Geth nqp: 771c893393 | pmurias++ | 5 files
[js] Implement int16 and int32
09:09
jnthn morning o/ 09:18
yoleaux 25 Sep 2017 22:48Z <Zoffix> jnthn: feedback on your blog from Twitter: twitter.com/hercynium/status/912443716836741120
jnthn Well, that beats waking up to a bug report :D
jnthn still a bit headachey, alas :S 09:19
travis-ci NQP build failed. pmurias '[js] Implement int16 and int32' 09:22
travis-ci.org/perl6/nqp/builds/279872604 github.com/perl6/nqp/compare/a254c...1c893393d6
Geth nqp: 4513eb66c8 | pmurias++ | 2 files
[js] Make div_i by zero throw an exception
09:26
nqp: 8e780a82c0 | pmurias++ | t/nqp/059-nqpop.t
Test that division by zero throws an exception
pmurias jnthn: morning 09:28
jnthn o/ pmurias
lizmat: Yes, a method could get JITted but not cached, those two are orthoganol. If it's not cached, maybe you're adding the genreated BUILDALL method *after* the call to publish_method_cache? 09:29
lizmat: About the lookup, I think we install it as just Metamodel::DefiniteHOW 09:32
pmurias jnthn: hmm, a 32bit backend will have to use special int64 ops to make infix:<+> work on int64? (as add_i etc are 32 bit on it) 09:36
jnthn pmurias: hmm indeed. I guess yes, but we also statically know widths of things when we're dealing with native types 09:39
So can probably do some analysis to make it cheaper if needed 09:40
Geth rakudo: Gnouc++ created pull request #1172:
Make lazy range works as Array index
10:39
roast: Gnouc++ created pull request #334:
Lazy range as Array index
lizmat jnthn: Metamodel::DefiniteHOW was indeed the answer 11:36
so now the accessors get autogenerated with a :D on the invocant 11:37
however, even if the signature is now correct, it doesn't generate the correct error message yet: 11:38
$ 6 'class A { has $.a }; dd A.can("a")[0].signature; A.a'
:(A:D $: *%_)
Cannot look up attributes in a A type object
it does if I provide the method manually: 11:39
$ 6 'class A { has $.a; method a(A:D:) { $!a } }; dd A.can("a")[0].signature; A.a'
:(A:D $: *%_)
Invocant of method 'a' must be an object instance of type 'A', not a type object of type 'A'. Did you forget a '.new'?
even though they have the same signature
Geth rakudo/nom: 33e113a2af | (Elizabeth Mattijsen)++ | src/Perl6/World.nqp
Make auto-generated accessors have :D on the invocant

This should provide for a better error message when called as a class method. It doesn't yet, though, but at least the signature is correct. So this is still a work in progress.
11:40
timotimo looks into giving an indication about in-doublequote-string-ness when an undeclared variable got found 11:44
lizmat jnthn: wrt timing of the publishing of the method cache: spot on!
timotimo cool, we have $*LASTQUOTE 11:46
not sure how exactly the exception should be changed, maybe a subclass, or maybe a role to mix in 11:48
looks like i didn't understand lastquote properly 12:09
i'm not sure why runaway quote detection should work with $*LASTQUTE since it only gets set once the quote has finished 12:14
by checking for @*nibbles i can get it to figure out it's inside a string 12:21
oh, except it's always definite 12:22
looks like a @*dynamic var is automatically turned into an empty nqp::list when accessed but not defined 12:24
Zoffix m: say @*meows 12:25
camelia Dynamic variable @*meows not found
in block <unit> at <tmp> line 1
timotimo in nqp
nqp: say(nqp::isconcrete(@*foo))
camelia 1
Zoffix :}) 12:26
timotimo by just setting a $*is-nibbling at the very beginning of the nibbler i can get it to properly differentiate 12:28
of course now it thinks "{ $foo }" is "inside a double-quoted string" 12:31
which isn't incorrect, but not helpful
i wonder if $*ESCAPEBLOCK is interesting here 12:35
it's what the c1 aka closure interpolation thing sets, but there's other code that unsets it and i'm not sure about the interplay
pmurias do we want CUnion to be actually part of the spec? 12:38
(we only have a fudged test for a bug in unsigned integers in a CUnion) 12:39
Zoffix I think all the NativeCall tests are in rakudo's t/*, not roast, so probably shouldn't be part of the spec 12:52
awwaiid I think NativeCall at some level should be part of the spec, as that is a key element to alternative implementations being able to use many libraries 13:00
lizmat tends to agree
Zoffix Is there a way to non-explosively check if an attribute exists in nqp? 13:04
m: class Foo { method x () { try say($!baz) } }; Foo.new.x
camelia 5===SORRY!5=== Error while compiling <tmp>
Attribute $!baz not declared in class Foo
at <tmp>:1
------> 3s Foo { method x () { try say($!baz) } }7⏏5; Foo.new.x
expecting any of:
horizontal whitespace
postfix
Zoffix Trying to add a bunch of debug prints to dump an attribute to optimizer with search and replace and the attribute isn't available in all the places.
lizmat try { } ?? 13:05
Zoffix m: class Foo { method x () { try { say($!baz) } } }; Foo.new.x
camelia 5===SORRY!5=== Error while compiling <tmp>
Attribute $!baz not declared in class Foo
at <tmp>:1
------> 3o { method x () { try { say($!baz) } } }7⏏5; Foo.new.x
expecting any of:
horizontal whitespace
postfix
Zoffix m: class Foo { has $!baz; method x () { $!baz := 42; say(try nqp::getattr(self, Foo, q|$!baz|)) } }; Foo.new.x 13:10
camelia 5===SORRY!5=== Error while compiling <tmp>
Could not find nqp::getattr, did you forget 'use nqp;' ?
at <tmp>:1
------> 3ay(try nqp::getattr(self, Foo, q|$!baz|)7⏏5) } }; Foo.new.x
Zoffix nqp: class Foo { has $!baz; method x () { $!baz := 42; say(try nqp::getattr(self, Foo, q|$!baz|)) } }; Foo.new.x
camelia 42
Zoffix nqp: class Foo { method x () { say(try nqp::getattr(self, Foo, q|$!baz|)) } }; Foo.new.x 13:11
camelia
lizmat that'd be the one :-)
Zoffix "Segmentation fault" :) 13:16
timotimo nice
can you paste the code that does that? 13:17
Zoffix perl -pi -e 's/(\s*(?:multi\s+)?(method|sub|submethod)\s*([^\s({]+)[^{]+\{)/$1 nqp::say("$2 $3 [{try nqp::getattr(self, Perl6::Optimizer, q|\$!chain_depth|)}]");/g' src/Perl6/Optimizer.nqp
then try to compile 13:18
timotimo had to disable jit, trying again 13:30
i see it's getting an actual null pointer as the object to call getattr on
crap, without jit it goes through 13:31
that's no fun 13:35
Zoffix: subs don't have a self, how is that supposed to work? :) 13:44
no good reason to have an actual null pointer there
but still
nqp: sub test($foo) { try nqp::getattr(self, NQPArray, q|$!doesntmatter|) }; for nqp::xx(1, 1000) { test(1) } 13:46
camelia No registered operation handler for 'xx'
at gen/moar/stage2/QAST.nqp:1587 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/QAST.moarvm:compile_op)
from gen/moar/stage2/QAST.nqp:5864 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/QAST.moarvm:compile_node)
Zoffix I thought that's what it was, but it doesn't segfault on a golfed example
timotimo nqp: sub test($foo) { try nqp::getattr(self, NQPArray, q|$!doesntmatter|) }; loop { test(1) }
camelia Confused at line 2, near "loop { tes"
at gen/moar/stage2/NQPHLL.nqp:708 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/NQPHLL.moarvm:panic)
from gen/moar/stage2/NQP.nqp:919 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/nqp.moarvm:comp_unit)
from gen/mo…
Zoffix nqp: class Z {}; sub foo() { nqp::getattr(self, Z, q|$!foo|) }; foo()
camelia Cannot look up attributes in a VMNull type object
at <tmp>:1 (<ephemeral file>:foo)
from <tmp>:1 (<ephemeral file>:<mainline>)
from gen/moar/stage2/NQPHLL.nqp:1529 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/NQPHLL.moarvm:eval)
from gen/moar/st…
timotimo mhm
could be param_sp not giving vmnull in the jit if the argument number is out of bounds 13:49
though we should just outright reject self where no self exists
Zoffix oh wait it does segfault, if you repeat it enough times to git 13:51
nqp: nqp::while(1,try nqp::getattr(self, Z, q|$!foo|))
camelia (signal SEGV)
Zoffix *jit
timotimo oh, no, this is getlex_no actually
interesting 13:54
if it wants an object register, it won't throw an exception when the lexical isn't found, instead it returns NULL 13:55
which the interpreter turns into VMNull for us, but the jit has no code for that case
Zoffix Ah
timotimo it just keeps the null around
ok, works now 14:01
Zoffix \o/
timotimo pushed the commit 14:02
might have wanted to test more than just core setting comp, though
lizmat timotimo: re runaway quotes, TimToady just had some words about that on perl6-users 14:06
timotimo i just read that
geekosaur ...and I just had a response because it confuses me a bit 14:07
lizmat www.nntp.perl.org/group/perl.perl6...g4367.html # for others interested
geekosaur I suspect we're thinking about this in different ways
lizmat afk&
Zoffix ZofBot: this bug thinks it's tough tomatoes 15:01
ZofBot Zoffix, that's the setup I'm using? strawberry & VS2016 er, 17 ah sorry i misunderstood
Zoffix ZofBot: I think I found it! 15:27
ZofBot Zoffix, sorry if these are stupid questions
Zoffix It look very tasty. So juuicy 15:28
AlexDaniel Zoffix++ # for having so much fun doing it :) 15:30
oh, runaway quotes… I can relate to that 15:35
skids I only have one thing to say about runaway quotes: " 15:37
AlexDaniel hehe, well… ” 15:40
(some will probably notice that my quote didn't fix a thing :P ) 15:41
anyway, I think we had a ticket for that
I didn't read the discussion yet, maybe it was already mentioned
ok there's this but it's different RT #130261 15:43
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130261
Zoffix AlexDaniel: yeah, and it has a very juice perf improvement 15:44
Just need to mop up a couple of spectest failures somehow
*juicy
like, 78x juicy 15:46
AlexDaniel .tell MasterDuke did we have a ticket for 「say “foo"; my $x = 42; say $x」 ?
yoleaux AlexDaniel: I'll pass your message to MasterDuke.
jdv79 not 79? i was born in that year.
Zoffix oh, wait, typed too many zeros, it's 12x :( 15:48
skids Eh, at least you get to use the word "dozenfold" 15:49
AlexDaniel Zoffix: I'm wondering what can we do to make sure these things get noticed faster. Any ideas?
Zoffix oh man clean spectest \o/ 15:57
ZOFVM: Files=1280, Tests=152177, 148 wallclock secs (22.06 usr 3.79 sys + 3099.61 cusr 244.16 csys = 3369.62 CPU) 15:58
AlexDaniel that's like… 5 seconds slower? :)
Zoffix That's because there's one test file that runs that long 15:59
m: for ^1000_0000 { 2 < 2; 3 < 3 }; say now - INIT now
camelia WARNINGS for <tmp>:
3.99756666
Useless use of "<" in expression "2 < 2" in sink context (line 1)
Zoffix This is now 6x faster
AlexDaniel :OOOO
Zoffix AND fixes the warning for 3 < 3 :) 16:00
timotimo what, the totally regular comparison ops? 16:03
Zoffix m: for ^1000_000 { 2 < 3; 2 < 3 < 4; 2 (elem) 4 }; say now - INIT now 16:04
This is now 36x faster :P
timotimo: all chained ops
camelia (timeout)WARNINGS for <tmp>:
Zoffix runs another stresstest before pushing
timotimo damn, i like that 16:05
Zoffix It sounds a bit too good to be true, so I hope I didn't mess up anything :) 16:06
xkcd.com/221/
AlexDaniel m: say “foo"; my $x = 42; say 42 16:07
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$x' is not declared
at <tmp>:1
------> 3say “foo"; my 7⏏5$x = 42; say 42
AlexDaniel Variable '$x' is not declared (in double quotes started at line 1) 16:08
or something like that?
timotimo you're right, it's very easy to do the wrong thing very fast
jnthn m: use v6.d.PREVIEW; await start await start Mu 16:09
camelia ( no output )
AlexDaniel buggable: LTA 16:10
jnthn m: use v6.d.PREVIEW; my $p = Promise.new; $p.keep(Mu); await start await $p
camelia An operation first awaited:
in code at <tmp> line 1

Died with the exception:
Type check failed in binding to parameter 'result'; expected Any but got Mu (Mu)
in code at <tmp> line 1
AlexDaniel buggable: tag LTA
buggable AlexDaniel, There are 184 tickets tagged with LTA; See fail.rakudo.party/t/LTA for details
jnthn aha
(fixed locally, noticed while hunting another bug) 16:11
Geth rakudo/nom: a92d0369f8 | (Zoffix Znet)++ | src/Perl6/Optimizer.nqp
Fix poisoning of chain depth detection

Affects all `chain` ops. Makes 6x faster: `2 < 2; 3 < 3` (10_000_000 iterations) Makes 36x faster: `2 < 3; 2 < 3 < 4; 2 (elem) 4` (1000_000 iterations)
There is logic that converts a `chain` op with two non-chain kids into a ... (12 more lines)
16:15
Zoffix Please review, 'cause this is only my second successful excursion into the optimizer and I don't know what I'm doing :)
Forgot to mention in the comit but the chain depth reduction the commit adds is done a few lines down, but it's missed because of the `return` in the conditional where the commit went in 16:16
hm.. /me notices s/$!chain_depth := $!chain_depth - 1/$!chain_depth := 0/ 16:17
Geth rakudo/nom: e5c1746232 | (Jonathan Worthington)++ | src/core/Awaitable.pm
Liberalize await handle result argument type

So that `await` on an already kept Promise, when kept with a non-Any value, will not explode.
16:19
rakudo/nom: 6e42b37e1b | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm
Add "no queue progress" deadlock heuristic

Will want some further tuning, but this handles the case where we do not start enough threads because we are working hard on, say, events fired by the timer queue, but not making any real progress because the general queue is not making any progress at all. Fixes hang that some low-core-count users observed in S17-supply/syntax.t.
timotimo pff, i will not have someone call me a "low-core-count user" like that! :P 16:20
jnthn :D 16:21
Zoffix :D
jnthn I'm one too when I use my VM ;)
Turns out whatever's wrong with cro-websocket, it's not the same thing as was wrong with S17-supply/syntax.t, alas 16:23
Geth rakudo/nom: c9f1e05a5b | (Zoffix Znet)++ | src/Perl6/Optimizer.nqp
Simplify statement

The conditional restricts the value to 1, so we know the result already, no need to calculate it.
jnthn So still one thing to hunt down 16:24
As fallout from the supply concurrency changes
timotimo right, what you saw in cro?
jnthn Yeah...oddly, only in one test in the websockets impl 16:25
In the websocket client, of all places
AlexDaniel FWIW recently I introduced [ANNOYING] and [9999] tags in RT. Dunno if these are useful but we'll see. 16:29
Zoffix What's 9999?
AlexDaniel m: say (4,5,6).tail(-9999999999999999999)
camelia Cannot unbox 64 bit wide bigint into native integer
in block <unit> at <tmp> line 1
AlexDaniel hm this one is fixed maybe
but yeah, anything related to overflows 16:30
Zoffix So… I'm adding a mexico->texas converter to optimizer that, for start, will convert ≥, ≤, and ≠ to texas version. They're 50x slower than texan versions ATM
AlexDaniel maybe I should've just called it [OVERFLOW] but that's no fun 16:31
buggable: tag 9999
buggable AlexDaniel, There are no tickets tagged with 9999
AlexDaniel because at least this does not work…
Zoffix Actually 22x
9999 is a meaningless tag, unless you're going to explain it to everyone :) 16:32
AlexDaniel well: rt.perl.org/Search/Simple.html?q=%5C9999 16:33
Zoffix m: 4 ≤ 5
camelia WARNINGS for <tmp>:
Useless use of "≤" in expression "4 ≤ 5" in sink context (line 1)
Zoffix hm, wonder if the conversion will make that one name the wrong op :/
MasterDuke AlexDaniel: how is RT #130261 different from your question? 16:38
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=130261
AlexDaniel this one does not reach the end of the file 16:39
m: say "foo'; my $x = 42
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$x' is not declared
at <tmp>:1
------> 3say "foo'; my 7⏏5$x = 42
AlexDaniel it blows up on $x
MasterDuke ah, right
AlexDaniel ok I created RT #132168 16:43
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=132168
Zoffix Hey, cool, found a nice use for R op: 16:49
m: say [R/] «0.009406␤0.2081962»
camelia 22.134404
Zoffix Copy-pasting a string with two numbers I need to divide and didn't have to edit it :)
jnthn Ahh, hmm.
timotimo cute. 16:50
jnthn Well, I figured out, to some degree, the Cro::WebSocket bustage in so far as "I can easily patch it there"
Zoffix Hm, weird. Even after my change to rewrite &infix:<≤> to &infix:«<=» it still comes out 16% slower 16:51
timotimo is it a trap that's easy to fall into?
given you did? :)
jnthn I didn't actually write that bit of the code
Zoffix Oh wait, I was running the wrong compiler (forgot the ./) 16:52
timotimo ah!
jnthn But the trap is that `await` doesn't behave like the good way it's meant to in 6.d 16:54
A `use v6.d.PREVIEW` tossed at the top of the file works in place of a patch too
There's a mitigation for an await happening during the tapping of a Supply 16:56
Unfortunately it relies on the $*AWAITER mechanism being used
I wonder if I can make that mechanism happen while still forcing 6.c blocking 16:57
Anyways, will rest a bit now 16:58
MasterDuke wonders ... drumroll ... how long we're going to await for 6.d? 16:59
Zoffix New Years \o/
can't ssh to hack :/ ssh hack.p6c.org gave me ssh_exchange_identification: Connection closed by remote host and ssh [email@hidden.address] just hangs :/ 17:00
Also, something's wrong with SourceBaby
s: &say
SourceBaby Zoffix, Something's wrong: ␤ERR: Unhandled exception: Missing or wrong version of dependency 'src/Perl6/Grammar.nqp' (from 'gen/moar/main.nqp')␤ at <unknown>:1 (/home/zoffix/services/sourceable/building-perl6/perl6.moarvm:<dependencies+deserialize>)␤
Zoffix Oh wait, I have the keys to the hack thingamajig 17:01
Zoffix calls out "drive ran out of space"
AlexDaniel
.oO( how many new years are required for v6.d? )
Zoffix It's the first one, innit? 17:02
MasterDuke: some recent discussion: irclog.perlgeek.de/perl6-dev/2017-...i_15210125 17:03
Zoffix notices the switch to 6.d mode
And I'm hacking on optimizer bugs :P
jdv79 jnthn: rail is cool overall but lately ive been into funiculars. 17:07
neatest one so far is the "water powered" one in wiesbaden. 17:08
steepest im nkt sure. either heidelberg or the one outside tokyo. 17:10
mount takao 17:11
timotimo i'm surprised by the size of overhead CArray's ASSIGN-POS has over nqp::bindpos 17:16
the difference between ASSIGN-POS and using postcircumfix:<[ ]> on the other hand is not too big 17:17
Geth rakudo/nom: 6ec21cb473 | (Zoffix Znet)++ | src/Perl6/Optimizer.nqp
Restore perf of ≥, ≤, and ≠ to be same as Texas versions

By having static optimizer change them to Texas variants.
Fixes(?) RT#131626: rt.perl.org/Ticket/Display.html?id=131626
17:24
Zoffix c: HEAD use lib </home/bisectable/git/whateverable/data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; b 100_000, { $ = rand >= rand }, { $ = rand ≥ rand } 17:52
committable6 Zoffix, ¦HEAD(6ec21cb): «Bare: 0.018773874154s␤Old: 0.02685544979294545129s␤New: 0.03744932214446569735s␤OLD version is 39% faster»
Zoffix c: HEAD use lib </home/bisectable/git/whateverable/data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; b 10000_000, { $ = rand >= rand }, { $ = rand ≥ rand }
committable6 Zoffix, ¦HEAD(6ec21cb): ««timed out after 10 seconds» «exit signal = SIGHUP (1)»» 17:53
Zoffix c: HEAD use lib </home/bisectable/git/whateverable/data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; b 1000_000, { $ = rand >= rand }, { $ = rand ≥ rand }
committable6 Zoffix, ¦HEAD(6ec21cb): «Bare: 0.181108744615s␤Old: 0.194581s␤New: 0.339799s␤OLD version is 74% faster»
AlexDaniel fwiw you can also use ‘data/all-modules/…’ as it is in the same directory 17:54
Zoffix I don't get it. How does the texas version manage to be 74% faster if the optimizer rewriting the ≥ to >=
Which apparently works for ≤ and ≠
c: HEAD use lib <data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; b 1000_000, { $ = rand <= rand }, { $ = rand ≤ rand }
committable6 Zoffix, ¦HEAD(6ec21cb): «Bare: 0.179466286925s␤Old: 0.187858s␤New: 0.323713s␤OLD version is 72% faster»
Zoffix oh :|
c: HEAD use lib <data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; $ = rand <= rand for ^300; $ = rand ≤ rand for ^300; b 1000_000, { $ = rand <= rand }, { $ = rand ≤ rand } 17:55
committable6 Zoffix, ¦HEAD(6ec21cb): «Bare: 0.2436865934914s␤Old: 0.4669465326911026964s␤New: 0.43620270221319541080s␤NEW version is 7% faster»
Zoffix c: HEAD use lib <data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; $ = rand >= rand for ^300; $ = rand ≥ rand for ^300; b 1000_000, { $ = rand >= rand }, { $ = rand ≥ rand }
committable6 Zoffix, ¦HEAD(6ec21cb): «Bare: 0.20398275121742s␤Old: 0.442708s␤New: 0.477549s␤OLD version is 7% faster»
Zoffix Hm, OK, nevermind. I guess my test for perf is just crap
This one: gist.github.com/zoffixznet/8d4296b...a1dc7a43b3 17:56
AlexDaniel (fwiw another bonus point: if you use a bunch of modules and it times out the first time, then you may want to run it again because chances are the first time it was precomp taking all that time)
Zoffix AlexDaniel: and you were asking earlier if I had ideas. I'm guessing something like that ^ where you measure against some "ruler" time that's made up by using a bunch of different code snippets and then combined and median value is found 17:57
AlexDaniel Zoffix: hmm… but any chance we can visualize what the optimizer is doing or something like that?
Zoffix AlexDaniel: you can turn on RAKUDO_OPTIMIZER_DEBUG and it'll spit out a bunch of output 17:58
huggable: optimizer debug
huggable Zoffix, perl -pi -e 's/^(\s*(?:multi\s+)?(method|sub|submethod)\s*([^\s({]+)[^{]+\{)/$1 nqp::say("$2 $3 [{try nqp::getattr(self, Perl6::Optimizer, q|\$!chain_depth|)}] line $.") if nqp::atkey(nqp::getenvhash, "DDD");/gm' src/Perl6/Optimizer.nqp
Zoffix AlexDaniel: ^ I also use this line that makes it spit out each method as its called, so you can follow the chain of calls
Zoffix suspects we're talking about different things :) 17:59
man, that test is reporting difference between ops as 2.3x, but measuring it by hand shows 7% diff at most and logically there's no diff between them because they get rewritten to the same op 18:01
Zoffix gives up on trying to write test for this
MasterDuke Zoffix: i assume --target=optimize looks the same for both? 18:04
Zoffix MasterDuke: as far as I can tell yeah: gist.github.com/zoffixznet/d617f11...c46324c4ff 18:17
MasterDuke: and before the commit that added this rewrite, the Mexico versions were 20x slower, now they show up as same speed on my VM, with committable giving 7%-90% diff, with my test run in commitable giving 2.2x dif 18:18
MasterDuke huh 18:20
lizmat Zoffix: re 6ec21cb47394527983f , I wonder whether we shouldn't do this substitution earlier, while parsing. Also, there's quite a bunch of set operators that would benefit from this, I think 18:36
Zoffix I measured ∈ vs (elems) and there was no diff
c: HEAD use lib <data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; b 100_000, { $ = rand (elem) rand }, { $ = rand ∈ rand } 18:37
committable6 Zoffix, ¦HEAD(6ec21cb): «Bare: 0.024371067647s␤Old: 4.4153811237141000001s␤New: 4.527691621773939913564s␤OLD version is 2% faster»
Zoffix c: HEAD use lib <data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; b 100_000, { $ = rand (>=) rand }, { $ = rand ⊇ rand }
committable6 Zoffix, ¦HEAD(6ec21cb): ««timed out after 10 seconds» «exit signal = SIGHUP (1)»»
Zoffix c: HEAD use lib <data/all-modules/zoffixznet/perl6-Benchy/lib>; use Benchy; b 100_0, { $ = rand (>=) rand }, { $ = rand ⊇ rand }
committable6 Zoffix, ¦HEAD(6ec21cb): «Bare: 0.00125419454s␤Old: 0.0860958764923106430s␤New: 0.072372s␤NEW version is 18% faster»
Zoffix s: &infix:<⊇>, \(rand, rand) 18:38
SourceBaby Zoffix, Sauce is at github.com/rakudo/rakudo/blob/6ec2...et.pm#L153
lizmat so why *does* it matter for the math operators ?
Zoffix I think it's cause they use a capture and then slip it into the call, while these ops just take two positional args
lizmat: as for substituting earlier. I did it the only way I know how :) 18:45
lizmat :-)
Zoffix If you know of a better way, sure, go for it.
lizmat not yet, actually :-)
deep in QAST at the moment, which is quite new too me 18:46
Zoffix qast: ▸Op: :op<say>, ▸SVal: :value("Have fun!") 18:53
SourceBaby Zoffix, OUTPUT: «Have fun!␤»
lizmat yeah, something like that :-) 18:55
nqp::say("Have fun!") is so much more readable :-)
timotimo there's no reason not to fuse blocks that have no instructions in them with their successors, right? 19:10
i mean BBs in spesh
Zoffix ZOFFLOP: t/spec/S11-modules/nested.t 19:11
Geth rakudo/nom: 0961abe8ff | (Zoffix Znet)++ | src/core/Rational.pm
Fix infinilop in .^roles of class that does Rational

Bug find: irclog.perlgeek.de/perl6/2017-09-26#i_15219316
19:16
roast: b5aff33196 | (Zoffix Znet)++ | S32-num/rat.t
Test .^roles on Rational classes doesn't hang

Rakudo fix: github.com/rakudo/rakudo/commit/0961abe8ff Bug find: irclog.perlgeek.de/perl6/2017-09-26#i_15219316
19:18
skids gist.github.com/skids/08245ef93cf4...a78afe2a10 <== can anyone give me a clue how to avoid the "SC not yet resolved" here? 19:20
timotimo hm, why are you calling the result of nqplist? 19:22
also, i'm mildly surprised nqp has a concept of "is export" 19:23
skids timotimo: to get an empty nqplist. Just cargo culting the ::World stuff really. 19:25
nqp only seem to like "is export" before any aother classes, not after, I noticed. 19:26
timotimo oh, huh, ok
hllize should handle turning lists into the right thing
and since the sub takes a slurpy anyway, it shouldn't be needed to have a list 19:27
skids Just calling it as nqpsub() yields "Cannot look up attributes in a VMNull type object" 19:28
timotimo huh 19:30
Geth roast: a236ed94c4 | (Zoffix Znet)++ | S32-num/rat.t
Spec custom parametarization of Rational
19:32
roast: 940790f2a9 | (Zoffix Znet)++ | S32-num/rat.t
Must… Resist… Urge…
19:34
Zoffix & for rest of the day 19:35
Geth roast: 204fe61870 | (Zoffix Znet)++ (committed using GitHub Web editor) | S32-num/rat.t
Fix typo in comment
19:37
gfldex m: sub zPad($s, 2) {('0' x (2 - floor(log10($s))+1)) ~ $s}; zPad(0, 2) 20:50
camelia Cat object not yet implemented. Sorry.
in sub zPad at <tmp> line 1
in block <unit> at <tmp> line 1
gfldex what is a Cat object?
(And who didn't put it into Perl 6 yet?)
Zoffix lazy strings 20:51
And it needs work on grammar engine to make it work right with it 20:52
I had an attempt, but it doesn't work: github.com/zoffixznet/perl6-Kitten
As soon as you get into regexes like /.+/ you have to reify it entirely to know if you matched or not (which is why work on regex engine is needed, I think) 20:53
timotimo i expect you get that error when you "0" x Inf 20:55
m: say "0" x Inf
camelia Cat object not yet implemented. Sorry.
in block <unit> at <tmp> line 1
Zoffix well, more like /a.+b/; I've no idea how it's meant to work. Cat is mentioned in design docs encrypted.google.com/search?ie=UTF...e+Synopses
m: sub zPad($s, 2) { ('0' x (2 - floor($s && log10 $s)+1)) ~ $s }; zPad(0, 2) 20:57
camelia ( no output )
Zoffix m: sub zPad($s, 2) { ('0' x (2 - floor($s && log10 $s)+1)) ~ $s }; zPad(0, 2).say
camelia 0000
Zoffix m: sub zPad($s, 2) { ('0' x (2 - floor($s && log10 $s)+1)) ~ $s }; zPad(1, 2).say 20:58
camelia 0001
gfldex zPad is actually a multi, so I can cheat with `multi zPad(0, 2){ '00' }` 20:59
jnthn jdv79: Hm, trying to remember the last funicular I rode and I think probably one in Innsbruck, though I that one's perhaps more notable for the designs of its stations than anything particular about the funicular. :) 21:33
mudman If I want to make a small change to a critical file, do I paste it here first or past a link to a gist or make a pull request or any of the above of my choosing? 21:41
Zoffix mudman: unless you have questions about it you can just make a PR. run `make spectest` to ensure all the tests pass with the change 21:42
questions about the change I mean
You can always ask :)
mudman ok. For this time only: gist.github.com/mryan/71709f7dfb55...6b42bf1feb 21:47
Zoffix mudman: "scalar " isn't needed, but otherwise it looks OK. You can just commit it directly. I see you're in perl6 github org, so you should have the commit bit already 21:50
mudman Cool. re the scalar - just being explicit. Re the commit - yep, can commit it - just wanted to be sure the fudger wasn’t being used in ways I wasn’t aware of. Thanks for the oversight. 21:53
Zoffix Cool :
:)
jnthn Hmmm. 22:03
Think I figured out a way that we can use $*AWAITER in 6.c land but still have it do the blocking behavior 22:15
That'll, I think, fix the regression that cro-websocket detected
It'll also make the 6.c and 6.d codepaths have more in common, which I guess is only a good thing for testing 22:16
Geth roast: mryan++ created pull request #335:
Stop fudger mistaking shebang lines as directives
roast: c24c85b9e4 | (Martin Ryan)++ | fudge
Stop fudger mistaking shebang lines as directives

  See Roast RT #268
roast: 3ccd0207dd | (Martin Ryan)++ (committed using GitHub Web editor) | fudge
Merge pull request #335 from mryan/roast-RT268

Stop fudger mistaking shebang lines as directives
jnthn Well, except my first effort at it breaks things 22:19
But that can be a bug hunt for tomorrow
jnthn leaves it to spectest and goes to rest o/ 22:25
samcv ok so i'm working on uniname and finding characters which shouldn't be illegal are returning illegal 22:33
i mean they're non-characters but they're not illegal. like U+FFFF 22:34
for codepoitns above 0x10FFFF the max currently we return unassigned 22:36
<unassigned>
i'm thinking we should return <reserved> that makes the most sense. since they really aren't "illegal" they just aren't characters as in they aren't assigned unicode names and properties 22:40
and will never be used for that, but also they are not in private use area 22:41
greppable6, <reserved> 22:46
greppable6 samcv, gist.github.com/17f32924a35b32eb4f...8b4d02a2a4
samcv greppable6, <illegal>
greppable6 samcv, Found nothing!
samcv ok good
timotimo wowza. dot -Tx11 does *not* like when you pipe to it and the pipe EOFs 22:48
samcv or alternatively i could do <noncharacter> 22:50
timotimo <nonchalant> 22:51
samcv unicode seems to have reserved and unassigned synonymous 22:52
there's private use, reserved/unassigned and non-characters
the distinction between reserved and unassigned does not seem apparent and many cases they use "unassigned reserved codepoints" 22:53
as if all unassigned ones *are* inherently resereved
and non-characters are not unassigned. they've been explicitly been assigned "nothing"
as opposed to things that are just not used
ah and even unicode seems to name them <noncharacter-FDD0> for example in their data files 22:56
timotimo i'm finishing up reading your grant report 23:09
this sentence seems strange: I wrote documentation on our Unicode Collation Algorithm, which explains to the reader why the UCA solves, with examples of different single to multiple or multiple to single mappings of codepoints. 23:10
also, "people who want their strings to be unchanged unchanged"? :)
i should look into making json_fast better by using newer ops like indexim 23:14
samcv very unchanged! 23:18
will fix those errors in a bit. so i've decided we'll respond <noncharacter> for all the noncharacters, which is FDD0..FDEF plus the last 2 of every block 23:19
so i can do: 0xFFFE +& codepoint and find the last two of each block so code is fairly simple 23:20
gfldex jnthn: are you testing the new scheduler with low physical core count? 23:32
i got really odd results here 23:33
moar takes 10% CPU time while processing a large data structure
skids Any obvious repo in which to plop this? gist.github.com/skids/5b2422af6935...31e754ad87
timotimo oooooooh~ 23:42
skids Hrm unfortunately not so useful on *:sym<*> subs. 23:47
timotimo oh? :( 23:48
skids I think it just adds a duplicate entry or something. Wonder if there's a way to replace. 23:50
travis-ci Rakudo build passed. Zoffix Znet 'Restore perf of ≥, ≤, and ≠ to be same as Texas versions 23:57
travis-ci.org/rakudo/rakudo/builds/280065231 github.com/rakudo/rakudo/compare/c...c21cb47394