02:48 colomon joined 02:51 vendethiel joined 03:07 TimToady joined 05:14 vendethiel joined 06:21 Ven joined 06:51 vendethiel joined 06:55 brrt joined
07:47 zakharyas joined 08:14 zakharyas joined 08:37 Ven joined 08:45 vendethiel joined 08:52 rurban joined 09:12 Ven joined
|brrt||jnthn, i have a burning question||09:18|
|it seems to me that decont/assign are not, in fact, invokish at all|
|did this change sometime in the last year?|
|lizmat||brrt: ETA jnthn ~ 20 mins||09:19|
|jnthn||brrt: decont and assign may invoke|
|jnthn||and yeah, still doing errands... :)|
|back for real soon :)|
|brrt||ok, don't let me distract you then|
|you are completely correct, of course||09:27|
|how did i not see that||09:28|
09:49 brrt joined 10:28 Ven joined 11:34 vendethiel joined 12:03 vendethiel joined 12:23 brrt joined 12:30 mj41 joined 13:03 travis-ci joined
|travis-ci||MoarVM build passed. Paul Cochrane 'Destroy correct string decodestream||13:03|
13:03 travis-ci left
|dalek||arVM: 4ca886c | jnthn++ | src/strings/ops.c:
Remove fragile assumption about buffer size.
Just fwrite the \n separately rather that relying on the UTF-8 encoder allocating a little more than needed just for this one case.
|arVM: 1f9d843 | jnthn++ | src/strings/utf8.c:
Fix UTF-8 encoder to handle NFG.
Also, now we have to resize a buffer anyway, start out with a lower assumption.
13:30 rurban joined 13:37 travis-ci joined
|travis-ci||MoarVM build passed. Paul Cochrane 'Inititialise `operand_size` in MVM_bytecode_dump()||13:38|
13:38 travis-ci left
|JimmyZ||jnthn: re 4ca886cbb8 , maybe 'utf8_encoded_length + 1' => utf8_encoded_length?||13:41|
|jnthn||JimmyZ: hm, yes||13:43|
|dalek||arVM: 97835d6 | jnthn++ | src/strings/ops.c:
More robust NULL string checking.
This should avoid a bunch of SEGVs arising from NULL strings getting passed into things not expecting them.
|arVM: 2c9398a | jnthn++ | src/ (2 files):
Ensure we get NULL-terminated strings if needed.
We used to get them more by accident than by design, but that made us do an unrequired memset in the UTF-8 encoder. Call the function that demands a null-terminated string.
|arVM: 8880d61 | jnthn++ | src/strings/ops.c:
Fix off-by-one in recent change.
Noticed by JimmyZ++.
16:24 Ven_ joined 16:26 vendethiel joined 18:02 vendethiel joined 18:31 vendethiel joined
|jnthn||m: say 39126704 / 644090520||20:16|
|camelia||rakudo-moar 676c25: OUTPUT«0.060747213␤»|
|jnthn||So, about 6% of instructions executed at startup are being spent on UTF-8 decoding and normalization.|
|lizmat||I don't think that explains the increase in startup time||20:18|
|which is more like 50% ?||20:19|
|jnthn||I think things going on in CORE.setting loading have become more costly too|
|Actually the above isn't all the cost||20:20|
|But that bit alone means it's worth looking into.|
|lizmat||maybe %*PRAGMAS cloning for each scope ?|
|lizmat||no, that would only be compile time, right ?|
|And we're looking at -e '1' or so|
|It's worth noting that we'll still a good bit lower in instruction count at startup than we have been in the past.|
|lizmat||so that would also explain slowdown in spectest (slower compile)|
|jnthn||Yeah, but...it *should* be a drop in the ocean||20:22|
|lizmat||well, I'm no longer working on making @*INC lazy|
|jnthn||The applicationg of use fatal in try blocks will have been much more of a cost.|
|lizmat||instead, making the creation of CompUnitRepo objects as lazy as possible|
|jnthn||lizmat: Sounds sensible||20:27|
|lizmat||as described in gist.github.com/lizmat/c7f53fa206da900c2b42||20:28|
20:50 rurban joined
|jnthn||Gee, typoing >> as > gets you some bugs... :)||20:54|
20:57 vendethiel joined
|masak .oO( "you can't just make shit up and expect the computer to know what you mean, retardo!" -- mjd )||21:01|
21:08 colomon joined
|dalek||arVM: 5eb670c | jnthn++ | src/ (4 files):
Bytecode file stores Latin-1 when possible.
This is not only cheaper to decode, but we also know that it's already normalized, so don't have to apply NFG.
|jnthn||Wow, that was wroth it||21:19|
|m: say 579180597 / 644090520|
|camelia||rakudo-moar 676c25: OUTPUT«0.8992223593␤»|
|jnthn||10% less instructions retired at startup|
|tadzik||less retired, so more at work? :o||21:21|
|lizmat||jnthn: when you say latin-1, do you really mean 0..255 or 0..127 for ord() ?||21:22|
|Which overlap perfectly with the first 255 Unicode codepoints.|
|And are already in NFC (says Unicode consortium) and contain no combinining chars, so thus in NFG for free too.||21:26|
21:28 colomon joined
|lizmat||hmmm.. I thought only 0..127 (aka 7-bit ASCII) matched Unicode||21:32|
|lizmat learned something again|
|jnthn: should I lock.protect reading from a hash from several threads as well, if another thread can change it ?||21:33|
|or do I just need to make sure only one of them changes it at any time ?||21:34|
|japhb||lizmat: Only 0..127 have the same encoded bytes. But the *codepoints* are the same above that, IIUC.||21:35|
|*encoded bytes in UTF-8|
|Hence US-ASCII needs no translation at all to convert to UTF-8, and Latin-1 can be trivially translated.||21:36|
21:40 Ven_ joined
|jnthn||lizmat: Yes, you need to||21:40|
|lizmat: As the writer may cause a resize|
|lizmat||so it would make sense to encapsulate access to such a hash in a sub with Proxy, right ?||21:41|
|lizmat wonders how many hashes we have in the core that are not guarded like that||21:42|
21:43 colomon joined
|jnthn||m: say 568004995 / 579180597||21:51|
|camelia||rakudo-moar 676c25: OUTPUT«0.9807044607␤»|
|jnthn||Can haz another 2% less instructions off...pretty much most code. :)||21:52|
|That's measruing the startup effect though. :)|
|japhb||Improvements to startup have the advantage of happening for *every* run.||21:54|
|In fact, the biggest impediment to my Perl 6 coding right now is r-j startup slowing my debugging iteration cycle enough that I start mentally context switching.||21:55|
|jnthn||And your biggest impediment to using r-m is the concurrency instability?||21:56|
|japhb||(If I could do it in r-m, I would, but we're talking 40-50 threads for my current work.)|
|jnthn||That's pretty near top of my list now NFG is largely there|
|jnthn||I should push on a bit with shaped arrays too||21:57|
|dalek||arVM: 03e4e38 | jnthn++ | src/ (3 files):
Optimize temporary root handling.
Only do sanity checks when we switch them on; they've caught very few bugs so far, so it doesn't pay to have them on all the time. This in turn means they are well within the size where they make sense to do inlining; mark with MVM_STATIC_INLINE to be sure of it.
|lizmat||jnthn: so MVM_STATIC_INLINE=1 would activate the sanity tests ?||22:02|
22:07 colomon joined
|jnthn||lizmat: No, MVM_STATIC_INLINE is a way of marking something up in the C code so the compiler should always inline it.||22:09|
|lizmat||so how would one activate the sanity checks then ?|
|jnthn||lizmat: You'd #define MVM_TEMP_ROOT_DEBUG 1 to turn on the sanity checks|
|lizmat||ah, it needs a recompile|
|jnthn||yeah, but it's rather rare|
|They've caught us little.|
|lizmat||well, maybe a separate JARVIS run with that enabled ?||22:10|
|some butler name|
.oO( "Hey You" )
22:33 colomon joined
|dalek||arVM: f701499 | jnthn++ | / (2 files):
Cache backend config hash.
We request it 7 times during Rakudo startup; only build it once.