geekosaur |
jdv79, that's over 2 months, note. there have been a bunch of individual smallish speedups that add up since then. |
00:15 |
|
timotimo |
does anybody have a benchmark that involves a lot of single-grapheme strings? |
00:22 |
|
MasterDuke |
m: (^20).map(*.comb.sum).say |
01:14 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«(0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10)» |
|
|
MasterDuke |
timotimo: something like that ^^^ ? |
01:15 |
|
|
i feel i've done things like that for a bunch of project euler problems |
|
|
timotimo |
thing is, i've implemented a cache for one-grapheme strings in moarvm, and i'd like to have some measurements from some benchmarks where you can see it kick in |
01:25 |
|
MasterDuke |
one-character strings (the output of .comb) aren't one-grapheme? |
01:28 |
|
timotimo |
they are |
01:31 |
|
MasterDuke |
but the cache wouldn't kick in if you significantly increased the range you're doing the map over? |
01:32 |
|
timotimo |
it kicks in with the first one, but it wouldn't really be noticable at that size |
|
|
MasterDuke |
size of what? |
01:35 |
|
timotimo |
20 numbers |
|
|
|
also, there's a difference still between Str objects and the MVMStrings they box |
01:36 |
|
|
so you'll still end up with a Str object each time, much unlike the boxed integer cache we also have |
|
|
MasterDuke |
i just put 20 since the output gets truncated by say (and camelia), in my project euler problems the number is much much larger |
|
|
Zoffix |
m: join ^0xFFFFF».chr xx 20000; # 😜 |
01:37 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«(signal SEGV)» |
|
|
timotimo |
m: 5 does role { method omg { say "oh my" } }; say 5.omg |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«oh myTrue» |
|
|
timotimo |
m: 1024 does role { method omg { say "oh my" } }; say 1024.omg |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«oh myTrue» |
|
|
timotimo |
huh? |
|
|
Zoffix |
? |
|
|
timotimo |
m: 99_999_999 does role { method omg { say "oh my" } }; say 99_999_999.omg |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«oh myTrue» |
|
|
timotimo |
m: 99_999_999 does role { method omg { say "oh my" } }; say 1.omg |
01:38 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«Method 'omg' not found for invocant of class 'Int' in block <unit> at <tmp> line 1» |
|
|
timotimo |
how does that cache i made actually work? :D |
|
|
|
m: my @foo = ^10000.List; 99_999_999 does role { method omg { say "oh my" } }; say 99_999_999.omg |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«Potential difficulties: Precedence of ^ is looser than method call; please parenthesize at <tmp>:1 ------> my @foo = ^10000⏏.List; 99_999_999 does role { method omgoh myTrue» |
|
|
timotimo |
m: my @foo = (^10000).List; 99_999_999 does role { method omg { say "oh my" } }; say 99_999_999.omg |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«oh myTrue» |
|
|
timotimo |
*shrug* |
|
|
Zoffix |
m: say 99_999_999 === 99_999_999; say 99_999_999 === Int; say 99_999_999 === 1 |
01:39 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«TrueFalseFalse» |
|
|
MasterDuke |
m: say 99_999_999 ~~ Int; say 99_999_999 === Int |
01:40 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«TrueFalse» |
|
|
MasterDuke |
m: say 99_999_999 ~~ Int; say 99_999_999 === Int; say 99_999_999.WHAT === Int |
01:42 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«TrueFalseTrue» |
01:46 |
|
Zoffix |
m: "foo" does role { method foo { "foo" } }; say "foo".foo |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«foo» |
|
|
Zoffix |
m: "foo" does role { method foo { "foo" } }; say "foos".foo |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«Method 'foo' not found for invocant of class 'Str' in block <unit> at <tmp> line 1» |
|
|
Zoffix |
m: { "foo" does role { method foo { "foo" } }; }; { say "foo".foo } |
|
|
camelia |
rakudo-moar 9b579d: OUTPUT«foo» |
|
|
Zoffix |
That's creepy :S |
|
|
|
star: { "foo" does role { method foo { "foo" } }; }; { say "foo".foo } |
|
|
camelia |
star-m 2016.04: OUTPUT«foo» |
|
|
Zoffix |
star: { "foo" does role { method say { "foo" } }; }; { say "foo".foo } |
|
|
camelia |
star-m 2016.04: OUTPUT«Method 'foo' not found for invocant of class 'Str+{<anon|54957776>}' in block <unit> at <tmp> line 1» |
|
|
Zoffix |
star: { "foo" does role { method say { "foo" } }; }; { say "foo".say } |
|
|
camelia |
star-m 2016.04: OUTPUT«foo» |
|
|
Zoffix |
dafuq |
|
|
|
m: $_.Int does role { method gist { self + 2 } } for ^100; say 2 + 2 |
01:51 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«This type cannot unbox to a native string: P6opaque, Int+{<anon|73702160>} in block <unit> at <tmp> line 1» |
|
|
Zoffix |
m: module { { { { { .Int does role { method Str { (self + 2).Str } } for ^1000; } } } } }; { { { { say "2 + 1 is {2 + 1}"; say "2 * 0 is {2 * 0}"; say "the-answer is " ~ 42} } } } |
01:58 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«2 + 1 is 152 * 0 is 16the-answer is 42» |
|
|
Zoffix |
I wonder why the math operations give nonsense, but the ~ 42 is right |
01:59 |
|
|
m: {{{{{ &say does role { method CALL-ME ($s) { "You wanted to print `$s`, eh? Well... YOU CAN'T! Muahaha".print } } }}}}}; {{{{{ say "Foo" }}}} } |
02:06 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«You wanted to print `Foo`, eh? Well... YOU CAN'T! Muahaha» |
|
|
Zoffix |
^ I wonder if this should even be allowed :S |
|
|
|
m: use MONKEY-TYPING; augment class Sub { method CALL-ME ($) { say "wat" } }; |
02:07 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«Unhandled exception: Too many positionals passed; expected 2 arguments but got 4 at <tmp>:1 (<ephemeral file>:CALL-ME) from gen/moar/m-BOOTSTRAP.nqp:2841 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/Perl6/BOOTSTRAP.moarvm:) from gen/moar/m-BOO…» |
|
|
Zoffix |
:/ |
|
|
|
m: use MONKEY-TYPING; augment class Int { method abs { "can't do this" } }; |
02:08 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«===SORRY!=== Error while compiling <tmp>Package 'Int' already has a method 'abs' (did you mean to declare a multi-method?)at <tmp>:1» |
|
|
Zoffix |
This ^. You can't augment a class method, but you can do considerable damage with mixing into core things. |
|
|
|
m: {{{{{ &sum does role { method CALL-ME (@els) { [-] @els } } }}}}}; {{{{{ say sum ^100 }}}} } |
02:10 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«-4950» |
|
|
Zoffix |
Actually, I can "exploit" the augment to inject my stuff into core methods too |
03:19 |
|
|
Zoffix smells an exciting blog post |
|
|
|
m: use MONKEY-TYPING; augment class Str { subset MyOwn of Str where *; multi method uc (MyOwn $self:) { say "No uppercase for you!"; $self; }}; say "foo".uc; |
03:20 |
|
camelia |
rakudo-moar 9b579d: OUTPUT«No uppercase for you!foo» |
|
|
Zoffix |
Interestingly, just stuffing where * into the sig in this case doesn't work. NIY, I'm guessing. |
03:21 |
|
[Tux] |
This is Rakudo version 2016.06-25-g9b579d0 built on MoarVM version 2016.06 |
06:21 |
|
|
test 16.514 |
|
|
|
test-t 9.921 |
|
|
|
csv-parser 22.532 |
|
|
|
no fails. sad to see it go *up* again |
06:22 |
|
BrokenRobot |
hm... the augment multi trick doesn't work on my 2016.04 |
12:34 |
|
|
m: use MONKEY-TYPING; augment class Str { subset MyOwn of Str where *; multi method uc (MyOwn $self:) { say "No uppercase for you!"; $self; }}; |
|
|
camelia |
( no output ) |
|
|
BrokenRobot |
Oh, never mind. I forgot to actually call the augmented method >_< |
12:35 |
|
|
[Coke] finally gets some p6 time this coming week, and tries to figure out what to hack on. |
13:22 |
|
BrokenRobot |
rt.perl.org/Ticket/Display.html?id=128476 and rt.perl.org/Ticket/Display.html?id=128457 look very attractive :P |
13:54 |
|
|
#128457 should actually read "of Perl 6 and Perl 5 modules" |
|
|
MadcapJake |
[Tux]: is there any way to download the csv you are using for those tests? |
14:36 |
|
b2gills |
It doesn't appear that %*ENV works with nul characters, unless I'm doing something wrong |
14:51 |
|
geekosaur |
I don't think that can be fixed, since it's reflecting process environment which is C strings |
14:53 |
|
jnthn |
Was gonna say, we receive it and pass it along as C strings, which are NULL terminated. |
14:55 |
|
b2gills |
It was for displaying the results of a CG, I worked around it by not decoding it first codegolf.stackexchange.com/questio...3701#83701 |
14:58 |
|
|
The interesting thing is that the character that followed the nul made it in just fine |
14:59 |
|
psch |
grr |
15:33 |
|
|
this is still all really opaque |
|
|
|
especially with heisen failure modes |
15:36 |
|
|
as in, a plain install-core-dist.pl run dies with an NPE |
|
|
|
calling it in way that calls jdb-server it dies with the getexttype error instead |
15:37 |
|
|
which i of course can't debug when i try to catch an NPE... |
|
|
|Tux| |
MadcapJake, tux.nl/Talks/CSV6/speed.html - where I use 10000 instead of 1000000 |
15:39 |
|
MadcapJake |
cool thanks! |
15:41 |
|
bartolin |
psch: you should be able to avoid the getextype error if you revert (or special case with '#?!jvm') rakudo commit e5443765d4 |
16:56 |
|
|
#?if !jvm |
16:57 |
|
psch |
bartolin: yeah, i saw that suggestion |
16:58 |
|
|
bartolin: i'm more interested in figuring out why it happens right now though :) |
|
|
|
i have a suspicion, fwiw |
16:59 |
|
bartolin |
I see (just wanted to make sure that you did not miss it; you seemed to be desperate :-) |
17:00 |
|
psch |
yeah, i seem to do that a lot :/ |
17:02 |
|
MadcapJake |
|Tux|: oofta, only 16% of the way to finishing this csv file :P |
17:37 |
|
[Tux] |
oofta? |
19:51 |
|
timotimo |
are you running it in valgrind or something? :) |
20:06 |
|
MadcapJake |
oofta is a wisconsin saying :P means "gee wiz" or "oi vey" or somesuch |
20:13 |
|
|
took 2 hrs and 30 mins :O |
20:14 |
|
b2gills |
oofta is the sound that you make as someone hands you a box that is way heavier than you thought it was |
20:39 |
|
FROGGS |
like you help someone (probably a girl) changing flats and you get the box that says 'livingroom' and which is full of books? |
20:42 |
|
|
of course that person moves from the fifth floor of a building to the sixth floor of another |
20:43 |
|
|
ev-er-y-time |
20:44 |
|
brrt |
that's not possible |
|
|
|
where did the extra floor go |
|
|
|
:-P |
|
|
FROGGS |
heh, I dont even understand :o) |
20:45 |
|
brrt |
well, you assert that someone is always moving from the 5th to the 6th floor |
|
|
FROGGS |
it is not the same someone |
20:46 |
|
|
problem solved :o) |
|
|
brrt |
clearly, within the time they lived there, one of the floors between the ground and the 6th must have disappeared |
|
|
|
:-D |
|
|
geekosaur |
building sank from the weight of the books >.> |
20:47 |
|
FROGGS |
and then they were requested to leave... |
|
|
|
because loosing paying ppl due to vanishing floors just sucks |
20:48 |
|
|
jnthn was most relived to move into a building with a lift this time around |
21:02 |
|
|
I barely use it since I'm only on the third floor. |
|
|
|
But darn was it welcome when moving in. |
|
|
awwaiid |
github.com/rakudo/rakudo/pull/799 fixes the current known rakudo-REPL issues, if anyone has a chance to review |
22:54 |
|