TimToady | MasterDuke: the next step in that process is passing back fates via the current match object rather than via a cached thread context array | 01:20 | |
we also need to redo the thing I did once that made fate numbers unique across the entire process | 01:21 | ||
(or otherwise find a way to qualify fate numbers by context) | 01:22 | ||
then we can return the extra information and pass it down to the next level in a way that it can look at and bypass the rescan | |||
MasterDuke | TimToady: so it's not a completely trivial undertaking? | 01:23 | |
TimToady | um, no... | ||
or I'd'a done it by now :) | |||
MasterDuke | heh. timotimo's description did seem a little too easy | 01:24 | |
TimToady | I think he was channeling something I said in one of my talks, where I kinda glossed over the hard bits :) | 01:25 | |
TimToady was gonna tackle it in September, but has been fighting a cephalic shingles flareup, which makes him temporarily stupider | 01:26 | ||
well, I hope it's temporary :) | |||
MasterDuke | ha. pretty sure i'm not up for the hard bits in anything named *nfa* | ||
TimToady | there are other things we can do there as well | 01:27 | |
caching the first decision based on initial character would cut down the number of initial states we have to examine, for instance | |||
MasterDuke has never heard of cephalic shingles before, but it doesn't sound pleasant | |||
TimToady | well, it's why I was blind in one eye for 14 years till I got a cornea transplant | 01:28 | |
this time we prevented it from getting back into my eye, yay | |||
it's just a bit distracting to feel like one side of one's head is on fire if you so much as touch it | 01:29 | ||
MasterDuke | understandably | 01:30 | |
hopefully not the side you sleep on if you normally sleep on your side | 01:32 | ||
TimToady | well...I would prefer to think that sleep disruption explains the stupidity more than that my trigeminal nerve is drilling holes in my brane... :) | 01:34 | |
TimToady should go eat some dinner if he doesn't want to become even stupiderer... | 01:40 | ||
Geth | rakudo: skids++ created pull request #1178: Implement metamethod shorthand syntax (RT#131478) |
02:25 | |
synopsebot | RT#131478 [new]: rt.perl.org/Ticket/Display.html?id=131478 Warning about $. when using metamethod | ||
Geth | rakudo: skids++ created pull request #1179: Fix for RT#128054 and RT#126569 ... needs experienced review ... |
03:13 | |
synopsebot | RT#128054 [open]: rt.perl.org/Ticket/Display.html?id=128054 [PARSER] In a string enclosed in parens, a {}-interpolation can't access the topic $_ of a statement modifier | ||
RT#126569 [new]: rt.perl.org/Ticket/Display.html?id=126569 [BUG] xx-repeated expression enclosed in parens can't access the topic $_ of a statement modifier | |||
lizmat | good *, #perl6-dev | 07:44 | |
yoleaux | 3 Oct 2017 22:29Z <tyil> lizmat: was this your doing? :p ghostbin.com/paste/t9opu | ||
01:30Z <Zoffix> lizmat: In case the "your doing" line needs context; there appeared to be new error, but it's our standard behaviour: irclog.perlgeek.de/perl6/2017-10-03#i_15252868 | |||
lizmat | Files=1226, Tests=75554, 387 wallclock secs (17.10 usr 6.09 sys + 2624.29 cusr 263.26 csys = 2910.74 CPU) | 08:06 | |
.tell tyil the ghostbin seems to be out of order, so I have no idea what you mean :-( | 08:07 | ||
yoleaux | lizmat: I'll pass your message to tyil. | ||
AelxDnaiel | squashable6: next | 08:22 | |
squashable6 | AelxDnaiel, ⚠🍕 Next SQUASHathon in 2 days and ≈1 hour (2017-10-07 UTC-12⌁UTC+14). See github.com/rakudo/rakudo/wiki/Mont...Squash-Day | ||
Zoffix | lizmat: it just said "ssh : nqp not found; cloning" | 10:20 | |
geekosaur | because shell error messages are not error messages, and because you know it happens to be something that is expected in some cases and therefore everyone does, yes | 10:42 | |
Zoffix | and because you didn't read the chat log where the guy said he'll try to improve it on the weekend, yes | 10:55 | |
pmurias | jnthn: a declaration_static code ref and it's clones share the lexical scope? | 11:48 | |
timotimo | "outer" is part of the static frame in moarvm i believe | 11:51 | |
so yeah, should | |||
pmurias hates the autoclosing scope hack | 12:03 | ||
timotimo | i don't know what you mean? | 12:04 | |
pmurias | when you use a lexical scope that doesn't exist yet MoarVM makes up a "fake" one | 12:08 | |
timotimo | i didn't know that | ||
pmurias | m: class Foo {...};Foo.foo; class Foo {my $foo = 123; method foo() {say($foo)}}; Foo.foo | 12:09 | |
camelia | (Any) 123 |
||
jnthn | pmurias: Most typically that means that we're going to take care of closure cloning ourselves | ||
As Rakudo does with Block.clone | |||
timotimo | ah | 12:11 | |
jnthn | pmurias: If you hate it enough you'll implement something you do like that solves the same problems but somehow better ;-) | 12:13 | |
pmurias | jnthn: I think it's the problems it solves that I hate :) | 12:14 | |
the bugs that are worked around with autoclosing I think I'll have to fix at some point to emit decent code | 12:18 | ||
user code using scopes that don't exit yet is unfortunate | 12:20 | ||
jnthn: from testing things it seems when you clone a declaration_static that has an already set outer scope you get a closure that doesn't get affected by outer scope updates but when you clone one that doesn't have it set yet, it shares it? | 12:24 | ||
Zoffix | squashable6: status | 15:18 | |
squashable6 | Zoffix, ⚠🍕 Next SQUASHathon in 1 day and ≈18 hours (2017-10-07 UTC-12⌁UTC+14). See github.com/rakudo/rakudo/wiki/Mont...Squash-Day | ||
Zoffix | m: «"mark ticket LHF and explain how to fix it" "fix it yourself and make a bug sandwich"».pick.say | 15:19 | |
camelia | fix it yourself and make a bug sandwich | ||
Zoffix | Well, you can't argue with a bot. | ||
buggable: tag lhf | |||
buggable | Zoffix, There are 4 tickets tagged with LHF; See fail.rakudo.party/t/LHF for details | ||
Zoffix | hm OTOH we could use more LHFs | 15:20 | |
ZofBot: man, 2015 Zoffix was such a n00b | 15:23 | ||
ZofBot | Zoffix, I am supposed to write a document xD damn :) it's dinner time here first www | ||
Zoffix | Anyone with OSX who can try running this: perl6 -e 'say (await start { qx/echo foo/ }).perl' | 15:26 | |
Does it output "foo\n" or something else? rt.perl.org/Ticket/Display.html?id...et-history | |||
[Tux] | This is Rakudo version 2017.09-203-g98fae3d84 built on MoarVM version 2017.09.1-553-ga4fef0bd | ||
csv-ip5xs 1.216 - 1.238 | |||
test 9.773 - 9.786 | |||
test-t 3.224 - 3.269 | |||
csv-parser 0.906 - 0.919 | |||
Zoffix | .ask AlexDaniel so what makes a ticket LHF? I figured out a fix for a couple of tickets (e.g. #125818 )and marked them LHF and commented the fix... but now I think that's kinda lame and people wouldn't wanna do these already-solved tickets. | 15:40 | |
yoleaux | Zoffix: I'll pass your message to AlexDaniel. | ||
synopsebot | RT#125818 [open]: rt.perl.org/Ticket/Display.html?id=125818 [LHF] error message: Inf.base(16) | 15:41 | |
buggable | New CPAN upload: Foo-Bar-Perl6-0.10.tar.gz by TBROWDER www.cpan.org/authors/id/T/TB/TBROW....10.tar.gz | 15:45 | |
New CPAN upload: Foo-Bar-Perl6-0.10.zip by TBROWDER www.cpan.org/authors/id/T/TB/TBROW...6-0.10.zip | |||
New CPAN upload: Foo-Bar-Perl6-1.2.3.tar.gz by TBROWDER www.cpan.org/authors/id/T/TB/TBROW...2.3.tar.gz | |||
New CPAN upload: Foo-Bar-Perl6-1.2.3.zip by TBROWDER www.cpan.org/authors/id/T/TB/TBROW...-1.2.3.zip | |||
Zoffix wonders why those URLs are 404s.... | 15:48 | ||
Does Perl6 assume the source code files are UTF-8? Or does it try to guess? | 15:49 | ||
Like, on the language level. There's a ticket to implement EVAL Buf where Buf is converted using the same methods as if it were bytes from source file.... wonder what that process is for source files | 15:50 | ||
timotimo | i think it assumes | 15:51 | |
we do have a commandline flag i believe | 15:52 | ||
--encoding=mode specify string encoding mode | |||
it doesn't say that it's for the input, though | |||
but it just passes that to the open function when reading from the filename | 15:53 | ||
ilmari | Zoffix: whatever mirror www.cpan.org is resolving to for you (and me) hasn't caught up yet | ||
timotimo | i got that from nqp's HLL/Compiler, btw | ||
ilmari | cpan.metacpan.org has them | 15:54 | |
cpan.metacpan.org/authors/id/T/TB/...DER/Perl6/ | |||
they're both fastly, but presumably different origins, and different expiry policies | |||
pmurias | jnthn: re question, I figured it out from reading the MoarVM source how it works | 15:55 | |
Zoffix | Thanks. | 15:56 | |
.tell AlexDaniel never mind. I changed my mind. The hunter does not give up their prey. Raaaaawwwrr \o/ | 16:09 | ||
yoleaux | Zoffix: I'll pass your message to AlexDaniel. | ||
AlexDaniel | Zoffix: for me personally, the fact that someone came up with a solution in their head does not discourage me from working on a ticket | 16:11 | |
yoleaux | 15:40Z <Zoffix> AlexDaniel: so what makes a ticket LHF? I figured out a fix for a couple of tickets (e.g. #125818 )and marked them LHF and commented the fix... but now I think that's kinda lame and people wouldn't wanna do these already-solved tickets. | ||
16:09Z <Zoffix> AlexDaniel: never mind. I changed my mind. The hunter does not give up their prey. Raaaaawwwrr \o/ | |||
synopsebot | RT#125818 [open]: rt.perl.org/Ticket/Display.html?id=125818 [LHF] error message: Inf.base(16) | ||
AlexDaniel | and you never know if this solution actually works | ||
Zoffix | Well, I tested it :) | 16:12 | |
jnthn | pmurias: Ah, glad you got it figured. Was busy with $other-job. :) | ||
AlexDaniel | then you might have as well committed it instead of leaving a comment :D | ||
Zoffix: maybe RT #126669 is a good example of that. Somebody investigated a little bit and proposed a solution. There's no code but it's very clear what has to be done. Great LHF ticket IMO | 16:14 | ||
japhb | Zoffix: To me LHF means two things: 1. Fixes that require little effort given their value, 2. Fixes that are small enough to help someone onramp to contributing to a code base without getting frustrated. Basically just enough to learn how to PR, write a test, mark a bug fixed, etc., and get a quick rush of happy brain chemistry. | ||
synopsebot | RT#126669 [open]: rt.perl.org/Ticket/Display.html?id=126669 [LHF][LTA] error with "need 6"/"use 6" (no "v") | ||
AlexDaniel | “of that” – a good example of a LHF ticket | ||
Zoffix wouldn't get happy brain chemistry by being the delivery boy for a fix someone else created :) | 16:15 | ||
ZofBot: I guess we're different that way! | |||
ZofBot | Zoffix, 5x faster than the top one, testing it only for numbers under 1000 gist | ||
japhb | Zoffix: That's why it's valuable to have *both* "solution-described, just do the footwork" and "solution unknown but expected easy" LHF bugs. | 16:16 | |
That way beginners can pick which to do. | |||
AlexDaniel | yeah | ||
Zoffix | m: say Blob ~~ Cool | 16:17 | |
camelia | True | ||
Zoffix | m: say utf8 ~~ Cool | ||
camelia | False | ||
Zoffix | Isn't utf8 a more precise Blob that surely can be a Cool? | ||
japhb | .oO( utf8 may think it's cool, but Cool disagrees. ) |
||
Zoffix | m: say [.^mro, .roles] with "x".encode | ||
camelia | No such method 'roles' for invocant of type 'utf8'. Did you mean any of these? does roll in block <unit> at <tmp> line 1 |
||
Zoffix | m: say [.^mro, .^roles] with "x".encode | ||
camelia | [((utf8) (Any) (Mu)) ((Blob[uint8]) (Positional[T]) (Stringy))] | ||
jnthn | m: (supply loop { emit Bool.pick }).tap: *.say | 16:18 | |
camelia | ( no output ) | ||
jnthn | m: react whenever (supply loop { emit Bool.pick }) { .say } | 16:19 | |
camelia | ( no output ) | ||
Zoffix | Blob ~~ Cool being True seems off; Blob is a role, Cool is a class. Why does it give True? :S | ||
jnthn | Zoffix: Not sure, seems odd to me also | ||
timotimo | yeah with a { } around the inner loop it works | 16:20 | |
Zoffix | m: say role Meows is repr("VMArray") is array_type(int) {} ~~ Cool | ||
camelia | True | ||
Zoffix | hm, ok | ||
jnthn | m: react whenever (supply { loop { emit Bool.pick } }) { .say } | 16:21 | |
m: (supply { loop { emit Bool.pick } }).tap: *.say | |||
timotimo: heh, nice catch | |||
timotimo | (wait for it) | ||
jnthn | I guess it's not sinking | ||
timotimo | it relies on sinking to work? | 16:22 | |
camelia | (timeout)True False False True True True False True False False False True True False False True True False False False True True False False True True False False False False False False Fa… |
||
(timeout)False True True True True False False True False False False True True False True False True False False True False True False True False False True False False False True False Tru… |
|||
jnthn | Well, more like sink context I guess | ||
lazy loop { ... } is a thing | |||
timotimo | m: react whenever (supply emit "hi") { .say } | ||
camelia | hi | ||
timotimo | mhm | ||
m: react whenever (supply { lazy loop { emit Bool.pick } }) { .say } | 16:23 | ||
m: react whenever (supply eager loop { emit Bool.pick }) { .say } | |||
m: react whenever (supply sink loop { emit Bool.pick }) { .say } | |||
Zoffix | man, someone should make camelia multi-threaded. You guys are blocking the bot for me :) | 16:24 | |
camelia | (timeout)False True True False False True True False False True False False False False True True False True False True True True True True False False False True True True False False True… |
||
(timeout)True True False True True True False False True True True False True True True False False False False False True True False False False True False False False True True True False… |
|||
(timeout)True False True True True True False True True True False True True True True False True True False False False False True True True False True True True True False True False Tru… |
|||
timotimo | m: react whenever (supply lazy loop { emit Bool.pick }) { .say } | 16:25 | |
hm, all of these work, eh? | |||
camelia | (timeout)False True False False True False True False True True True True False False True False False True True False False True False False True False False True True False False False Fal… |
||
Geth | roast: 0e9d6ff7c2 | (Jonathan Worthington)++ | S17-procasync/stress.t Test for RT #122709 |
16:36 | |
synopsebot | RT#122709 [open]: rt.perl.org/Ticket/Display.html?id=122709 [CONC][BUG] `await`ing a Promise in a different thread sometimes hangs | ||
Zoffix | Well, I now see why EVAL(Buf) was never implemented... :) it's src/core/control.pm before stuff like Blob or Stringy (or Positional, I'm guessing) are defined.... | 17:38 | |
Wonder if it even needs to be this early | 17:39 | ||
Block.pm uses it, but I think it'll be already if it's post-delcared or something | 17:40 | ||
ZOFFLOP: t/spec/S17-supply/unique.t t/spec/S11-modules/nested.t | 17:48 | ||
ZOFVM: Files=1276, Tests=152529, 156 wallclock secs (22.81 usr 3.45 sys + 3353.48 cusr 233.36 csys = 3613.10 CPU) | 17:49 | ||
Geth | rakudo/nom: 38186fcdf7 | (Zoffix Znet)++ | src/core/Real.pm Improve error on Inf.base Fixes RT#125818: rt.perl.org/Ticket/Display.html?id=125818 |
17:58 | |
synopsebot | RT#125818 [open]: rt.perl.org/Ticket/Display.html?id=125818 [LHF] error message: Inf.base(16) | ||
Zoffix | not ok 3 - .message matches /'Cannot coerce NaN to an Int'/ | 18:23 | |
# Failed test '.message matches /'Cannot coerce NaN to an Int'/' | |||
# at SETTING::src/core/Any-iterable-methods.pm line 672 | |||
# Expected: /'Cannot coerce NaN to an Int'/ | |||
# Got: Cannot convert NaN to Int: | |||
We really should do something with tests like these :/ | 18:24 | ||
Gah, it was 2016 Zoffix that added them. | 18:26 | ||
6.c-errata fails for me t/spec/S04-phasers/end.t | 18:41 | ||
But seems due to this: github.com/perl6/roast/commit/e29b...3c1a7d28cc | 18:42 | ||
I mean. errata test tests for bitshifted code while master doesn't. :| | |||
And for some reason t/packages/Test/Util.pm doesn't get recompiled or something | 18:43 | ||
nope, not it. tossed all .precomp dirs and the issue still there :S | |||
Oh, it's damn September Zoffix breaking stuff | 18:46 | ||
ZofBot: that guy's starting to piss me off | |||
ZofBot | Zoffix, I'm a bit surprised it allows it, but I guess the actual constraint is loose enough that you get away with it if you never made an instance of the class | ||
AlexDaniel | .tell MasterDuke maybe RT #123926 is for you | 18:47 | |
yoleaux | AlexDaniel: I'll pass your message to MasterDuke. | ||
synopsebot | RT#123926 [new]: rt.perl.org/Ticket/Display.html?id=123926 [BUG] LTA error message without Levenshtein distance suggestion when mistyping enum value in signature in Rakudo | ||
Zoffix | With github.com/perl6/roast/commit/0940...d986c01f22 | ||
6.c-errata t/spec/S17-supply/basic.t fails. | 18:48 | ||
Geth | nqp: fb1e5ccd39 | usev6++ | 10 files [jvm] Update stage0 for modified core op 'div_i' |
||
nqp: 6dc507f35e | usev6++ | 2 files [jvm] Die with 'Division by zero' in div_i, try 2 Without this change a division by zero led to a Java exception: java.lang.ArithmeticException: / by zero For some reasons that didn't work well with 'dies-ok'. As a result t/nqp/059-nqpop.t was blowing up on the jvm backend. With this patch 'make test' is clean, again. Also, the error message is now identical to the other two backends. |
|||
bartolin hopes he got the stage0 thing right, this time | |||
Zoffix | AlexDaniel: Looks like this needs to be applied to 6.c-errata but cherry-pick fails and I'm too lazy to fix the conflicts: github.com/perl6/roast/commit/7ece...4d30343bca | 18:50 | |
Or rather, I'm too deep down the rabbit hole for it. | |||
I went in with this to fix Inf.base(16) LTA error lol :) I guess I'm glad I didn't leave it as LHF | |||
AlexDaniel | I'll cherry-pick it now | 18:51 | |
Geth | roast/6.c-errata: 559661b979 | (Zoffix Znet)++ | 2 files Fix broken test function usage No change in the behaviour being tested. The `is_run` routine comes from Test::Util, which was recently updated. The updated version does not expect the user to do the bit shifting business on the exit code. Fix by removing that stuff from the tests that use this routine. [1] github.com/perl6/roast/commit/0940...d986c01f22 |
18:53 | |
Zoffix | ZOFVM: Files=1276, Tests=152541, 160 wallclock secs (22.61 usr 3.57 sys + 3423.62 cusr 243.30 csys = 3693.10 CPU) | 19:00 | |
Geth | rakudo/nom: 2e72652826 | (Zoffix Znet)++ | src/core/Exception.pm Implement X::Numeric::CannotConvert exception It's a generic exception to throw when a numeric cannot be converted to something (gonna use it for Inf -> Int coercion). Ideally, X::Numeric::Real would be removed and this exception be used in its place, but there are 6.c-errata tests expecting X::Numeric::Real to exist, so I left it in as just an empty subclass of X::Numeric::CannotConvert |
19:02 | |
rakudo/nom: f04bd1d617 | (Zoffix Znet)++ | src/core/Num.pm Fail with a typed exception when failing Num.Int |
|||
roast: fcee82fcff | (Zoffix Znet)++ | 2 files Do not test for exact error message text The tests are not part of 6.c-errata. The actual message changed due to removed article. Change tests to look for proper typed exception instead. |
|||
travis-ci | NQP build passed. usev6 '[jvm] Die with 'Division by zero' in div_i, try 2 | 19:04 | |
travis-ci.org/perl6/nqp/builds/283328904 github.com/perl6/nqp/compare/3b135...c507f35e28 | |||
Geth | roast: 48ea502f0d | (Zoffix Znet)++ | S32-num/base.t Test Inf/NaN.base throws useful error RT#125818: rt.perl.org/Ticket/Display.html?id=125818 Rakudo fix: github.com/rakudo/rakudo/commit/38186fcdf7 github.com/rakudo/rakudo/commit/2e72652826 github.com/rakudo/rakudo/commit/f04bd1d617 |
19:06 | |
synopsebot | RT#125818 [open]: rt.perl.org/Ticket/Display.html?id=125818 [LHF] error message: Inf.base(16) | ||
Geth | roast/6.c-errata: a4c41c25a2 | (Jonathan Worthington)++ (committed by Aleks-Daniel Jakimenko-Aleksejev) | S17-supply/basic.t Remove tests with some odd exepctations They claimed to cover RT #123477, and there are indeed tests in this file that cover that issue. However, these tests went further: they expected not only that the protocol would be enforced from the point of view of an individual tap (which is what the RT ticket was using), but also that this would carry over to future taps of the same Supply. ... (10 more lines) |
19:08 | |
synopsebot | RT#123477 [resolved]: rt.perl.org/Ticket/Display.html?id=123477 Supply.done doesn't seem to terminate anything | ||
AlexDaniel | “exepctations” huh… | ||
Zoffix | :) | ||
AlexDaniel | it feels like it could have figured it out by itself. I wonder if there's some flag to make the diff try harder | 19:10 | |
it's exactly the same chunk of code being removed, but I guess it got confused because everything below that chunk was different | 19:11 | ||
whatever | |||
Zoffix | .in 6h check if we can change X::Numeric::CannotConvert's $.target.^name to just $.target, which the .^name bit done by the user, if needed | 19:12 | |
yoleaux | Zoffix: I'll remind you on 5 Oct 2017 01:12Z | ||
Zoffix | .botsnack | 19:13 | |
yoleaux | :D | ||
Zoffix | \o/ no more synopsebot stealing snacks :) | ||
synopsebot: botsnack | |||
synopsebot | Zoffix, om nom nom nom | ||
Zoffix | :) | ||
Zoffix & | |||
gfldex | is the new JIT already active by default? | 20:12 | |
Zoffix | Yes, AFAIUI | ||
lizmat hasn't seen any speedups yet, just a slower make spectest :-( | 20:17 | ||
jnthn | Spectest is the worst case for pretty much any optimization except those that improve startup time | 20:26 | |
Test.pm is about the only thing that gets hot-ish, and in most cases the test is over before we've time to compute the optimized version | |||
lizmat | jnthn: which then also is true for any short-lived batch jobs :-( | 20:27 | |
because that's what the spectest basically is :-( | 20:28 | ||
jnthn | Well, yes and no | ||
heh, short-lived batch job...where's the batch? :P | 20:29 | ||
But such jobs are rarely scheduled 16+ at a time, anyway | |||
Which is the other thing: we may well have moved the optimization to another thread so wallclock time is less impacted by us doing more optimization work...but if you have a bunch of processes doing that it'll be much more noticable. | 20:31 | ||
Zoffix | I thought the merge wasn't expected to bring any speedups but will let us add more optimizations in the future | 20:33 | |
merge of moar-jit branch I kean | |||
*mena | |||
>_< | |||
jnthn | Zoffix: Yeah, it's largely new infrastructure that will do a bit better at some things, but we're hardly exploiting it at all yet | 20:35 | |
But it likely does cost some more cycles already, which spectest will be more sensitive to | |||
lizmat: You may or may not find that MVM_SPESH_DISABLE=1 make spectest (and a tweak of the jobs) wins, if spectest time is a drag for you | 20:36 | ||
lizmat | jnthn: will try in a mo | 20:37 | |
timotimo | wowza, how did the precomp file for Format::Lisp turn up 275 megabytes | 20:45 | |
jnthn | o.O | 20:46 | |
timotimo | i stumbled upon it while looking for stuff to move from my internal drive to my external drive | 20:47 | |
hm, i want to give moarvm a mode that skips the first up to 128 bytes until it finds the magic string | 20:48 | ||
for --dump | |||
my system is misbehaving :\ | 20:51 | ||
gfldex | I do see a slight speedup on the box with many cores | 20:52 | |
timotimo | i think it's from the process i had segfaulting | 20:54 | |
japhb | Why doesn't the new JIT give immediate improvements? From comments above and previously, my mental model is "More startup time, more effort spent to produce the jitted code, and not as many ops with JIT definitions." | 20:57 | |
Is that correct, or is there something else? | 20:58 | ||
timotimo | the exprjit is a part of the template jit. anything it can't handle it'll just fall back to the template jit | ||
but it tries to gobble up multiple pieces of bytecode in one go | 20:59 | ||
japhb | "template jit" ~~ "old jit"? | ||
timotimo | aye | ||
japhb | So it wasn't a wholesale replace but an add-on? | ||
Ah | |||
timotimo | yup | ||
japhb | So that indicates that only the first two pieces of my mental model could apply: startup time, and effort spent per jitted block | 21:00 | |
dogbert2 | lizmat: have noticed that parsetime is up 30-50% on some spectest files when comparing with 2017.07 | 21:01 | |
japhb | (Since # of ops jitted would by design no less than before) | ||
*would be | |||
timotimo | there's now also a "cost function" to tune so that it selects the best way to turn what it thinks should be done into actual assembly language pieces | 21:02 | |
are you good at reading assembly? i'm not :) | |||
japhb | timotimo: Can you give an example? | 21:03 | |
lizmat | make spectest: 370 seconds, with MVM_SPESH_DISABLE=1 308 seconds | ||
jnthn: ^^^ | |||
jnthn | There you are then | ||
japhb | (I was quite good at reading Intel-format assembly, but I never got in the habit of reading gas-format) | ||
timotimo | japhb: you can get it to spit out actual binary dumps into a folder, along with an index file that tells you what is what | ||
japhb | I meant, can you explain what the cost function actually tunes? What options is it trying to decide between? | 21:05 | |
Geth | rakudo/nom: cef3bf3e75 | (Elizabeth Mattijsen)++ | 2 files Take 2 on getting $/ info into auto-generated methods - make sure we null out current-match at end of compilation as well - --profile now shows the line of the class definition |
||
jnthn | japhb: The expression JIT takes a tree representing the program to produce and "tiles" it. Those tiles determine the assembly that's produced. | 21:06 | |
japhb: The costs drive tile selection, the aim being to pick the set of tiles of lowest cost | |||
japhb | jnthn: I remember that from brrt's early explanations ... ah, OK | ||
timotimo | brrt gave an example at one point, i don't remember what exactly it was | ||
japhb | jnthn: So it doesn't do exhaustive search, but he's tuning the tiling equivalent of A*'s cost function? | 21:07 | |
jnthn | japhb: And the costs are based on how expensive executing that tile is likely to be (things like instruction count, memory access, etc.) | ||
japhb | hmmm | ||
jnthn | I suspect the paper is referenced somewhere | ||
gfldex | how are the chances to the the JIT output caches alongside precompiled bytecode? | ||
timotimo | low, gfldex | 21:08 | |
japhb | Is it aware of the interactions between neighboring tiles? Meaning, because reading a line of memory is likely cheaper the next time you do it? | ||
timotimo | i think only if you make big enough tiles to cover something like that? not sure | 21:09 | |
japhb | Ah, OK. | ||
jnthn | japhb: I didn't dig into it that deeply yet, tbh; brrt would of course know the details :) | ||
japhb wonders how deep the rabbit hole before one can contribute there | 21:10 | ||
timotimo | brrt hopes it doesn't go very deep | ||
japhb keeps typing sentences that are missing | |||
jnthn | Pretty sure citeseerx.ist.psu.edu/viewdoc/downl...p;type=pdf is the paper brrt implemented it from | 21:11 | |
japhb | .oO( "I see you shiver with antici-" ) |
||
timotimo | japhb: you could have a look at the expr files | 21:12 | |
jnthn | I read through the docs and while understanding the exact details of the tiling algo is likely quite deep, actually writing tiles and assigning costs is eaiser; the docs suggest how to do that | 21:13 | |
japhb | What is the granularity of the fallback to the template JIT? Does the new JIT fall back if it can't JIT an entire block? I'm noticing that there are only a few tiles defined, especially among math ops. | 21:15 | |
jnthn | Per basic block, I believe | ||
japhb | Hmmmm. | 21:16 | |
timotimo | getting multiple BBs into one go is a future goal | ||
oh | 21:17 | ||
this is about falling back | |||
the exprjit kicks in at the beginning of every BB and tries to get as much as it can | |||
it can fall back right in the middle of a BB | |||
jnthn | I guess it'll do better once we fuse BBs at the end of spesh, too | 21:19 | |
Especially since I went on a BB honesty rampage in the summer :) | |||
timotimo | i imagine it could | ||
japhb | timotimo: So the BB will have half code generated by exprjit and then half by template JIT? | ||
timotimo | yeah, i've stumbled over many spesh graphs with series of fully empty BBs | ||
that is correct | |||
jnthn | japhb: Yeah, that's what the code looked to be doing to me | ||
There's an instruction iterator, it eats all it can, and then leaves the test to the template JIT | |||
japhb | Interesting. I wonder how he bridges the register allocation .... | 21:20 | |
Geth | rakudo: Tyil++ created pull request #1180: Check configuration file's existence before opening |
21:22 | |
timotimo | japhb: i'd assume "spill everything" | ||
jnthn gone for a bit, or maybe until the morning :) | 21:26 | ||
o/ | |||
timotimo | japhb: you can also look at the jit log to see it spit out graphviz graphs for individual pieces | 21:27 | |
tyil | I just opened github.com/rakudo/rakudo/pull/1180/files, would adding a message like "No pre-existing configuration file found at <path>" be appreciated instead of it silently skipping that path? | 21:36 | |
[Coke] | s/configuration file/installed file/ maybe. | 21:44 | |
tyil | [Coke]: added and pushed that to the pr | 21:46 | |
timotimo | this looks for nqp binaries, right? | 21:47 | |
tyil | I dont know that much, just that it generated the warning described in the pr comment | 21:48 | |
and someone recommended me to try and fix it, so thats what I'm trying | |||
timotimo | i see | 21:49 | |
travis-ci | Rakudo build failed. Zoffix Znet 'Implement X::Numeric::CannotConvert exception | 22:43 | |
travis-ci.org/rakudo/rakudo/builds/283335906 github.com/rakudo/rakudo/compare/3...7265282694 | |||
buggable | [travis build above] ☠ All failures are due to: failed make test (1 failure). Across all jobs, only t/04-nativecall/13-cpp-mangling.t test file failed. | ||
timotimo | japhb: if you wanna, maybe takedispatcher would be a nice place to start. i see it break off the exprjit a bunch of times | 22:47 | |
though from grepping and tallying up it looks like atkey_o is the top instruction that stops the exprjit in its tracks | 22:51 | ||
looking closer at the jit log pays off, though. for example, band_i occurs a bunchton, but almost always in front of an if_i or unless_i | 22:56 | ||
i.e. immediately preceding the end of a bb | |||
mudman | squash: status | 23:11 | |
squashable6 | mudman, ⚠🍕 Next SQUASHathon in 1 day and ≈10 hours (2017-10-07 UTC-12⌁UTC+14). See github.com/rakudo/rakudo/wiki/Mont...Squash-Day | ||
timotimo | japhb: i have an idea for how to get more info about bytecode offsets in the bin files, let's see if i can get it to work | 23:35 | |
japhb | timotimo: Ah, thank you. | 23:43 | |
++timotimo | |||
timotimo | okay, huh, it's a lot more complicated than i thought ... of course | ||
Geth | rakudo/nom: fab0667f76 | (Patrick Spek)++ | tools/lib/NQP/Configure.pm Check for the config file's existence before trying to open it |
||
rakudo/nom: f1908a6855 | (Patrick Spek)++ | tools/lib/NQP/Configure.pm Add output line indicating a file is not found |
|||
rakudo/nom: a28c00a1f3 | (Zoffix Znet)++ (committed using GitHub Web editor) | tools/lib/NQP/Configure.pm Merge pull request #1180 from Tyil/resolve-not-found-warning Check configuration file's existence before opening |
|||
tyil | \o/ | 23:44 | |
timotimo | i thought i could just ask dasm what the current insert position for the bytecode buffer is after each tile emitted its stuff | 23:45 | |
brrt would know if it's possible to get the actual asm bytecode offset at that stage, and how to do it reliably | 23:46 | ||
bedtime for now, though | 23:53 | ||
japhb: you should be able to test pre-/post-merge performance with the MVM_JIT_EXPR_DISABLE env var |