samcv | would %hash{int} be faster than %hash{Int} or the same | 00:59 | |
i think i'm going to have to nqp optimize the bitfield generation part of this script. but i'm running profile on it now | 01:01 | ||
for whatever reason something i'm doing is way slower than all the rest of the code | |||
geekosaur | about the same, from what was said earlier about the implementation | ||
samcv | yeah that's what I expected | 01:02 | |
does push and join have a lot of overhead? | |||
i guess profile will tell me what's making this code slow | |||
once it completes... | |||
geekosaur | you might do better to switch to a sparse array as was recommended earlier | ||
samcv | how do I make a sparse array? | 01:04 | |
and I guess shaped arrays are faster. I could use that too | |||
geekosaur | just don't assign it initially, it *should* hopefully be sparse enough as is. | 01:06 | |
samcv checks the profile | |||
you mean `my @array` < that's sparse? | |||
geekosaur | conceivably it wont and that could be bad depending on the highest numbered codepoinnt you deal with, but someone else will have to answer in that case | ||
as long as you don;t initialize it, yes | |||
samcv | hmm. wow | 01:07 | |
geekosaur | the spine will be allocated to the max codepoint but it won;t use space for missing values | ||
samcv | 58% of the exclusive time was… | ||
infix:<~> | |||
SETTING::src/core/Str.pm:2728 | |||
:o | |||
did not expect that | |||
geekosaur | real sparse arrays generally have to be emulated but that puts you into object hash territory which is where you are now, unless someone added an actual sparse array type with reasonable behavior when I wasn't looking | 01:08 | |
geekosaur suddenly wonders about difference lists :p | |||
samcv | yeah coding the concatenation in nqp sped it up so much | 01:24 | |
this is infix ~: nqp::p6box_s(nqp::concat(nqp::unbox_s(a), nqp::unbox_s(b))) | |||
so it did that a whole ton of times | |||
geekosaur, is there a way we can optimize "this" ~ "this" ~ "this" so it doesn't have to unbox twice and rebox once for each ~ | 01:29 | ||
geekosaur wonders about some way to optimize by telling it to skip .... heh | |||
there isn;t that I know of | |||
samcv | two ~ causes 4 unboxings and 2 boxing. and just gets bigger the more | ||
damn | |||
geekosaur | and I suspect it would require special codegen since checking a flag each time might eat up speed gains | 01:30 | |
but some kind of unboxing @foo, $bar { code that can skip the unbox/rebox, unboxed on entry, boxed on close, error if something requires it to be boxed } might be clever | 01:31 | ||
samcv | yeah | ||
geekosaur | alternately, really clever codegen could notice there's nothing but that going on and batch them itself, but I suspect we're a long ways from being able to do that optimization as yet | 01:32 | |
(it *is* on the long term plan, but you need some hairy data analysis to determine whether it's safe, much less whether it'd actually be a gain) | 01:33 | ||
samcv | i'll probably make an operator | 01:37 | |
⟅'string', 'otherstring', 'thing'⟆ | |||
to concat all of them or something | |||
geekosaur | irony: you'd also want this if we had actual non-string hash support in the backend, since you'd likely be using an unboxed int key behind the scenes and get wins if you can directly use an unboxed p6 value | ||
b2gills | samcv: Actually just special case `[~] 'string', 'otherstring', 'thing'` like we have for [+] 1..100 | 01:54 | |
samcv | ah nice | 01:55 | |
how do you have typed slurpy arrays? | 01:58 | ||
not possible? | |||
not sure how to special case it | |||
significantly faster pushing all strings to an array and joining it once | 02:11 | ||
hopefully I can get this down to fast enough even when it loads all the unicode data | 02:12 | ||
Geth | p: 994d2159fc | TimToady++ | src/QRegex/Cursor.nqp Uniqueify fates in prep for NFA optimizations Prior to now, fates were always numbered starting with 1 for protos and starting with 0 for alts. We are moving to a model in which all fate numbers are unique across the process. Every NFA now knows its own range of fates, in the range of fbeg ..^ fend. Conveniently, for both protos and alts, the 0th fate name entry was already unused and set to 0, so we encode the new fbeg and fend into the 0th fate name. Eventually, the uniqueness of fates will allow us to use a top-level NFA scan to determine in advance exactly what some of the sub-scans will do. Currently we have duplicate scans for lower-level rules; when the top-level scan can return multiple levels of fates to the ... (1 more lines) |
03:32 | |
p: 2e4ea5886c | TimToady++ | tools/build/MOAR_REVISION bump MoarVM |
|||
TimToady | so...Geth replaces the final line to report that there's 1 more line... | 03:33 | |
diakopter | revisionist history | 03:42 | |
timotimo | TimToady: got a clue how much we'll be able to save when redundant nfa scans will be optimized away with this? | 03:48 | |
TimToady | I know a lot of positions in the setting are lexed 4 or 5 times | 03:49 | |
timotimo | that's alot | ||
how much time all in all does NFA running take? | |||
TimToady | haven't measured for a while, but somewhere on the order of 10% | 03:50 | |
timotimo | hm, fair enough | 03:51 | |
will we be able to improve optimization of NFAs at all with this? | |||
because adding operatiors in a module makes compile time grow pretty ridiculously | |||
TimToady | that's one of the goals, if we can do tail-sharing on NFA graphs | 03:52 | |
we were talking about that a couple days ago... | |||
samcv | s: help | 03:53 | |
SourceBaby | samcv, Something's wrong: �ERR: ===SORRY!=== Error while compiling -e�Undeclared routine:� help used at line 6�� | ||
samcv | SourceBaby, help | ||
SourceBaby | samcv, Use s: trigger with args to give to sourcery sub. e.g. s: Int, 'base'. See modules.perl6.org/dist/CoreHackers::Sourcery | ||
samcv | s: Int, '.^name' | ||
SourceBaby | samcv, Something's wrong: ERR: Type check failed in binding to &code; expected Callable but got Nil (Nil) in sub do-sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 42 in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 33 in block <unit> at -e line 6 | ||
samcv | where is the ^name method ? | ||
timotimo | it's in the HOW | 03:54 | |
samcv | kk | ||
timotimo | likely in ClassHOW for Int | ||
you can define a ^foo method in your class, which will mix in the method to the HOW specifically for that class | 03:55 | ||
but other than that all ^bar methods live in the HOW class | |||
timotimo BBL | 03:56 | ||
geekosaur | s: ClassHOW, 'name', \(Int) | 04:00 | |
SourceBaby | geekosaur, Something's wrong: �ERR: ===SORRY!=== Error while compiling -e�Undeclared name:� ClassHOW used at line 6�� | ||
geekosaur | feh | ||
samcv | ok so i'm going to stop using %hash{Int}, too slow | 04:08 | |
just gonna make a sub key-sort that does nqp::fromstr_I($^a) cmp etc | 04:09 | ||
calling .WHAT on Int used 9% of the cpu time | |||
for sub reason trying to augment class Hash made MVM very unhappy. wouldn't even compile | 04:11 | ||
m: augment class Hash { method atetetata { } } | 04:12 | ||
camelia | rakudo-moar b7cd77: OUTPUT«5===SORRY!5=== Error while compiling <tmp>augment not allowed without 'use MONKEY-TYPING'at <tmp>:1------> 3augment class Hash7⏏5 { method atetetata { } } expecting any of: generic role» | ||
samcv | m: use MONKEY-TYPING; augment class Hash { method atetetata { } } | ||
camelia | ( no output ) | ||
timotimo | m: say Metamodel::ClassHOW | ||
camelia | rakudo-moar b7cd77: OUTPUT«(ClassHOW)» | ||
timotimo | s: Metamodel::ClassHOW, 'name', \(Int) | ||
SourceBaby | timotimo, Something's wrong: ERR: No such method 'map' for invocant of type 'NQPRoutine' in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 25 in block <unit> at -e line 6 | ||
timotimo | oh well | ||
samcv | ===SORRY!=== | ||
Cannot invoke this object (REPR: Null; VMNull) | |||
this is what i got for some reason | |||
timotimo | are you writing nqp code? | 04:13 | |
nqp: UndefinedName() | |||
camelia | nqp-moarvm: OUTPUT«Cannot invoke this object (REPR: Null; VMNull) at <tmp>:1 (<ephemeral file>:<mainline>) from gen/moar/stage2/NQPHLL.nqp:1582 (/home/camelia/rakudo-m-inst-1/share/nqp/lib/NQPHLL.moarvm:eval) from gen/moar/stage2/NQPHLL.nqp:1785 (/home/camelia/rakudo-m…» | ||
samcv | hm | ||
timotimo | ^- one of the likely causes of this | ||
geekosaur | oh, right, Metamodel (not that it worked...) | 04:14 | |
Geth | kudo: usev6++ created pull request #994: [JVM] Add missing comma in workaround for r-j |
05:51 | |
kudo/nom: bb8ec30012 | (Christian Bartolomäus)++ | src/core/Rakudo/Iterator.pm [JVM] Add missing comma in workaround for r-j |
09:18 | ||
kudo/nom: 2140c90088 | (Zoffix Znet)++ | src/core/Rakudo/Iterator.pm Merge pull request #994 from usev6/patch-4 [JVM] Add missing comma in workaround for r-j |
|||
[Tux] | This is Rakudo version 2016.12-336-g2140c9008 built on MoarVM version 2016.12-115-ged2df9ac | 09:49 | |
csv-ip5xs 2.892 | |||
test 12.866 | |||
test-t 5.201 | |||
csv-parser 13.143 | |||
brokenchicken | s: Int.HOW, 'name', \(Int) | 10:06 | |
SourceBaby | brokenchicken, Something's wrong: ERR: No such method 'map' for invocant of type 'NQPRoutine' in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 25 in block <unit> at -e line 6 | ||
Geth | pan style="color: #d55e83">geth: 8d5ae680eb | (Zoffix Znet)++ | lib/Geth/GitHub/Hooks.pm6 Don't bother decoding JSON for unsupported events Might ameliorate the leakage |
10:20 | |
pan style="color: #d55e83">geth: b2098efbbe | (Zoffix Znet)++ | 2 files Fix compare URL for multi-commit push events Use 'before'/'after' keys in the webhook data instead of shas of first/last commits. |
10:29 | ||
pan style="color: #d55e83">geth: 8bcea9e84f | (Zoffix Znet)++ | lib/Geth/Plugin/GitHub.pm6 Smartify commit abridger If we know we'll have to abridge the commit message, print fewer lines than for maximum unabridged commit messages. |
10:40 | ||
brokenchicken | oh, gee... there's even a compare url in the webhook json -_- | 11:06 | |
jnthn | .tell TimToady I guess you get notifications of github commit comments, but just in case: github.com/perl6/nqp/commit/994d21...t-20481890 | 11:57 | |
yoleaux2 | jnthn: I'll pass your message to TimToady. | ||
Geth | pan style="color: #d55e83">geth: 25c0c6819e | (Zoffix Znet)++ | 3 files Implement version bump detector Detect NQP/MoarVM version bump commits and include /compare/ URL to see what commits the version bump brought in. |
12:50 | |
brokenchicken | check this out.... | 12:51 | |
Geth | p: 1d4f071453 | (Elizabeth Mattijsen)++ | tools/build/MOAR_REVISION Bump Moar to get the latest goodies / fixes |
||
nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...3-gd1da1ba | |||
brokenchicken | \o/ | ||
neat | |||
lizmat | Files=1164, Tests=56530, 186 wallclock secs (10.93 usr 4.71 sys + 1108.49 cusr 118.74 csys = 1242.87 CPU) | 13:23 | |
brokenchicken++ :-) | 13:24 | ||
jnthn | cute | 13:45 | |
brokenchicken++ | |||
lizmat | m: dd (1 X 1..* X 2)[^10] # this shouldn't timeout, should it ? | 14:13 | |
camelia | rakudo-moar 2140c9: OUTPUT«(timeout)» | 14:14 | |
TimToady | star: dd (1..* X 1 X 2)[^10] # at least the useful one works right | 15:55 | |
yoleaux2 | 11:57Z <jnthn> TimToady: I guess you get notifications of github commit comments, but just in case: github.com/perl6/nqp/commit/994d21...t-20481890 | ||
camelia | star-m 2016.10: OUTPUT«((1, 1, 2), (2, 1, 2), (3, 1, 2), (4, 1, 2), (5, 1, 2), (6, 1, 2), (7, 1, 2), (8, 1, 2), (9, 1, 2), (10, 1, 2))» | ||
TimToady | m: dd (1..* X 1 X 2)[^10] # at least the useful one works right | ||
camelia | rakudo-moar 2140c9: OUTPUT«((1, 1, 2), (2, 1, 2), (3, 1, 2), (4, 1, 2), (5, 1, 2), (6, 1, 2), (7, 1, 2), (8, 1, 2), (9, 1, 2), (10, 1, 2))» | ||
lizmat | TimToady: so maybe warn / die on non-useful combinations of lazy iterators in X ? | 19:20 | |
TimToady: fwiw, I'm refactoring X atm, just trying to find out what needs to be fixed :-) | 19:21 | ||
MasterDuke | if anybody is interested, here is another set of data from --profile--compile'ing the rakudo build: gist.github.com/MasterDuke17/77230...805c3274b5 | 19:26 | |
dogbert17: re your conv in #moarvm, you could try with --debug=3 | 19:36 | ||
timotimo | oh yes | 19:40 | |
always --debug=3 | |||
lizmat | m: dd infix:<X>() # would have expected an empty list here ? | 19:42 | |
camelia | rakudo-moar 2140c9: OUTPUT«((Any,),).Seq» | ||
lizmat | I mean, a Seq with an empty list | ||
no, actually an empty list, just like: | 19:43 | ||
m: dd infix:<Z>() | |||
camelia | rakudo-moar 2140c9: OUTPUT«().Seq» | ||
brokenchicken too | 20:11 | ||
lizmat three | 20:17 | ||
timotimo meh | 20:20 | ||
AlexDaniel three and a half? | |||
u: { .chr.unival == 3.5 } | 20:21 | ||
unicodable6 | AlexDaniel, U+0F2D TIBETAN DIGIT HALF FOUR [No] (༭) | ||
AlexDaniel | u: { .chr.unival == -0.5 } | 20:22 | |
unicodable6 | AlexDaniel, U+0F33 TIBETAN DIGIT HALF ZERO [No] (༳) | 20:23 | |
Geth | ast: a89273d659 | usev6++ | S03-metaops/zip.t [JVM] Unfudge now passing tests, RT #130532 |
21:15 | |
dogbert17 | MasterDuke: thx, will try and update the gist if I manage to provoke the bug again | 22:04 | |
AlexDaniel | re: ⩵ ⩶ and fixed-width fonts: it occurred to me that some characters are actually double-width | 22:20 | |
for example, you don't expect 属 to be as wide as “a”, even if you are using a fixed-width font | 22:21 | ||
and that's exactly what I see here, by the way (⩵ and ⩶ are double-width) | 22:22 | ||
so samcv is right and I was wrong | |||
samcv | heh what? | 22:23 | |
AlexDaniel | I mean, there's no reason not to support these because of whatever font reason one can come up with | ||
samcv | yeah i think that's a good take on it. as long as the character unambigously is the same as | 22:24 | |
if it is ambiguous from a character perspective like the thunderbolt or any other thing, i think we may want to take that into account | |||
AlexDaniel | m: say ‘属’.uniprop(‘East_Asian_Width’) | 22:26 | |
camelia | rakudo-moar 2140c9: OUTPUT«» | ||
AlexDaniel | m: say ‘a’.uniprop(‘East_Asian_Width’) | 22:27 | |
camelia | rakudo-moar 2140c9: OUTPUT«» | ||
AlexDaniel | u: { so .uniprop(‘East_Asian_Width’) } | 22:29 | |
unicodable6 | AlexDaniel, Found nothing! | ||
AlexDaniel | samcv: is it a thing? | ||
samcv: I'm reading this unicode.org/reports/tr11/ | 22:30 | ||
samcv | it is a thing. it's not in MVM | 22:37 | |
yet | |||
AlexDaniel | :( | 22:42 | |
should I create a ticket for that? | 22:43 | ||
timotimo | we do have a module in the ecosystem for that | 22:45 | |
samcv | for east asian width? | ||
you could make an rt. there's a test in roast for it | |||
my stale pr from weeks ago added east asian width but other things took priority over adding loads of random properties | 22:46 | ||
but it may be useful | |||
timotimo | github.com/bluebear94/Terminal-WCWidth | 22:47 | |
samcv | unicode didn't used to be set to wide chars except since unicode 9 | 22:49 | |
before that it was primarily only for literally… east asian width… for east asian characters ;P | |||
but it is good they expanded it since people wanted it | |||
AlexDaniel | RT #130564 | 22:50 | |
samcv | i'll add that in today AlexDaniel | 22:51 | |
AlexDaniel | wow, hold on your horses… it's not that I actually need it :) | ||
samcv | too soon? ok i'll add it tomorrow then | ||
XD | |||
AlexDaniel | xD | ||
MasterDuke | samcv: you (or anybody interested in string handling) might like this: github.com/minimaxir/big-list-of-n...ty-strings | 23:23 | |
samcv | yeah i have seen it :) | ||
thanks tho | |||
lizmat | good night, #perl6-dev! | 23:36 | |
brokenchicken | night | 23:38 |