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.0094060.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.018773874154sOld: 0.02685544979294545129sNew: 0.03744932214446569735sOLD 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.181108744615sOld: 0.194581sNew: 0.339799sOLD 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.179466286925sOld: 0.187858sNew: 0.323713sOLD 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.2436865934914sOld: 0.4669465326911026964sNew: 0.43620270221319541080sNEW 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.20398275121742sOld: 0.442708sNew: 0.477549sOLD 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.024371067647sOld: 4.4153811237141000001sNew: 4.527691621773939913564sOLD 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.00125419454sOld: 0.0860958764923106430sNew: 0.072372sNEW 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 |