samcv | yay. optimizing moar get a 12% speed improvement slurping a 200MB text file | 02:03 | |
exciting | |||
[Tux] | This is Rakudo version 2016.12-200-gf9ed7300f built on MoarVM version 2016.12-58-ga4fbf52e | 07:53 | |
csv-ip5xs 3.178 | |||
test 13.159 | |||
test-t 5.328 | |||
csv-parser 14.749 | |||
dalek | p: eb5881a | samcv++ | tools/build/MOAR_REVISION: Bump MoarVM for 14% better performance decoding UTF-8 text github.com/MoarVM/MoarVM/commit/d0...3457d8ff48 |
08:32 | |
kudo/nom: 528ec53 | samcv++ | tools/build/NQP_REVISION: Bump MoarVM/NQP for 14% better performance decoding UTF-8 text github.com/MoarVM/MoarVM/commit/d0...3457d8ff48 |
08:33 | ||
samcv | [Tux], will this help the tests you run every day? | ||
[Tux] | test is already running :) | 08:34 | |
samcv | nice | ||
brrt | samcv++ nice work | 08:38 | |
samcv | have more changes i'm working on but they're more about 1% or so each improvement, so thought i'd add this one in now | ||
cause it goes through that codepath A LOT | 08:39 | ||
brrt | i'm slightly scared that there'd be low-hanging fruit like this still left, but good find | ||
nine | I'm glad that there's still LHF ;) | 08:40 | |
samcv | LHF? | ||
samcv forgets that one | |||
low hanging fruit ok | |||
but yeah we need a faster UTF-8 decoding implementation | 08:41 | ||
brrt | i believe that | ||
not sure but i'm guessing this ties in with jnthns utf8-c8 branch? | |||
samcv | (this is irrespective of UNicode in general) just the utf-8 decoding bytes into codepoints | ||
unrelated | |||
though i mean things still pass through both when decoding as utf8-c8 | 08:42 | ||
we first decode to codepoints from whichever format, then we put them in graphemes and determine how the characters break up and combine | |||
[Tux] | This is Rakudo version 2016.12-200-gf9ed7300f built on MoarVM version 2016.12-58-ga4fbf52e | ||
csv-ip5xs 3.165 | |||
test 13.198 | |||
test-t 5.281 | |||
csv-parser 14.026 | |||
second run was 5.367 | |||
so withing noise range | 08:43 | ||
samcv | csv-parser looks smaller | ||
it's only going to be seen if you are taking in UTF-8 data, not manipulating strings (mostly) | |||
[Tux] | that is tony's | ||
samcv | tony's? | ||
[Tux] | github.com/tony-o/perl6-csv-parser <= | 08:44 | |
samcv | so i'm guessing it reads in utf-8 data from a file? | 08:46 | |
well idk what your source file is. just curious is it ascii or have mixed things | |||
[Tux] | just (very) plain ASCII | 08:50 | |
sh$ for i in $(seq 1 1000000); do echo 'hello,","," ",world,"!"'; done > /tmp/hello.csv | |||
sh$ time perl csv.pl < /tmp/hello.csv | |||
although my tests have less records, just 10000 | 08:51 | ||
[Tux] => $work | |||
samcv | it's basically this github.com/minimaxir/big-list-of-n...r/blns.txt but 10,000 times | 09:01 | |
most is ascii, but it has some weird sections. there's probably better things to test it with, buti wasn't sure what to do | |||
arnsholt | Big list of naughty strings! =D | 09:06 | |
samcv | m: EVAL qx{curl raw.githubusercontent.com/minimaxi.../blns.txt} | 09:18 | |
camelia | rakudo-moar 528ec5: OUTPUTĀ«===SORRY!=== Error while compiling <tmp>ā¤EVAL is a very dangerous function!!! (use the MONKEY-SEE-NO-EVAL pragma to override this error,ā¤but only if you're VERY sure your data contains no injection attacks)ā¤at <tmp>:1ā¤------> list-of-naughtā¦Ā» | ||
samcv | m: use MONKEY-SEE-NO-EVAL; EVAL qx{curl raw.githubusercontent.com/minimaxi.../blns.txt} | ||
camelia | rakudo-moar 528ec5: OUTPUTĀ«qx, qqx is disallowed in restricted settingā¤ in sub restricted at src/RESTRICTED.setting line 1ā¤ in sub QX at src/RESTRICTED.setting line 11ā¤ in block <unit> at <tmp> line 1ā¤ā¤Ā» | ||
samcv | #Scunthorpe Problem | ||
# | |||
#Innocuous strings which may be blocked by profanity filters (en.wikipedia.org/wiki/Scunthorpe_problem) | |||
hha | |||
that part is funny | |||
medieval erection of parapets | |||
"Craig Cockburn, Software Specialist" | 09:19 | ||
arnsholt | Ah yes, the Scunthorpe problem =D | ||
samcv | "Human injection: #Strings which may cause human to reinterpret worldview" | ||
If you're reading this, you've been in a coma for almost 20 years now. We're trying a new technique. We don't know where this message will end up in your dream, but we hope it works. Please wake up, we miss you. | |||
whew | |||
arnsholt | Alternatively the clbuttic problem =) | ||
mst | a reference so old you might call it medireview | 09:32 | |
samcv | .tell jnthn I found the code for QT's SIMD optimized UTF-8 decoder code.woboq.org/qt5/qtbase/src/core...c.cpp.html thought you might like to see | 09:35 | |
dammit | |||
anybody want to fix github.com/perl6/roast/blob/master...est-gen.p6 to work after the GLR? | 10:38 | ||
i was not around before that time | |||
needs to be updated for Unicode 9.0 | 10:39 | ||
notviki | buggable: speed | 11:08 | |
buggable | notviki, āāāāāāāāāāāāāāāāāāā āāāāāāāāāāāāāāā āāāāāāāāāāāāāāāā data for 2016-12-15ā2017-01-04; range: 5.137sā6.264s | ||
notviki | oh man, the "replaced content" section of that article is hilarious | 11:37 | |
"Several websites running rudimentary obscenity filters have replaced the word "ass" with "butt", resulting in "clbuttic" for "classic" and "buttbuttinate" for "assassinate"." | 11:38 | ||
mst | notviki: yup | 11:41 | |
I remember when it happened | 11:42 | ||
I mean, the clbuttic yahoo one | |||
geekosaur | also inspiring the cloud-to-butt plugin :p | ||
notviki | samcv: nothing strikes me as pre-glrish in that script | 12:01 | |
jnthn | github.com/perl6/roast/blob/master...gen.p6#L43 | 12:02 | |
That line probably needs to be `for flat` | |||
And there's a similar one below it | |||
notviki | c: pre-glr my @a = ^5; my @b = <a b c d e>; for @a Z @b -> $s, $e { dd [$s, $e ] } | 12:03 | |
committable6 | notviki, Ā¦Ā«pre-glrĀ»: $ = [0, "a"; 1, "b"]ā¤$ = [2, "c"; 3, "d"]ā¤Too few positionals passed; expected 2 arguments but got 1ā¤ in block <unit> at /tmp/E6Nlqdbsdz:1ā¤ Ā«exit code = 1Ā» | ||
notviki | m: my @a = ^5; my @b = <a b c d e>; for @a Z @b -> $s, $e { dd [$s, $e ] } | ||
camelia | rakudo-moar 528ec5: OUTPUTĀ«[(0, "a"), (1, "b")]ā¤[(2, "c"), (3, "d")]ā¤Too few positionals passed; expected 2 arguments but got 1ā¤ in block <unit> at <tmp> line 1ā¤ā¤Ā» | ||
notviki | ok | ||
samcv | here's the input txt it generates from notviki if you want to fix it ftp://ftp.unicode.org/Public/9.0.0/ucd/NormalizationTest.txt | 12:04 | |
night everybody o/ | 12:07 | ||
jnthn | 'night, samcv | 12:10 | |
lizmat | Files=1162, Tests=54568, 197 wallclock secs (11.74 usr 4.88 sys + 1292.46 cusr 134.21 csys = 1443.29 CPU) | 12:23 | |
masak | notviki: my other favorite is Reuters having some kind of automatic replacement s/the queen/Her Majesty Queen Elizabeth the Second/g -- and then they ran an article about bees: badbeekeepingblog.com/2016/04/21/t...he-second/ | 12:26 | |
that and "clbuttic", those two are what I usually bring up when explaining the dangers of regex match false positives to people | 12:27 | ||
"clbuttic" is also a good time to talk about \b and word boundaries | |||
"the queen" notably doesn't have that problem -- it's just a case where dumb textual matching does too much | 12:28 | ||
[Coke] | dogbert2: if you want to be a bug admin, I need your RT account/email. | 13:38 | |
notviki | my nqp-foo isn't strong enough. A bunch of stuff I tried for .clone in Setty/Baggy is 22% faster for 3-item bags, but 26% slower for 1000-item bag when compared against just { self.new-from-pairs: self.pairs; } | 13:46 | |
lizmat | notviki: what we really need are object hashes at the VM level | 13:52 | |
problem with that is that we would need to implement that on all backends at the same time to prevent mental meltdown | |||
notviki | :( | 13:57 | |
jnthn | Having object hashes at the VM level is perhaps going to be trouble. | ||
REPR operations must never call back into userland code as part of their contract. But if you can't do that, how do you check if the two things are equivalent? | |||
lizmat | ok, well if we can't have them at VM level, perhaps we need to think about how to make equivalence checker more optimal than eq .WHICH | 13:58 | |
jnthn | Yes, ObjAt needs a re-think | 13:59 | |
But really we should just be dealing in integers | |||
e.g. hashing something produces an integer | |||
Which we use to look up in the hash table | 14:00 | ||
And then eqv to check we hit the right thing | |||
dalek | kudo/nom: 42a8c58 | lizmat++ | src/core/ (3 files): Make R:I.WhateverIterator a method Brings it more in line with the other R:I.*iterator methods, and allows some of the boilerplate to be hidden away in the method. |
||
arnsholt | Time for a Mu.hashCode? =) | ||
jnthn | That's what WHICH is for, it's just that ObjAt could do with being smarter :) | 14:02 | |
Or actually less smart ;) | 14:03 | ||
Just an integer :) | |||
Though I think we probably want to have ways to construct ObjAt from other integers/ObjAt instances | |||
So we can factor out the hash computation | |||
arnsholt | Ah, right =) | 14:04 | |
jnthn | And avoid the mass of StackOverflow threads C# et al. have on "how to write a good hashcode function" ;) | 14:05 | |
And the resulting copy-paste of those into every non-small codebase out there :) | |||
lizmat | so I guess we need some form of nqp::exists_id() ? | 14:07 | |
jnthn only had to fix two .t files for lexical module loading in his $dayjob codebase | |||
lizmat | on an nqp::hash | 14:08 | |
jnthn | lizmat: I'd probably bypass nqp::hash entirely and just have an nqp::list | ||
lizmat | for object hashes ? | ||
jnthn | Or two | ||
Yeah | |||
lizmat | works for me | ||
jnthn | I mean, that's what hashes are under the hood anyway :) | ||
If we're smart then we might actually come out *ahead* of uthash | 14:09 | ||
On memory use | |||
Because it does things as a linked list. | |||
And so there's malloc overhead per element too | |||
lizmat | how bad is nqp::splice ? (for nqp::deletekey functionality) ? | ||
jnthn | Huh? | 14:10 | |
If you're asking that, then I suggest reading up on how to implement hash tables. ;_) | |||
lizmat | perhaps I should :-) | ||
jnthn | (Elements never need to move.) | ||
In short, though, you take the integer hash value | 14:11 | ||
And then modulo it with the number of elements in your current array | |||
If that's kept to a power of 2 then that can be a bit operation | 14:12 | ||
And that tells which index to look in to | |||
The only problem beyond that is deciding on the strategy for collisions | |||
lizmat | right | ||
jnthn | A simple on being "just insert it into the next free slot" | ||
*simple one | 14:13 | ||
And then on lookup scan until hitting a null | |||
Also need a time to decide when to re-hash | |||
uh, not so much re-hash, but when to expand. | |||
lizmat | feels to me this is something perl 5 has thought through a lot already ? | ||
jnthn | Does it do object hashes? | 14:14 | |
lizmat | no | ||
jnthn | (in core, I'm sure it's done 50 times on CPAN) | ||
Most langs have done this :) | |||
If you do the robin hood hashing, read the recent "accidentally quadratic" post about Rust's use of it | |||
It's worth reading for the nice explanations of things as well as the "what not to do" :) | 14:15 | ||
lizmat | feels more and more like a rite of passage that's above my pay level :-) | ||
jnthn | I don't think it is, it's just a bit of background reading. :) | 14:16 | |
And I'm sure others can chip in and help too :) | |||
notviki | ZOFVM: Files=1211, Tests=130982, 165 wallclock secs (21.10 usr 3.39 sys + 2923.98 cusr 288.86 csys = 3237.33 CPU) | 14:17 | |
jnthn | I mean, I'd certainly want to give myself a refresher on the literature in the area if I was working on it. :) | ||
Nobody implements hash tables every day. :) | |||
dalek | kudo/nom: 1ee9c82 | (Zoffix Znet)++ | src/core/ (3 files): Implement .clone for SetHash, BagHash, and MixHash I tried some nqp-foo that was faster on small baggies, but was 25% slower on ones with 1000+ elements. So I just went with this. Fixes RT#127863: rt.perl.org/Ticket/Display.html?id=127863 |
14:19 | |
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=127863 | ||
ast: 37b3e12 | (Zoffix Znet)++ | S02-types/ (2 files): Test .clone works on SetHash, BagHash, and MixHash RT#127863: rt.perl.org/Ticket/Display.html?id=127863 Rakudo fix: github.com/rakudo/rakudo/commit/1ee9c825f8 |
|||
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=127863 | ||
jnthn tries to concentrate on $other-job for a bit | 14:23 | ||
[Coke] | morning, everyone. | 14:24 | |
jnthn | o/ [Coke] | ||
dalek | kudo/nom: 8ab6e01 | lizmat++ | src/core/ (2 files): Make R:I.DwimIterator a method Brings it more in line with the other R:I.*iterator methods, and allows some of the boilerplate to be hidden away in the method. |
14:33 | |
p: 8025596 | (Pawel Murias)++ | src/vm/js/ (2 files): [js] Implement nqp::throwextype. |
14:35 | ||
p: f4e49bd | (Pawel Murias)++ | t/nqp/044-try-catch.t: Test nqp::throwextype. |
|||
p: daef23e | (Pawel Murias)++ | src/vm/js/nqp-runtime/core.js: [js] Fix error. |
|||
ast: 1fc7349 | (Zoffix Znet)++ | S15-normalization/test-gen.p6: De-bitrot pre-GLR script |
14:36 | ||
notviki | .tell samcv S15-normalization/test-gen.p6 should now work: github.com/perl6/roast/commit/1fc7349f48 | ||
.tell samcv S15-normalization/test-gen.p6 should now work: github.com/perl6/roast/commit/1fc7349f48 | 14:37 | ||
yoleaux2 | notviki: I'll pass your message to samcv. | ||
[Coke] | buggable: ? | 14:39 | |
buggable: tags | 14:40 | ||
buggable | [Coke], Total: 1460; BUG: 941; UNTAGGED: 309; LTA: 135; NYI: 96; RFC: 61; CONC: 53; JVM: 52; REGEX: 41; SEGV: 31; PERF: 28; UNI: 27; NATIVECALL: 21; POD: 20; REGRESSION: 20; @LARRY: 19; IO: 18; TODO: 18; PRECOMP: 13; TESTNEEDED: 13; BUILD: 11; OO: 11; TESTCOMMITTED: 10; STAR: 8; BOOTSTRAP: 6; OPTIMIZER: 6; GLR: 5; MATH: 4; OSX: 4; REPL: 4; WEIRD: 3; RT: 2; SPESH: 2; WINDOWS: 2; @y: 1; CONFIGURE: 1; DOCS: 1; LIBR | ||
[Coke] | notviki: why is that total 1460? (and not 1448 or 1478?) | ||
notviki | There's a bug where if someone comments or tags an already resolved ticket perl6.fail will pick it up and think it's open again | 14:41 | |
[Coke] | also, what is "LIBR" ? | ||
oh, maybe one of those closed tickets. | |||
notviki | buggable: tag LIBRARY | ||
buggable | notviki, There is 1 ticket tagged with LIBRARY; See perl6.fail/t/LIBRARY for details | ||
notviki | I guess that, except it got cut off | ||
[Coke] | ok, we don't use that value from the tag attribute anywhere else. clearing... | 14:42 | |
dalek | kudo/nom: 935d6c2 | lizmat++ | src/core/ (5 files): Make R:I.MappyIterator-values a method Brings it more in line with the other R:I.*iterator methods, and allows some of the boilerplate to be hidden away in the method. |
14:48 | |
kudo/nom: 40d7deb | lizmat++ | src/core/Rakudo/Internals.pm: Move all *Iterator methods together No functional change, just some code reorg for developer sanity |
15:01 | ||
p: 0256679 | (Pawel Murias)++ | src/vm/js/nqp-runtime/bignum.js: [js] Implement division by zero in nqp::div_In. |
15:07 | ||
p: 24ac01e | (Pawel Murias)++ | t/nqp/060-bigint.t: Test division by zero using nqp::div_In. |
|||
pmurias | bartolin: I added tests for your div_In fixes. | ||
ThorstenB | Jnthn, do you have a couple cycles to talk about building rakudo on WSL? | 15:32 | |
jnthn | Uh...yes but you just left :) | 15:40 | |
ThorstenB: Hi :) | 15:41 | ||
I read the couple of github issues filed on that. | |||
If it's being fixed upstream in dyncall then we should be able to easily get those changes into our local copy of that | |||
ThorstenB | That's all I wanted to make you aware of. It'll "take a while", dyncall devs have sensibly opted to look beyond perl6 and have found other projects that run into this as well, outside of WSL. | 15:43 | |
As far back as January 2014, but it was never bubbled upstream instead some folk just kvetched about the dyncall assembly code and did -Wl,-z,noexecstack | 15:44 | ||
jnthn | I think somebody else a while ago ran into the excutable stack thingy too | ||
(When building MoarVM) | |||
ThorstenB | Yeah you might also see it with selinux | ||
jnthn | I may well be misremembering, but I'm not sure it was tracked down to dyncall, so it's nice that at least now it is :) | 15:45 | |
ThorstenB | I have faith it'll get fixed. Not right this very second, people have lives and other todos to go into dyncall as well, but it'll get fixed eventually | 15:46 | |
jnthn | So, if I understand, we're waiting for dyncall for the moment, as a first resort? And I/somebody just needs to make sure we get that fix when it's available? | ||
ThorstenB | Yes. If you don't want to wait you can force it at linktime with-Wl,-z,noexecstack in the relevant portion of the makefile | 15:47 | |
But for now, unless this becomes more than a niche thing, just wait for upstream fix | |||
jnthn | Works for me. | 15:48 | |
Thanks for looking in to it. | |||
ThorstenB | Thanks for being game to pull the fix when it's available | 15:49 | |
notviki | NeuralAnomaly: status | 16:04 | |
NeuralAnomaly | notviki, [ā] Next release will be in 2 weeks and 3 days. Since last release, there are 63 new still-open tickets (62 unreviewed and 0 blockers) and 205 unreviewed commits. See perl6.fail/release/stats for details | ||
notviki clicks "take" on the roundrobin ticket | 16:05 | ||
dogbert17 | [Coke]: is it my BitCard username, i.e. email, that you need? | 16:06 | |
[Coke] | dogbert17: We can try that, sure | 16:30 | |
notviki | Seems Rakudo built from sauce on windows has issues with Linenoise not loading properly? twitter.com/sinan_unur/status/8163...7761547264 | ||
ugexe | yeah, I suspect its because the dll doesn't expect itself to be renamed | 16:33 | |
notviki | Seems to work fine on my Rakudo Star install... isn't it renamed in there too? | 16:34 | |
stmuk | notviki: I had to revert to an earlier version in R* | 16:35 | |
ugexe | on OpenSSL i used a hack where it copies the installed sha1 dll to a temp directory and renames it to its original name, then uses *that* | ||
github.com/sergot/openssl/blob/mas...Lib.pm6#L3 | |||
notviki | stmuk: so it's a known bug? | ||
stmuk | notviki: yes and there has been recent work on it (note this is on mingw AFAIK its been broken on MSVC for a while) | 16:36 | |
notviki | cool | ||
ugexe | i use MSVC and it works for me (in that I get the error shown) | 16:37 | |
stmuk | its been months since I tried MSVC maybe I'm out of date on that but there were special MSVC problems in the past | 16:38 | |
dalek | p: 365c861 | (Pawel Murias)++ | t/moar/02-qast-references.t: Improve error message on failing test. |
16:39 | |
p: 47f5158 | (Pawel Murias)++ | src/vm/js/ (4 files): [js] Stop putting things in nqp.op that are not exactly what the op is. |
|||
p: d8ec951 | (Pawel Murias)++ | src/vm/js/ (2 files): [js] Implement nqp::getattrref_{i,n,s} and nqp::atposref_{i,n,s} ops. |
|||
p: 1124404 | (Pawel Murias)++ | t/nqp/104-refs.t: Test nqp::getattrref_{i,n,s} and nqp::atposref_{i,n,s} ops. |
|||
stmuk | maybe 46f953 works on MSVC? | 16:40 | |
notviki is mildly annoyed bdfoy and sinan broadcast these "buggy adventures in Perl 6" tweets, yet use bleed dev versions instead of using what we recommend users use -_- | |||
stmuk | in hindsight the old versions should have had timebombs in them | ||
and maybe I should make R* exit on Fedora if the modules aren't installed :) | 16:49 | ||
ThorstenB | Speaking of bleed, this reminds me of something that puzzled me. Rakudobrew appears to build 2016.12 right now, but the latest source tarball is 2016.11. Am I seeing things? If not, was having rakudobrew build something newer intended? | 16:53 | |
notviki | ThorstenB: rakudobrew isn't for regular users. | 16:56 | |
ugexe | github.com/rakudo/rakudo/archive/2016.12.tar.gz | ||
notviki | ThorstenB: the latest version of user distribution is 2016.11 | 16:57 | |
ThorstenB | Notviki: oh wow. Okay there is a possible ux issue here. When you look at rakudo.org, click download, then build from source, it starts with "the simplest way is to use rakudobrew" | 16:58 | |
I therefore thought that was the go-to method for a regular perl6 user | |||
If that's not so then the documentation on that page can use a massage | |||
notviki | Yeah | 16:59 | |
ThorstenB | The way that reads to me is "use rakudobrew and only if that is not flexible enough, install manually" | ||
stmuk | maintaining rakudo.org and perl6.org is just doubling the workload | 17:00 | |
notviki | ThorstenB: it's just that page was written when we thought rakudobrew was awesome... but then users happened and we started receiving all these reports of problems, but they were due to people using rakudobrew but not having enough know-how to use it, so we then decided that recommending rakudobrew is a bad idea | 17:01 | |
And yeah, in needs some love | 17:02 | ||
ThorstenB | I came to perl6 about a week ago with zero background in it, so I just googled and that's where I ended up ... on that rakudo.org page | ||
notviki | created a ticket to improve the download page(s) rt.perl.org/Ticket/Display.html?id=130500 | 17:07 | |
hum, fixing that roundrobin ticket breaks tests for a previous ticket that complained about the opposite issue :S | 17:09 | ||
m: say roundrobin $(1, 2), <a b c> | 17:10 | ||
camelia | rakudo-moar 40d7de: OUTPUTĀ«(((1 2) a) (b) (c))ā¤Ā» | ||
notviki | cpan@perlbuild2~/CPANPRC/rakudo (nom)$ ./perl6 -e 'say roundrobin $(1, 2), <a b c>' | ||
((1 a) (2 b) (c)) | |||
:( | |||
well crap... Seems the two ideas are entirely contradictory | 17:15 | ||
.ask jnthn would you have any comments for RT#130498? Fixing it breaks tests for another ticket you fixed that makes these routines treat itemized lists as single items... so, I guess this isn't a bug at all? | 17:23 | ||
yoleaux2 | notviki: I'll pass your message to jnthn. | ||
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130498 | ||
timotimo | samcv: if you were expecting the performance of csv to improve because of your changes, we'll have to wait for a moar + nqp bump first | 18:07 | |
notviki | timotimo: it was bumped (based on what I see in the backlog) | 18:10 | |
timotimo | oh? | ||
notviki | irclog.perlgeek.de/perl6-dev/2017-...i_13851359 | ||
timotimo | i didn't notice, but yeah | ||
good catch | |||
jnthn | . | 18:13 | |
yoleaux2 | 17:23Z <notviki> jnthn: would you have any comments for RT#130498? Fixing it breaks tests for another ticket you fixed that makes these routines treat itemized lists as single items... so, I guess this isn't a bug at all? | ||
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130498 | ||
jnthn | notviki: This is one of the consequences of an Array being a bunch of *items*, yes. | 18:15 | |
notviki | ok, so notabug then | ||
jnthn | m: my @l = (0,1,2),(3,4,5),(6,7); say roundrobin(@l>>.list); | 18:16 | |
camelia | rakudo-moar 40d7de: OUTPUTĀ«(((0 1 2)) ((3 4 5)) ((6 7)))ā¤Ā» | ||
notviki | m: my @l = (0,1,2),(3,4,5),(6,7); say roundrobin(@lĀ».List); | ||
camelia | rakudo-moar 40d7de: OUTPUTĀ«(((0 1 2)) ((3 4 5)) ((6 7)))ā¤Ā» | ||
notviki | m: my @l = (0,1,2),(3,4,5),(6,7); say roundrobin(|@lĀ».List); | ||
camelia | rakudo-moar 40d7de: OUTPUTĀ«((0 3 6) (1 4 7) (2 5))ā¤Ā» | ||
notviki | there | ||
jnthn | ah, needed | too | ||
m: my @l = (0,1,2),(3,4,5),(6,7); say roundrobin(|@lĀ».list); | |||
camelia | rakudo-moar 40d7de: OUTPUTĀ«((0 3 6) (1 4 7) (2 5))ā¤Ā» | ||
jnthn | .list removes itemization which is sufficient (and cheaper than .List) | 18:17 | |
notviki | cool | ||
jnthn | Now, what shall I use my next hour to look at... | ||
Ah, right, I valgrund RT #130494 last night before bed | 18:18 | ||
synopsebot6 | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130494 | ||
AlexDaniel | m: my @l = (0,1,2),(3,4,5),(6,7); say roundrobin(|@l); | 18:23 | |
camelia | rakudo-moar 40d7de: OUTPUTĀ«(((0 1 2) (3 4 5) (6 7)))ā¤Ā» | ||
AlexDaniel | m: my @l = (0,1,2),(3,4,5),(6,7); say roundrobin(|@l.List); | ||
camelia | rakudo-moar 40d7de: OUTPUTĀ«((0 3 6) (1 4 7) (2 5))ā¤Ā» | ||
AlexDaniel | why Ā» not sure | ||
jnthn | Oh, .List also deconts the elements... | 18:24 | |
jnthn always forgets that, it's a really odd thing for an upcast to not return self, even if this behavior can be useful | |||
AlexDaniel will never be able to remember the difference between .list and .List | 18:25 | ||
jnthn kinda wishes we'd given the useful behavior Array.List has a nice name. | |||
:733 | |||
oops | |||
AlexDaniel | so .list does nothing and .List does something usefulā¦ hmm | 18:26 | |
notviki | a: [], 'list', \() | ||
s: [], 'list', \() | |||
SourceBaby | notviki, Sauce is at github.com/rakudo/rakudo/blob/40d7...st.pm#L769 | ||
notviki | s: [], 'List', \() | ||
SourceBaby | notviki, Sauce is at github.com/rakudo/rakudo/blob/40d7...ay.pm#L290 | ||
jnthn | .list removes the itemization of the thing you call it on, in this case | 18:27 | |
AlexDaniel | ? | ||
notviki | Weird, 'cause the code just returns { self } | ||
jnthn | Yes, and self isn't an item | 18:28 | |
notviki | ah self is deconted.. is that why? | ||
jnthn | Right | ||
notviki | k :) | ||
AlexDaniel | hmā¦ what would be the example to show the effect? | ||
jnthn | m: say 131072000 / 2000 | ||
notviki | m: my $l = (1, 2, 3); dd $l | ||
camelia | rakudo-moar 40d7de: OUTPUTĀ«65536ā¤Ā» | ||
rakudo-moar 40d7de: OUTPUTĀ«List $l = $(1, 2, 3)ā¤Ā» | |||
notviki | m: my $l = (1, 2, 3); dd $l; dd $l.List | ||
camelia | rakudo-moar 40d7de: OUTPUTĀ«List $l = $(1, 2, 3)ā¤(1, 2, 3)ā¤Ā» | ||
AlexDaniel | m: my $l = (1, 2, 3); dd $l; dd $l.list | 18:29 | |
camelia | rakudo-moar 40d7de: OUTPUTĀ«List $l = $(1, 2, 3)ā¤(1, 2, 3)ā¤Ā» | ||
AlexDaniel | ahh,okay | ||
notviki | m: my $l = (1, 2, 3); dd $l X (1, 2, 3); dd $l.List X (1, 2, 3) | ||
camelia | rakudo-moar 40d7de: OUTPUTĀ«(($(1, 2, 3), 1), ($(1, 2, 3), 2), ($(1, 2, 3), 3)).Seqā¤((1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)).Seqā¤Ā» | ||
jnthn | > count objects type="Buf[uint8]" | 18:43 | |
501 | |||
About the leak, the reason there's so much leaked is because libuv suggests we allocate a 64KB buffer for each line, then gives us something much smaller | 18:44 | ||
The leak doesn't appear to be at C level, but rather than all the Bufs live on once they make it Perl 6 side. | |||
(I did 500 iterations of the loop, this snapshot is near the end of the program, after 16 GC runs had chance to nom some of them) | 18:45 | ||
timotimo | 64 kb o_O | ||
jnthn | Also | ||
jnthn <3 maor-ha | |||
*moar-ha, heh, can't even type it | |||
timotimo | so should we take the extra work to copy into a smaller buffer if we notice it's less than 10% full? | 18:46 | |
OSLT? | |||
jnthn | We could just realloc since it was malloc'd | ||
timotimo | ah, good | ||
jnthn | If somebody fancies giving moar-ha the ability to use readline if it's installed, that'd be super-nice ;) | 18:47 | |
oh... | 18:49 | ||
timotimo | it would be! :) | ||
jnthn | I also idly wonder if we can somehow bias the BFS used for path against giving entries from the inter-gen root set | 18:50 | |
Since it's the shortest path but not the most useful | |||
timotimo | yes! | 18:51 | |
i thought about allowing to completely throw it out; generalized to completely ignoring one specific object | |||
jnthn | If I remember the code we may be able to just hack that arc to cost a load | 18:52 | |
It's useful that it shows up in results | |||
If it's the only thing keeping it alive | |||
timotimo | aye | 18:53 | |
jnthn | grr, yeah, I think fixing that now is going to be faster than trying 500 object IDs with path to find one not in the inter-gen set | 18:54 | |
Block (Object) (475739) --[ Unknown ]--> | 18:55 | ||
Wonder why htat's Unknown | |||
timotimo | it's a secret to everybody | 19:01 | |
dalek | kudo/nom: d9c735f | (Zoffix Znet)++ | README.md: Include URL to twitter.com/perl6org (the original @rakudoperl seems to be a dead account) |
19:03 | |
jnthn | Righty, let's see if my change works... | 19:07 | |
Um, no but... :) | 19:22 | ||
So I busted it. But in such a way that it didn't visit the inter-gens at all. And then the things didn't show a path to them | 19:27 | ||
So they really are only in the inter-gen set | 19:28 | ||
Well, they aren't | 19:29 | ||
They're ref'd by an object that's in that set | |||
That in turn may be (about to check) that we never do a full collect | |||
Because we don't track the memory pressure sufficiently to trigger one | |||
Because of the buffer size iffiness | |||
Hm, might be worse than that. | 19:48 | ||
AlexDaniel | can somebody help me with this one? | 20:12 | |
m: class I { method pull-one { IterationEnd } }; role Foo { also does Positional; also does Iterable; method iterator { I.new } }; say ("bar" but Foo) ~~ /a/ | |||
camelia | rakudo-moar d9c735: OUTPUTĀ«Type check failed in binding to iter; expected Iterator but got I (I.new)ā¤ in block <unit> at <tmp> line 1ā¤ā¤Ā» | ||
AlexDaniel | mc: class I { method pull-one { IterationEnd } }; role Foo { also does Positional; also does Iterable; method iterator { I.new } }; say ("bar" but Foo) ~~ /a/ | ||
committable6 | AlexDaniel, Ā¦Ā«2015.12Ā»: Nil | ||
AlexDaniel | bisectable points to github.com/rakudo/rakudo/commit/e4...0569b798c5 | ||
actually, forget that, it's more complicated than thisā¦ | 20:14 | ||
timotimo | why isn't I "is Iterator"? | 20:15 | |
AlexDaniel | Iā¦ don't know? Not my code | 20:16 | |
m: class I is Iterator { method pull-one { IterationEnd } }; role Foo { also does Positional; also does Iterable; method iterator { I.new } }; say ("bar" but Foo) ~~ /a/ | 20:17 | ||
camelia | rakudo-moar d9c735: OUTPUTĀ«===SORRY!=== Error while compiling <tmp>ā¤Method 'pull-one' must be implemented by Iterator because it is required by roles: Iterator.ā¤at <tmp>:1ā¤Ā» | ||
AlexDaniel | mc: class I is Iterator { method pull-one { IterationEnd } }; role Foo { also does Positional; also does Iterable; method iterator { I.new } }; say ("bar" but Foo) ~~ /a/ | ||
committable6 | AlexDaniel, Ā¦Ā«2015.12Ā»: ===SORRY!=== Error while compiling /tmp/G9bOXew4mrā¤Method 'pull-one' must be implemented by Iterator because it is required by a roleā¤at /tmp/G9bOXew4mr:1 Ā«exit code = 1Ā» | ||
lizmat | does Iterator | 20:18 | |
AlexDaniel | m: class I does Iterator { method pull-one { IterationEnd } }; role Foo { also does Positional; also does Iterable; method iterator { I.new } }; say ("bar" but Foo) ~~ /a/ | 20:19 | |
camelia | rakudo-moar d9c735: OUTPUTĀ«Nilā¤Ā» | ||
timotimo | ah, sorry, does Iterator, not is Iterator | 20:20 | |
but you already noticed | |||
i mean liz noticed | 20:21 | ||
dalek | kudo/nom: 6920dad | lizmat++ | src/core/ (2 files): Make single element Z a bit faster By using the UnendingValueIterator instead of the WhateverIterator. Main reason is that we don't need to check for Whatever, or keep remembering values, as there is only one value to remember. |
20:39 | |
gfldex | jnthn: could you have a look at the following please? github.com/perl6/doc/issues/1111 | 21:19 | |
samcv | morning perl6! | ||
yoleaux2 | 14:37Z <notviki> samcv: S15-normalization/test-gen.p6 should now work: github.com/perl6/roast/commit/1fc7349f48 | ||
samcv | yay! | ||
dalek | kudo/nom: dbe3e0e | lizmat++ | src/core/Rakudo/Internals.pm: Introducing R:I.RandomizeOrderIterator An iterator that will semi-randomize the order of the values of a given iterator. It does this by randomly fetching 2..5 values from the iterator, and supplying them in reverse order. Rince. Repeat. |
21:24 | |
ast: be3385d | samcv++ | S15-normalization/ (45 files): Update S15-normalization tests for Unicode 9.0 |
21:36 | ||
jnthn | gfldex: Left a comment | 21:52 | |
jnthn is too tired for more leak hunt today, or anything else much useful for that matter... | |||
Probably gone for the night o/ | 21:53 | ||
moritz | \o | ||
dalek | ast: 284be4e | samcv++ | S15-nfg/emoji-test (2 files): Add Emoji grapheme tests Generated from Emoji version 4.0 These are seperate from the other Grapheme break tests, in being an optional part of the Unicode standard. |
22:06 | |
ast: 587a426 | samcv++ | S15-nfg/emoji-test.t: Fudge failing Emoji tests |
|||
kudo/nom: 18793d1 | samcv++ | t/spectest.data: Add emoji-test.t to spectest.data See roast commit: github.com/perl6/roast/commit/284b...b67fb898aa |
22:09 | ||
samcv | lizmat, you broke some of the Zip operator tests | 22:18 | |
lizmat | ah? | 22:19 | |
samcv | yea | ||
t/spec/S03-metaops/zip.t failed 4 | |||
lizmat checks | |||
samcv: you're right, but odd that I didn't see that :-( | 22:22 | ||
guess it's 6920dad16f5 | |||
lizmat checks | |||
dalek | kudo/nom: bd03adb | lizmat++ | src/core/ (2 files): Revert "Make single element Z a bit faster" This reverts commit 6920dad16f59b0de314bb0fae5027b8039e9847b. |
22:25 | |
lizmat | samcv++ # spotting the error of my ways :-) | ||
bartolin | pmurias: thanks! the first time I looked, I didn't find the | ||
lizmat | I'm starting to look at optimizing hypers | ||
bartolin | pmurias: thanks! the first time I looked, I didn't find the right way to write those tests. | ||
pmurias: I think I understand it now :-) | 22:26 | ||
dalek | kudo/nom: 0f25d83 | lizmat++ | src/core/metaops.pm: Make is nodal check a bit faster The existence of the method is enough to mark nodality. No need to call it to find out. |
22:47 | |
kudo/nom: 516e527 | lizmat++ | src/core/Capture.pm: Make Capture.Bool about 3x as fast It wasn't much to begin with, but it appears to be checked a lot. |
23:07 | ||
timotimo | neat | 23:16 | |
dalek | kudo/nom: 996ab6a | lizmat++ | src/core/Mu.pm: Streamline "hyper" nodality test a bit |
23:20 | |
ast: 0349626 | flussence++ | S19-command-line/arguments.t: Add command line test for UTF-8 decoding of @*ARGS (#215) Github issue ref: MoarVM/MoarVM#482 |
23:40 |