»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
00:02 woolfy left 00:03 Vico_Wu1 joined, berekuk left, Vico_Wu left 00:06 berekuk joined, xenoterracide_ joined 00:07 xenoterracide left
timotimo it seems like inspecting lexical variables for native-int-ness is somehow not working the same way on jvm as it is on parrot 00:11
BenGoldberg rn: (^Inf).infinite.say
camelia niecza v24-88-g1f87209: OUTPUT«Unhandled exception: Unable to resolve method infinite in type Range␤ at /tmp/8Uh2jGLaxf line 1 (mainline @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 4579 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 4580 (module-CORE @ 576) ␤ at /…
..rakudo 59f060: OUTPUT«True␤»
timotimo nqp-jvm: say(nqp::objprimspec(int))
camelia nqp-jvm: OUTPUT«1␤»
00:11 xenoterracide_ left
BenGoldberg Is there (will there be) an official way to test if a list is infinite? 00:12
timotimo hm, is .infinite not official?
perlcabal.org/syn/S07.html#The_.infinite_method - it's specced at least. 00:13
BenGoldberg Oh 00:14
00:14 nugged joined
BenGoldberg nevermind, then :) 00:14
r: say Mu 00:15
camelia rakudo 59f060: OUTPUT«(Mu)␤»
BenGoldberg r: say gather { }.infinite
camelia rakudo 59f060: OUTPUT«Nil␤»
timotimo oh. nope, it was just lines that should have been removed still being there
BenGoldberg The spec says it should return Mu if it's unknown whether the list is infinite 00:16
00:16 grondilu left
timotimo the lists spec is headed for a rewrite by pmichaud 00:16
but he's pretty swamped with other work :(
no, hold on. i think it's S06 instead? 00:17
no, er ...
why is s07 so short? i remember it being much longer!
00:18 colomon joined, woolfy joined
timotimo i love the way the jvm just parses the core setting 3x as fast as parrot 00:18
colomon it does? 00:19
00:19 nugged left
timotimo just 40 seconds for stage parse on my computer 00:19
segomos are sockets good to go in jvm?
timotimo (and 4 seconds for the optimizer)
not yet, but there's a bit of progress
oh 00:27
OH!
mega facepalm engage
i was changing op.name instead of op.op all the time 00:28
that would really have 0 effect on performance
[Coke] updated gist.github.com/coke/5879701 , it's been a while 00:29
slavik jnthn: arnsholt: sorry for bugging, but NativeCall can be used in a method, right? (specifically, the declaration of a sub from a library), for example: git_repository_open only makes sense in the constructor.
also, how can I handle a pointer to a pointer? 00:30
timotimo github.com/arnsholt/Net-ZMQ/blob/m.../Socket.pm - here's some example usage of nativecall being used together with methods 00:31
00:31 dayangkun joined
slavik ty 00:31
timotimo i'd try CArray[CArray[something]] but what do i know ;)
slavik timotimo: I am wondering if I can put the my sub line inside a method
timotimo: thanks, that gives me something to go on :)
timotimo i think you should be able to no-prob
slavik timotimo: I owe you a GOOD beer. :) 00:32
timotimo haha, no way :)
slavik how come?
00:33 pmurias left, benabik left
timotimo it's nothing ;) 00:36
slavik :( 00:37
00:37 xinming left 00:40 xinming joined, colomon left
BenGoldberg If jvm runs so much faster than parrot... how silly would it be to use jvm-rakudo to cross-compile to parrot-rakudo? 00:43
00:43 benabik joined 00:44 colomon joined
colomon timotimo: hmmm, parsing is 72s versus 162s for me, so closer to 2x than 3x faster here. Still a substantial improvement! 00:44
timotimo i have 40 vs ~110
slavik BenGoldberg: I don't see the point of something like that 00:47
BenGoldberg Speed?
timotimo i see no more obvious and dumb mistakes in my nqp optimizer, but i also see no performance change whatsoever :(
slavik timotimo: give it some drugs :P 00:48
timotimo: do you know what { * } specifically means when importing stuff from libs? {} is a block, but what is * in that context? 00:49
timotimo {*} has something to do with protos
if you have a proto method/sub foo() {*} it means that it does no special dispatching
it is then also called an "onlystar proto"
in other contexts, it can be interpreted in any way 00:50
r: sub foo() { * }; say &foo.onlystar;
camelia rakudo 59f060: OUTPUT«False␤»
timotimo oh?
r: proto sub foo() { * }; say &foo.onlystar;
camelia rakudo 59f060: OUTPUT«True␤»
timotimo right.
BenGoldberg r: *.say
timotimo only for protos you see
camelia rakudo 59f060: ( no output )
benabik r: sub foo() { * }; say foo, foo.WHAT
camelia rakudo 59f060: OUTPUT«*(Whatever)␤»
BenGoldberg r: *.gist.say
camelia rakudo 59f060: ( no output )
BenGoldberg r: *.WHAT.say 00:51
camelia rakudo 59f060: OUTPUT«(Whatever)␤»
benabik BenGoldberg: *.say creates a sub.
timotimo r: (*.gist.say).gist.say
camelia rakudo 59f060: ( no output )
BenGoldberg my $a = *; $a.say
r: my $a = *; $a.say
camelia rakudo 59f060: OUTPUT«*␤»
BenGoldberg :)
timotimo r: my $a := *.gist.say; say $a.WHAT; 00:53
camelia rakudo 59f060: OUTPUT«(WhateverCode)␤»
timotimo r: my $a := *.gist.say; say $a(<hi there>);
camelia rakudo 59f060: OUTPUT«hi there␤True␤»
BenGoldberg So that's like
r: say(<hi there>.gist.say) 00:54
camelia rakudo 59f060: OUTPUT«hi there␤True␤»
timotimo yes
BenGoldberg :)
timotimo does the codegen perhaps still build the coerce ops even though i annotated correct return types everywhere i could figure them out and turned add_n into add_i? 00:55
having any amount of coerce_n2i(add_n(corece_i2n(foo), coerce_i2n(bar))) in the code should cause performance decreases in my opinion :( 00:56
maybe i'm chipping away at milisecond differences in the context of a program that runs for a minute
BenGoldberg Learning how dwim-y things work is fun :) 00:57
00:57 jeff_s1 left, jeff_s1 joined
BenGoldberg Hmm... 00:57
Maybe you're optimizing the wrong part of the program? 01:00
timotimo i'm optimising any occurence of +, - and * in all stuff that's written in nqp across nqp and rakudo 01:01
at least if both arguments can be proven to be ints
my debug output says i'm transforming quite a bunch of additions, subtractions (hardly any multiplications) 01:02
benabik I wouldn't expect optimizing math to make a big difference for parsing... I'd expect parse to be dominated by string operations and object creation.
timotimo it also does a bunch of cursor pushing and such
BenGoldberg Sure, but if those +, -, and * aren't called very often, or aren't in tight loops, then they're not that important overall... is there a profiler for nqp? 01:03
timotimo and lots of loops are based on an integer loop var that gets +1'd
there is one for rakudo, not sure if there's one for nqp
BenGoldberg I forget, is the parser in rakudo or nqp? 01:04
timotimo nqp
BenGoldberg There exist jvm parsers...
Err, I meant there exist jvm profilers 01:05
If you use rakudo on jvm, and use a jvm profiler, would it tell you what parts of the parser take the longest to run? 01:06
timotimo good question
benabik It should, although you might get odd answers like __block_231 or however NQP/JVM names things. 01:07
BenGoldberg On a related note... when rakudo on jvm generates java bytecode, does it put debugging info (file names and line numbers) into that bytecode? 01:08
timotimo i believe it does, otherwise how would we get lines from backtraces?
nqp-jvm: sub foo() { die "omg" }; foo();
camelia nqp-jvm: OUTPUT«Cannot stringify this␤ in FAILGOAL␤ in blockoid␤ in routine_def␤ in routine_declarator:sym<sub>␤ in !protoregex␤ in routine_declarator␤ in term:sym<routine_declarator>␤ in !protoregex␤ in term␤ in termish␤ in EXPR␤ in statement␤ in statementlist␤ in comp_un…
timotimo oh ... no line number 01:09
BenGoldberg nqp: sub foo() { die "omg" }; foo()
camelia nqp: OUTPUT«Unable to parse expression in blockoid; couldn't find final '}' at line 2, near "die \"omg\" "␤current instr.: 'panic' pc 14721 (src/stage2/gen/NQPHLL.pir:5232) (src/stage2/gen/NQPHLL.nqp:279)␤»
timotimo you need () around die in nqp 01:10
BenGoldberg nqp: sub foo() { die("omg") }; foo()
camelia nqp: OUTPUT«Could not find sub &die␤current instr.: 'foo' pc 71 ((file unknown):54) (/tmp/gRCoZX6JPm:1)␤»
BenGoldberg nqp-jvm: sub foo() { die("omg") }; foo()
timotimo oh, and you need nqp::die i think
camelia nqp-jvm: OUTPUT«Lexical '&die' not found␤ in foo␤ in <anon>␤ in <anon>␤ in eval␤ in evalfiles␤ in command_eval␤ in command_line␤ in MAIN␤ in <anon>␤ in <anon>» 01:11
BenGoldberg nqp-jvm: sub foo() { nqp::die("omg") }; foo()
camelia nqp-jvm: OUTPUT«omg␤ in foo␤ in <anon>␤ in <anon>␤ in eval␤ in evalfiles␤ in command_eval␤ in command_line␤ in MAIN␤ in <anon>␤ in <anon>»
BenGoldberg nqp: sub foo() { nqp::die("omg") }; foo()
camelia nqp: OUTPUT«omg␤current instr.: 'foo' pc 68 ((file unknown):55) (/tmp/Y9bT940XNY:1)␤»
timotimo i'll run actual nqp microbenchmarks now.
BenGoldberg r: my @a = gather { .take $_ for ^Inf } but role { sub infinite { True } }; for @a { .say; last }; say 'done'; 01:13
camelia rakudo 59f060: OUTPUT«===SORRY!=== Error while compiling /tmp/uNJq2gKht_␤Two terms in a row␤at /tmp/uNJq2gKht_:1␤------> my @a = gather { .take ⏏$_ for ^Inf } but role { sub infinite { ␤ expecting any of:␤ method arguments␤ postfix␤ …
BenGoldberg r: my @a = gather { .take $_ for (^Inf) } but role { sub infinite { True } }; for @a { .say; last }; say 'done';
camelia rakudo 59f060: OUTPUT«===SORRY!=== Error while compiling /tmp/VpqpW9rLXa␤Two terms in a row␤at /tmp/VpqpW9rLXa:1␤------> my @a = gather { .take ⏏$_ for (^Inf) } but role { sub infinite ␤ expecting any of:␤ method arguments␤ postfix␤ …
BenGoldberg r: my @a = gather { take $_ for (^Inf) } but role { sub infinite { True } }; for @a { .say; last }; say 'done';
camelia rakudo 59f060: OUTPUT«(timeout)» 01:14
BenGoldberg r: my @a = gather { take 1; say 'x' } but role { sub infinite { True } }; for @a { .say; last }; say 'done';
timotimo of course the benchmark framework builds a new parrot each time ... at least it won't try to build a complete jvm :P
camelia rakudo 59f060: OUTPUT«x␤This type does not support elems␤ in method REIFY at src/gen/CORE.setting:7492␤ in method reify at src/gen/CORE.setting:6718␤ in method reify at src/gen/CORE.setting:6705␤ in method gimme at src/gen/CORE.setting:7138␤ in method eager at src/gen/CORE.setting:…
01:14 Targen left
timotimo anyway. this'll take quite a while, i shall lay down and get a head start on my bedtimes 01:15
01:16 berekuk left 01:17 TimK1 joined, berekuk joined 01:18 berekuk left
TimK1 Confused... 01:18
> any(1, 2) != 1;
False
Shouldn't that be "any(False, True)"?
01:22 Mouq left
[Coke] r: say any(1,2) != 1; 01:30
camelia rakudo 59f060: OUTPUT«False␤»
[Coke] r: say 1|2 != 1;
camelia rakudo 59f060: OUTPUT«False␤»
lue r: say 1 != any(1,2); 01:31
camelia rakudo 59f060: OUTPUT«False␤»
lue r: say 1 == any(1,2); 01:32
camelia rakudo 59f060: OUTPUT«any(True, False)␤»
lue r: say 1 !== any(1,2);
camelia rakudo 59f060: OUTPUT«False␤»
TimK1 Exactly what I was getting on my local install. 01:33
01:35 colomon left 01:37 colomon joined 01:39 Mouq joined 02:16 nugged joined
benabik comparisons collapse junctions 02:18
TimK1 Then why...
r: say 1 == any(1,2);
camelia rakudo 59f060: OUTPUT«any(True, False)␤»
benabik Or at least I think they're supposed to?
TimK1 Indeed, this does collapse the junction... 02:19
r: say ?(1 == any(1,2));
camelia rakudo 59f060: OUTPUT«True␤»
02:19 Kiralexis left
benabik $a !== $b is the same as not $a == $b 02:20
So the _negation_ collapses the junction.
S03:3215
synopsebot Link: perlcabal.org/syn/S03.html#line_3215
02:21 nugged left
TimK1 Ah… It didn't always used to be that way, I gather. Some tutorials note that with junctions, $a != $b might not be the same as !($a == $b). That disturbed me. (See, e.g., perlgeek.de/en/article/5-to-6#post_08.) 02:23
Thanks for the clarification & spec reference! 02:25
02:26 Kiralexis joined 02:33 colomon left
BenGoldberg There are a few other ways to collapse a junction... in addition to "!", there are "not", "?", and "so" 02:34
not is like !, but lower precedence 02:35
? coerces it's argument to Bool, and has similar precedence to !
so does the same thing as ?, but has lower precedence (similar precedence to not)
r: r: say 1 == any(1,2) 02:36
camelia rakudo 59f060: OUTPUT«===SORRY!=== Error while compiling /tmp/4Fvsh1D9GO␤Two terms in a row␤at /tmp/4Fvsh1D9GO:1␤------> r⏏: say 1 == any(1,2)␤ expecting any of:␤ argument list␤ postfix␤ infix stopper␤ infix or meta-inf…
BenGoldberg r: r: say (1 == any(1,2))
camelia rakudo 59f060: OUTPUT«===SORRY!=== Error while compiling /tmp/LskHZ1Jj59␤Two terms in a row␤at /tmp/LskHZ1Jj59:1␤------> r⏏: say (1 == any(1,2))␤ expecting any of:␤ argument list␤ postfix␤ infix stopper␤ infix or meta-i…
02:36 zacts left
BenGoldberg r: (1 == any(1,2)).say 02:36
camelia rakudo 59f060: OUTPUT«any(True, False)␤»
BenGoldberg r: (1 == any(1,2)).so.say
camelia rakudo 59f060: OUTPUT«True␤»
BenGoldberg r: (1 == any(1,2)).not.say
camelia rakudo 59f060: OUTPUT«False␤»
BenGoldberg r: (1 == any(1,2)).!.say
camelia rakudo 59f060: OUTPUT«===SORRY!=== Error while compiling /tmp/MMH69oo7n8␤Confused␤at /tmp/MMH69oo7n8:1␤------> (1 == any(1,2)).⏏!.say␤ expecting any of:␤ postfix␤ dotty method or postfix␤»
BenGoldberg r: say ?(1 == any(1,2)) 02:37
camelia rakudo 59f060: OUTPUT«True␤»
BenGoldberg r: say !(1 == any(1,2))
camelia rakudo 59f060: OUTPUT«False␤»
02:39 panchiniak_ joined 02:40 cognominal left 02:41 panchiniak_ left
flussence rn: (1 == any(1,2)).&prefix:<!>.say 03:01
camelia rakudo 59f060, niecza v24-88-g1f87209: OUTPUT«False␤»
03:04 colomon joined 03:12 wtw joined 03:14 wtw_ left 03:31 preflex_ joined, ChanServ sets mode: +v preflex_, preflex left 03:32 preflex_ is now known as preflex, TimK1 left 03:35 BenGoldberg left 03:43 xenoterracide_ joined 03:46 araujo left 03:47 araujo joined 04:03 Khisanth left 04:06 xenoterracide_ left 04:09 fridim_ left 04:19 Khisanth joined, Khisanth is now known as Guest55283 04:32 colomon left 04:43 crab2313 joined 04:47 nugged joined 04:51 birdwindupbird joined, xinming left, nugged left 04:53 xinming joined 05:07 Vico_Wu1 left 05:13 mdn joined
moritz good morning 05:19
diakopter o/ 05:22
JimmyZ \o/ 05:23
05:39 crab2313 left 05:46 crab2313 joined, lizmat joined, mdn left 05:57 FROGGS joined 06:00 sidus joined
FROGGS r: say "test" ~~ rx{^ <-[e]>+ $} # segomos, BenGoldberg, I think this was what you meant 06:05
camelia rakudo 59f060: OUTPUT«Nil␤»
FROGGS the <![e]> timed out because it has no width, so the cursor doesnt move... 06:07
r: say "test" ~~ rx{^ . <![e]>+ $}
camelia rakudo 59f060: OUTPUT«Nil␤»
FROGGS r: say "test" ~~ rx{^ . <![e]>+}
camelia rakudo 59f060: OUTPUT«Nil␤»
FROGGS r: say "test" ~~ rx{. <![e]>+}
camelia rakudo 59f060: OUTPUT«(timeout)»
FROGGS hmmm, this could work I think 06:08
r: say "test" ~~ rx{<-[e]>+}
camelia rakudo 59f060: OUTPUT«「t」␤␤»
06:21 Guest55283 is now known as Khisanth 06:27 cognominal joined 06:32 grondilu joined
slavik I am completely lost at how to create references/pointers in perl6 ... I can't find anything relating to proper syntax 06:34
moritz slavik: well, usually you just don't, because it's all implicit
slavik: see perl6advent.wordpress.com/2011/12/1...nces-gone/ 06:35
slavik is it wrong to think of 'my $t = @a;' as $t being a reference to an array? 06:37
06:37 nugged joined
slavik moritz: in the off chance you may know, any idea if NativeCall can handle a CPointer to a CPointer (which points to a CStruct)? 06:38
moritz slavik: you can always use a CArray[CArray[YourCstruct]] and only use index 0 06:40
it's a hack, but it usually works
slavik: the problem with saying that $t is a reference is that @a is also a reference 06:41
slavik: which is why we say "$t is scalar that holds an array" or something like that
arnsholt A CPointer to a CPointer doesn't really make sense, since the pointer is opaque 06:42
slavik moritz: I see
arnsholt: this is in the sense of int ** a (in c/c++)
moritz arnsholt: but for many applications it would help a lot to have transparent pointers
or maybe s/transparent/dereferncable/ 06:43
arnsholt Yeah, I'm mulling over how we could do some kind of non-opaque pointer
Nothing concrete yet, though
slavik: At any rate, what moritz suggested is the only way to do what you want ATM 06:44
The syntax is a bit annoying, but the semantics are what you want
moritz -> venue 06:45
grondilu r: my $t = my @a = ^10; say @$t 06:46
camelia rakudo 59f060: OUTPUT«0 1 2 3 4 5 6 7 8 9␤»
06:46 Khisanth left
slavik ok, cool 06:46
thanks
06:49 shachaf joined 06:50 woolfy left 06:51 lizmat left 06:55 Su-Shee joined
Su-Shee good morning everyone. 06:55
moritz oh hai Su-Shee 06:56
06:56 kaleem joined
masak Su-Shee! \o/ 06:58
07:00 Khisanth joined
Su-Shee how's it going at the yapc? nice outcome of perl 6 interested people? :) 07:01
moritz Su-Shee: so far it's been great 07:02
Su-Shee good. :) 07:03
07:04 lizmat joined 07:05 dmol joined
masak yeah, people are enthusiastic about the new threading goodies. 07:11
and the presence on the JVM.
moritz: are you going to the txtspeak talk? I'm thinking about it.
moritz masak: no 07:12
masak ok. 07:13
moritz I'm staying in room 0
*main room
masak oh well. if his talk is brilliant, I bet I'll hear about it afterwards.
I liked "room 0" :)
07:15 thou left
grondilu still no video of yapc::eu 2013 on youtube :/ 07:17
masak grondilu: *during* the conference? hah! 07:19
tadzik hello hello 07:26
dalek kudo/nom: b581774 | (Elizabeth Mattijsen)++ | src/Perl6/World.nqp:
Make any container named ?*foo dynamic by default
07:28
kudo/nom: c0814ab | (Elizabeth Mattijsen)++ | src/core/PseudoStash.pm:
No longer need to check name for OUTER:: access
07:33 Mouq left
tadzik wonders if it's worth to go on the Language Numbering talk 07:33
moritz I'll go (or rather stay) there 07:35
masak too 07:42
07:42 nugged left 07:44 berekuk joined 07:45 FROGGS left, dmol1 joined 07:46 dmol left
tadzik well, let me know if it happens to be any constructive :) 07:47
07:51 lizmat left
nine_ jnthn: why Promise.anyof/allof and not use the existing any/or in Perl6? 07:53
moritz nine_: because any/all are for junctions, I'd guess 07:54
nine_ moritz: but anyof/allof stroke me as very similiar to junctions. I wonder if they could not have been realised using junctions. 07:55
moritz nine_: it's a dangerous thing to try to unify, I think 07:56
07:58 fhelmberger joined
nine_ dangerous but probably even more powerful. It just seems strange to have special methods that do almost the same for this. Perl 6 is full exploitation lwn.net/Articles/411845/ everywhere else 07:59
08:01 nugged joined 08:03 nugged left
tadzik I was thinking about this too 08:05
moritz nine_: it feels very perl 5-y to use the same operator for different things
(I'm not totally against the idea, I just don't think it fits our design philosphy) 08:06
08:06 FROGGS joined
nine_ moritz: but are they really different? I'm not suggesting using the same operator, I'm asking if allof/anyof could not have been implemented simply using junctions. 08:06
08:06 xenoterracide joined
moritz nine_: I don't think so, but I'll look at the code to find out 08:08
nine_ Maybe I'm not understanding junctions well enough. I've never even used Perl 6 after all :)
08:22 berekuk left 08:24 dmol1 left
FROGGS .tell jnthn For a regex like / a | b | c /, we could evaluate the three branches in parallel, right? I think this could speed-up parsing a lot... 08:38
yoleaux FROGGS: I'll pass your message to jnthn.
preflex yoleaux: you have 2 new messages. '/msg preflex messages' to read them.
08:40 rindolf joined
JimmyZ FROGGS: sregex looks like is in parallel 08:40
FROGGS JimmyZ: good to know, even I fear I can't steal the logic from it 08:41
08:41 SHODAN joined
JimmyZ FROGGS: actually from swtch.com/~rsc/regexp/regexp2.html 08:42
JFI.. :)
FYI
FROGGS yeah, I remember that article... 08:43
this could be a nice project :D
JimmyZ FROGGS: sregex is the nice project
and jited
FROGGS: github.com/agentzh/sregex 08:44
FROGGS JimmyZ: yes sure, but I certainly won't be able to rewrite our regex engine
I'm not pmichaud :o) 08:45
JimmyZ FROGGS: yeah, just for you information :P, I won't be able to...
FROGGS: and I have a nice libuv branch ... 08:46
FROGGS yeah
but I think I might be able to make our regex engine threaded...
JimmyZ that's great
08:48 berekuk joined 08:50 ssutch left 08:58 mdn joined 09:03 dmol joined, dmol left 09:04 dmol joined, PacoAir joined 09:07 lizmat joined 09:08 PacoAir left 09:10 PacoAir joined
diakopter FROGGS: did you see the discussion here a while ago about sregex? 09:11
(for all I remember, you were part of it)
FROGGS diakopter: I think I remember, yes
09:12 domidumont joined
FROGGS diakopter: but my understanding was that we can't use it because of backtracking... is that wrong? 09:14
09:14 denis_boyun joined 09:15 PacoAir left
timotimo cannot see any of masaks talks until people put them onto youtube ;_; 09:16
FROGGS yes ó.ò
timotimo runs nqp benchmarks, this time with the commit that actually has any optimizations rather than a seemingly random one 09:18
09:20 lizmat_ joined, dmol left 09:21 denis_boyun_ joined, denis_boyun left 09:22 lizmat left
mathw morning o/ 09:25
timotimo hello mathw :) 09:29
09:35 denis_boyun_ left 09:40 denis_boyun joined 09:43 birdwindupbird left 09:44 crab2313 left 09:47 dmol joined, denis_boyun left 09:48 denis_boyun joined 09:50 lizmat_ left 09:52 pmurias joined
timotimo t.h8.lv/p6bench/nqp-optimization.html - make out of this what you will 09:55
09:56 SamuraiJack joined 09:57 mdn left 09:58 nugged joined 10:00 denis_boyun left, birdwindupbird joined
timotimo wow, those benchmark graphs really are counterintuitive. this is an improvement of 300% for jvm and 30% for parrot on that one arithmetic-intensive benchmark 10:01
10:07 berekuk left 10:08 rindolf left 10:09 dmol1 joined 10:10 dmol left 10:18 not_gerd joined
not_gerd www.youtube.com/watch?v=fUwY3K35yAc # first yapc talk video?! 10:18
10:23 dmol1 left 10:24 denisboyun joined 10:26 berekuk joined
pmurias timotimo: aren't those pointless micro benchmarks? 10:28
10:28 nugged left 10:29 denisboyun left
pmurias s/pointless/not approximating a real situation/ 10:29
timotimo yes, they are :)
10:29 cogno joined
timotimo still makes me happy to finally see an improvement :D 10:29
pmurias they do demonstrate that the optimalisation is doing something ;) 10:30
10:32 berekuk left
pmurias the benchmarks for dart/javascript seem interesting but the shortest one is 539 lines 10:32
so it's a lot to port over
developers.google.com/octane/benchmark 10:33
timotimo yeah :( 10:34
especially to nqp, where things can be a bit more ... roundabout
10:36 PacoAir joined
pmurias they shouldn't be much more roundabout that in the orginal javascript version ;) 10:36
timotimo: code.google.com/p/octane-benchmark/...ichards.js - the shortest one 10:37
timotimo fortunately has craptons of comment lines
nqp has :decl(param), i like that 10:39
10:40 PacoAir left 10:45 mdn joined
pmurias re octane benchmark writing a simple js subset -> nqp translator should be possible/fun 10:45
hmm, maybe if I added some interop to node-js it would be possible to do that using something like esprima.org/ ;) 10:46
s/node-js/nqp-js/
10:54 denisboyun joined 10:58 cogno left
timotimo nqp: say(1 / 2) 11:00
camelia nqp: OUTPUT«0.5␤»
timotimo pmurias: would a var(local foo_bar :decl(var)) be acceptable inside the first stmts of a block if it's wrapped by an op(bind)? 11:01
or could that lead to the local not being declared correctly?
11:01 berekuk joined
timotimo or should i replicate the var :decl(var) and put the bind after that? 11:01
11:05 Su-Shee_ joined 11:06 Su-Shee left, daxim joined 11:08 colomon joined, benabik left 11:09 iSlug joined 11:14 denisboyun left 11:22 denisboyun joined
pmurias timotimo: I think it would be acceptable 11:23
- QAST::Op(bind) $foo 11:24
- QAST::Var(lexical $foo :decl(var))
- QAST::WVal(NQPMu)
tadzik I got a riddle 11:25
I have function foo($socket)
$socket is created like my Mu $socket := nqp::socket()
now imagine foo($socket?)
so: how can I tell if $socket was passed there or ont?
masak in nqp?
moritz tadzik: nqp::defined($socket) ? 11:26
tadzik oh, $socket =:= Mu seems to work too
masak r: my $N = 5; my $rx = "a?" x $N ~ "a" x $N; say "a" x $N ~~ /<$rx>/
camelia rakudo c0814a: OUTPUT«「aaaaa」␤␤»
masak r: my $N = 32; my $rx = "a?" x $N ~ "a" x $N; say "a" x $N ~~ /<$rx>/
tadzik moritz: oh yes, that'd work too
camelia rakudo c0814a: OUTPUT«(timeout)»
masak submits rakudobug
TimToady++ # suggesting submitting that as a rakudobug 11:27
pmurias jnthn: ping
TimToady jnthn++ is setting up to talk in about 3 minutes
11:27 nugged joined
masak throws in swtch.com/~rsc/regexp/regexp1.html as a reference 11:27
pmurias ah ok
11:29 berekuk left 11:30 lizmat joined 11:33 dmol joined, pdcawley joined 11:34 lizmat left, denisboyun left 11:35 mdn left 11:38 pdcawley left
timotimo nqp: nqp::istype(QAST::VarWithFallback.new(), QAST::Var) 11:39
camelia nqp: ( no output )
timotimo nqp: say(nqp::istype(QAST::VarWithFallback.new(), QAST::Var))
camelia nqp: OUTPUT«1␤»
timotimo oh! 11:40
11:40 not_gerd left
timotimo if you don't descend into VarWithFallback nodes, you're going to have a bad time. 11:41
11:42 not_gerd joined
timotimo has a hard time making if statements that span lines look good 11:44
aaw, i'm getting erroneous code out on the other end :( 11:50
11:51 nugged left 11:55 colomon left, not_gerd left
dalek rlito: 72b2b6d | (Flavio S. Glock)++ | / (3 files):
Perlito5 - XS - emitter stub
11:59
12:03 crab2313 joined 12:05 nebuchadnezzar left 12:08 daxim left 12:09 dmol left 12:10 crab2313 left 12:17 dmol joined 12:18 mdn joined, dmol left, dmol joined 12:20 lizmat joined, daniel-s joined 12:27 nugged joined 12:30 rindolf joined 12:34 nugged left 12:43 PacoAir joined, ivanoff joined 12:47 berekuk joined
pmurias timotimo: how does nqp::curlexpad() work with your to local optimalisation? ;) 12:49
tadzik omg lol 12:50
I just fetched projects.list with JVM :)
dalek rlito: d725979 | (Simon Bertrang)++ | / (2 files):
start emitting some xs parts
FROGGS tadzik: lol 12:51
:D
timotimo pmurias: i have no idea! :)
tadzik FROGGS: even with LWP::Simple :D 12:52
and it required like 3 hacks 12:53
mostly removing 'Buf' as a type constraint
I'm so excited, I just can't hide it
12:53 berekuk left
FROGGS yeah, must be Blob now, rigth? 12:53
right
tadzik I don't know
timotimo it's cool :)
tadzik it's sometimes Blob, sometimes it's... utf8
moritz pull request it (or push it)
tadzik that's some implementation of IO::Socket::INET I wrote, which is nothing like the one we have 12:54
but it seems to read() and write() at least
timotimo ah, right, in nqp you can just get the lexpad of your caller, too, right? and there's no "is dynamic" trait that you can set
in that case, the optimization is never safe :| 12:55
moritz :(
12:55 mdn left
pmurias timotimo: curlexpad allows you to get the lexpad of yourself, and send it somewhere else 12:55
s/send it somewhere/show it to a different routine/
timotimo is that the only problem?
pmurias with curlexpad? 12:56
timotimo because in that case i can just turn off the optimization if "curlexpad" is used inside the current block
dalek rlito: a2a9ed2 | (Simon Bertrang)++ | / (2 files):
Perlito5 - XS - first example xs output compiles
timotimo i think there's things like getlexouter etc?
pmurias we need to have dynamic variables markerd yes 12:57
otherwise we would have to turn the optimalization anytime we call a sub or a method
tadzik fun fact: it takes 25 seconds to load LWP::Simple with URI and fetch a webpage on jvm
(without precompilation) 12:58
pmurias :((
timotimo that's JVM for you ... 12:59
lizmat pmurias: since this morning, all dynamic variables *are* marked, afaik
timotimo lizmat: not in nqp :)
pmurias timotimo: is the optimizer you are working on public somewhere?
lizmat ah, ok, :-(
timotimo pmurias: i can push my current status to nqp on github
12:59 nugged joined
dalek p/nqp-optimizer: 271de83 | (Timo Paulssen)++ | src/NQP/Optimizer.nqp:
working build, lots of debug output, more intelligence.
13:00
p/nqp-optimizer: a338192 | (Timo Paulssen)++ | src/NQP/Optimizer.nqp:
nqp-jvm doesn't like negative nums in substr
p/nqp-optimizer: bc1f073 | (Timo Paulssen)++ | src/NQP/Optimizer.nqp:
this should have been gone already.
p/nqp-optimizer: ee4151d | (Timo Paulssen)++ | src/NQP/Optimizer.nqp:
little improvements. actually finds symbols now.
p/nqp-optimizer: 6de1913 | (Timo Paulssen)++ | src/NQP/Optimizer.nqp:
removed debug output
p/nqp-optimizer: 215ac4c | (Timo Paulssen)++ | src/NQP/Optimizer.nqp:
try to turn lexicals into locals.
13:00 berekuk joined
timotimo everything but the last commit is apparently safe. 13:00
doesn't change anything in the rakudo build, either
as in test failures
tadzik I must say I don't understand much about our current Buf situation. Some things are Buf, some or Blob, some are utf8 (?!?), and they work alike but are incompatible type-wise
timotimo the last commit breaks a few, though
13:01 ajr joined, jaldhar_ left, ajr is now known as Guest97388
FROGGS tadzik: true 13:01
13:02 Guest97388 is now known as ajr_
FROGGS maybe jnthn has to draw a map for us :o) 13:02
moritz Buf does Blob 13:03
13:03 SamuraiJack left
moritz and Buf is a role 13:03
Buf is a Blob[uint8] 13:04
and utf8 is a class that does Blob[uint8], but not Buf 13:05
dalek rlito: 21e2693 | (Simon Bertrang)++ | / (2 files):
Perlito5 - XS - handle packages outside CompUnit and adjust semicolon placement
13:06
FROGGS so, utf8 is about encoding, but Buf is just about a binary stream of octets?
PerlJam good morning #perl6
timotimo yeah, utf8 objects must always contain properly encoded utf8
FROGGS hi PerlJam
right, that is like a Buf + a constraint 13:07
makes sense somehow
(not that I expect something else from jnthn :o)
was this specced that way?
13:08 iSlug left
tadzik but Blob is not an acceptable Buf 13:08
oh, of course
timotimo right, because blobs are read-only?
tadzik yes
dalek p: 777fb17 | (Pawel Murias)++ | t/nqp/77-curlexpad.t:
Add a test for nqp::curlexpad().
tadzik I have a feeling that line numbers in errors are off on JVM 13:10
FROGGS tadzik: off by one?
tadzik usually
13:10 berekuk left
pmurias should the lexpad returned by nqp::curlexpad() be writable? 13:10
* writeable 13:11
13:11 nugged left
FROGGS pmurias: yes, I think so 13:11
I see code like: 13:12
my $BLOCK := $*W.cur_lexpad();
$BLOCK[0].push(QAST::Op.new
...
moritz thought the lexpeds were immutable at runtime
FROGGS: World.cur_lexpad vs. nqp::curlexpad()
FROGGS ohh, that is in Perl5::Grammar.pm
13:12 fridim_ joined
FROGGS ahh, okay, different things then 13:12
13:14 dmol left, ivanoff left 13:16 dmol joined
pmurias moritz: it seems I can't add new lexicals but can bind to existing one on nqp-parrot 13:17
moritz pmurias: sounds sensible 13:18
13:19 Su-Shee_ is now known as Su-Shee
masak o/ 13:22
timotimo hello masak :)
masak seems to have survived his two talks :) 13:23
moritz and I liked both!
masak \o/
FROGGS \o/ 13:25
tadzik yeah, they were cool :)
pmurias masak: still using your awesome slides software? ;)
tadzik hrm. Does ./perl6 -e 'my Buf $content .= new()' throw up on jvm for you too? 13:26
timotimo tadzik: fwiw, i think the parrot-based socket implementation needs at least 1 change which is allowing the user to specify how many incoming connections should be able to wait for an accept. 13:27
dmol masac++
timotimo maybe you can design a better socket api and someone else can port that over to rakudo-parrot?
tadzik timotimo: I plan to port it over myself once I battle-prove it on JVM :)
timotimo: but yes, this backlog thing is one of the things
13:28 iSlug joined
masak pmurias: same as PLPW -- Perl 6 converting Markdown to HTML+reveal.js 13:28
13:28 iSlug left
timotimo cool :) 13:28
masak it's not perfect, but it's pretty nice.
dalek kudo-js: 23d3f5c | (Pawel Murias)++ | nqp-src/nqpmo.pm:
Add missing nqpmo.
kudo-js: c8ff861 | (Pawel Murias)++ | runtime (4 files):
Implement nqp::clone().
kudo-js: b3e70ec | (Pawel Murias)++ | / (5 files):
Make nqp::clone work on hashes, implement nqp::curlexpad().

Pass test 66.
kudo-js: 4d9d90e | (Pawel Murias)++ | run_tests:
Add passing test 77 to run_tests.
timotimo masak: how long until you use pod6 instead of markdown? :) 13:29
tadzik masak: is it published?
so, who has rakudo-jvm compiled? 13:30
relatively recent
don't make me compile it myself :P
13:30 daxim joined
masak tadzik: previous talks that use that library are published (as in "on github"), yes. 13:30
moritz tadzik: I'm compiling it right now
tadzik okayo
masak timotimo: I actaully have one talk that I wrote in Pod. with a custom translator to SVG.
timotimo oh, to svg, eh?
masak timotimo: but I think I like Markdown better for talks. 13:31
actually, I don't think I've been "sold" on Pod yet, sorry to say.
dalek rlito: fd8ea18 | (Simon Bertrang)++ | / (2 files):
Perlito5 - XS - adjust declarations and make return initially functional
rlito: b7c68a0 | (Simon Bertrang)++ | t5-xs/ (8 files):
Perlito5 - XS - add tests
masak if I made a programming language from scratch, I'd do the Pod equivalent as Markdown.
pmurias you can always use a perl6 module 13:32
masak *nod*
timotimo right
13:33 bluescreen10 joined
tadzik java.lang.Throwable: Nominal type check failed for parameter '$got' 13:33
that error message is up-Throwable :P
masak .oO( unless you count throwing up your hands in frustration ) 13:34
13:40 btyler joined, berekuk joined
Su-Shee masak: nearly everybody wishes today that POD were markdown - i'm pretty sure you can make pod6 markdown and everybody will be happy ;) 13:41
dalek rlito: 370d1e9 | (Simon Bertrang)++ | t5-xs/Makefile:
Perlito5 - XS - test strings
13:42
rlito: 0819178 | (Simon Bertrang)++ | t5-xs/Some-Thing/t/Hello-World.t:
Perlito5 - XS - test for the changed input
rlito: 599dbd2 | (Simon Bertrang)++ | / (3 files):
Perlito5 - XS - custom implementation of escape_string to get string support initially working
13:44 fridim_ left
tadzik gist.github.com/tadzik/6231215 it quite funny 13:46
jnthn: ^^
13:47 dmol left
dalek : 64d6e01 | (Tobias Leich)++ | / (3 files):
allow `map EXPR LIST`
13:49
13:51 lizmat left, cosimo left 13:53 berekuk left 13:56 thou joined
moritz LHF: make rakudo-jvm compile the restricted setting 13:56
rakudo-jvm can compile it, it's just missing from the Makefile
13:59 kaleem left 14:03 kbaker joined 14:08 cosimo joined
timotimo i think i'll try to implement richards in nqp and perl6 14:08
moritz prompt() doesn't work on rakudo-jvm yet 14:09
> my $x = prompt "number"; say uc $x
numberMethod 'flush' not found
FROGGS nqp-jvm: say sprintf("%s", [42]) 14:11
camelia nqp-jvm: OUTPUT«Confused at line 2, near "say sprint"␤ in panic␤ in comp_unit␤ in TOP␤ in parse␤ in parse␤ in <anon>␤ in compile␤ in eval␤ in evalfiles␤ in command_eval␤ in command_line␤ in MAIN␤ in <anon>␤ in <anon>»
FROGGS nqp-jvm: say nqp::sprintf("%s", [42])
camelia nqp-jvm: OUTPUT«Confused at line 2, near "say nqp::s"␤ in panic␤ in comp_unit␤ in TOP␤ in parse␤ in parse␤ in <anon>␤ in compile␤ in eval␤ in evalfiles␤ in command_eval␤ in command_line␤ in MAIN␤ in <anon>␤ in <anon>»
FROGGS nqp-jvm: say(nqp::sprintf("%s", [42])) # -.-
camelia nqp-jvm: OUTPUT«No registered operation handler for 'sprintf'␤ in compile_op␤ in as_jast␤ in as_jast␤ in <anon>␤ in process_args␤ in <anon>␤ in <anon>␤ in compile_op␤ in as_jast␤ in as_jast␤ in <anon>␤ in compile_all_the_stmts␤ in as_jast␤ in as_jast␤ in <anon>␤ in compi…
FROGGS ?
nqp-jvm: say(sprintf("%s", [42])) # -.- 14:12
camelia nqp-jvm: OUTPUT«Lexical '&sprintf' not found␤ in <anon>␤ in <anon>␤ in eval␤ in evalfiles␤ in command_eval␤ in command_line␤ in MAIN␤ in <anon>␤ in <anon>»
FROGGS hmpf
nqp-jvm: say(nqp::sprintf("%d", [42])) # where is the error?? 14:13
camelia nqp-jvm: OUTPUT«No registered operation handler for 'sprintf'␤ in compile_op␤ in as_jast␤ in as_jast␤ in <anon>␤ in process_args␤ in <anon>␤ in <anon>␤ in compile_op␤ in as_jast␤ in as_jast␤ in <anon>␤ in compile_all_the_stmts␤ in as_jast␤ in as_jast␤ in <anon>␤ in compi…
timotimo nqp: say(+^4) 14:14
camelia nqp: OUTPUT«Confused at line 2, near "say(+^4)"␤current instr.: 'panic' pc 14721 (src/stage2/gen/NQPHLL.pir:5232) (src/stage2/gen/NQPHLL.nqp:279)␤»
timotimo what's the "bitwise negation" op?
14:14 daxim left
timotimo in nqp? 14:14
nqp: say(+!4) 14:15
camelia nqp: OUTPUT«0␤»
FROGGS nqp-jvm$ ./nqp -e 'say(nqp::sprintf("%d", [42]))'
42
timotimo nqp: say(^4)
camelia nqp: OUTPUT«Confused at line 2, near "say(^4)"␤current instr.: 'panic' pc 14721 (src/stage2/gen/NQPHLL.pir:5232) (src/stage2/gen/NQPHLL.nqp:279)␤»
FROGGS r: say +^4
camelia rakudo c0814a: OUTPUT«-5␤»
FROGGS timotimo: I think nqp has no such op
timotimo nqp: say(nqp::bitneg_i(4))
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected IREG, expecting '(' ('$I5003')␤ in file '(file unknown)' line 150638363␤␤␤»
timotimo nqp: say(nqp::bitneg(4))
camelia nqp: OUTPUT«Error while compiling block : Error while compiling op call (source text: "nqp::bitneg(4)"): Error while compiling op bitneg (source text: "nqp::bitneg(4)"): No registered operation handler for 'bitneg'␤current instr.: '' pc 51451 (src/stage2/QAST.pir:18765) (src/stage2/QAST…
timotimo mhm
bitneg_i does exist, though 14:16
FROGGS but what is wrong with this nqp-jvm here? why is nqp::sprintf not known? is it that old?
timotimo nqp: say(nqp::bignet_i(5))
camelia nqp: OUTPUT«Error while compiling block : Error while compiling op call (source text: "nqp::bignet_i(5)"): Error while compiling op bignet_i (source text: "nqp::bignet_i(5)"): No registered operation handler for 'bignet_i'␤current instr.: '' pc 51451 (src/stage2/QAST.pir:18765) (src/sta…
timotimo nqp: say(nqp::bitneg_i(5))
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected IREG, expecting '(' ('$I5003')␤ in file '(file unknown)' line 145534747␤␤␤»
FROGGS it wants a PMC 14:17
timotimo ah, is that so?
FROGGS I think so
timotimo nqp: say(nqp::bitneg_i(nqp::box_i(5, Int)))
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected IREG, expecting '(' ('$I5003')␤ in file '(file unknown)' line 161157783␤␤␤»
timotimo how do i do that again?
FROGGS QAST::Operations.add_core_pirop_mapping('bitneg_i', 'bnot', 'Ii', :inlinable(1)); 14:18
timotimo multi prefix:<+^>(int $a) { nqp::bitneg_i($a) } <- this is in rakudo, isn't that a native int?
FROGGS yes
14:19 Traceur joined 14:20 Traceur left, Traceur joined
timotimo nqp: say(nqp::bitneg_i(nqp::box_i(5, int))) 14:20
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected IREG, expecting '(' ('$I5003')␤ in file '(file unknown)' line 42␤␤␤»
timotimo nqp: say(nqp::bitneg_i(nqp::box_i(5, 'int')))
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected IREG, expecting '(' ('$I5003')␤ in file '(file unknown)' line 42␤␤␤»
timotimo nqp: say(nqp::bitneg_i(nqp::box_i(5, 'Int')))
camelia nqp: OUTPUT«error:imcc:syntax error, unexpected IREG, expecting '(' ('$I5003')␤ in file '(file unknown)' line 42␤␤␤»
timotimo i don't even ...
[Coke] wonders if anyone is looking into fixing "is dynamic" for the jvm. that broke a bunch of tests when it went in. 14:24
14:27 fhelmberger left 14:32 bearman joined 14:34 prammer joined
timotimo what's the syntax for an int constant in nqp? :o 14:34
neither my int constant $foo nor my constant int $foo seem to work
14:35 Traceur left
timotimo apparently there isn't even constant in nqp 14:35
14:36 ssutch joined 14:38 Psyche^_ joined 14:39 lizmat joined
timotimo nqp: my @l; @l[1] := 1; 14:39
camelia nqp: ( no output )
14:41 dmol joined 14:42 Psyche^ left 14:43 bbkr left, bbkr joined 14:45 lizmat left 14:48 dmol left
dalek rlito: 14d237e | (Simon Bertrang)++ | src5/lib/Perlito5/XS/Emitter.pm:
Perlito5 - XS - fix escape_string escape handling
14:48
rlito: c1ac75d | (Simon Bertrang)++ | / (4 files):
Perlito5 - XS - implement some parts of print
14:49 birdwindupbird left
timotimo nqp: say(4 +> 1) 14:50
camelia nqp: OUTPUT«Confused at line 2, near "say(4 +> 1"␤current instr.: 'panic' pc 14721 (src/stage2/gen/NQPHLL.pir:5232) (src/stage2/gen/NQPHLL.nqp:279)␤»
timotimo nqp: say(nqp::bitshift_r(4, 1))
camelia nqp: OUTPUT«Error while compiling block : Error while compiling op call (source text: "nqp::bitshift_r(4, 1)"): Error while compiling op bitshift_r (source text: "nqp::bitshift_r(4, 1)"): No registered operation handler for 'bitshift_r'␤current instr.: '' pc 51451 (src/stage2/QAST.pir:1…
timotimo nqp: say(nqp::bitshiftr_i(4, 1))
camelia nqp: OUTPUT«2␤»
pmurias timotimo: are you porting the octane benchmarks? ;) 14:51
timotimo only the richards one so far 14:52
dalek rlito: 4ed2c2a | (Simon Bertrang)++ | / (4 files):
Perlito5 - XS - add a warn implementation
14:53
14:53 Traceur joined 14:54 Traceur is now known as Guest72817
moritz are the folks here at YAPC::EU planning to have dinner together? I'd join you this time :-) 14:58
timotimo nqp: class Foo { has $.a }; my $a := Foo.new(); $a.a := 100; say($a.a) 15:01
camelia nqp: OUTPUT«Unable to parse expression in blockoid; couldn't find final '}' at line 2, near "has $.a };"␤current instr.: 'panic' pc 14721 (src/stage2/gen/NQPHLL.pir:5232) (src/stage2/gen/NQPHLL.nqp:279)␤»
timotimo have to create custom accessors, yes?
15:01 ajr_ left
moritz yes 15:02
timotimo how do i create a nqp::list prepopulated with $num 0s?
15:02 ajr joined 15:03 ajr is now known as Guest26609, Guest26609 is now known as ajr_
timotimo nqp: my @a; nqp::setelems(@a, 1000); say(+@a); 15:04
camelia nqp: OUTPUT«1000␤»
timotimo oh, neato
nqp: my @a := nqp::list_i(); nqp::setelems(@a, 1000); say(+@a); say(@a[0]);
camelia nqp: OUTPUT«get_number() not implemented in class 'ResizableIntegerArray'␤current instr.: '' pc 55 ((file unknown):46) (/tmp/VIlG8Kt7WR:1)␤»
timotimo nqp: my @a := nqp::list_i(); nqp::setelems(@a, 1000); say(@a[0]);
camelia nqp: OUTPUT«0␤»
timotimo nqp: my @a := nqp::list_i(); nqp::setelems(@a, 1000); say(@a[50]);
camelia nqp: OUTPUT«0␤»
timotimo that's neat :)
nqp: my @a := nqp::list_i(); nqp::setelems(@a, 1000); say(@a[500000]);
camelia nqp: OUTPUT«0␤»
timotimo oh, that's how it is.
how performant are these accessors that have a *@ argument and decide based upon +@foo wether to set or return? :| 15:06
pmurias + 15:07
timotimo: compared to what? 15:08
timotimo compared to having two methods
15:08 slava left 15:10 ajr_ left
pmurias a method call seems much more expensive then an if 15:11
rakudo uses the ones with a *@
so the benchmark should use those
timotimo ok 15:12
15:12 bearman left 15:13 berekuk joined, berekuk left 15:14 btyler_ joined
dalek kudo-js: 58fd0bf | (Pawel Murias)++ | run (3 files):
Implement nqp::setcontspec, nqp::assign, nqp::assignunchecked.

Pass test 67.
15:14
15:14 btyler left
pmurias down to one failing test in nqp/t/nqp :) 15:15
(which compiles rules at runtime and so requires bootstraping or tricks I'm not willing to use) 15:16
tadzik nice!
FROGGS pmurias: so, next big thing is bootstrapping? 15:17
moritz pmurias++
pmurias nqp/t/qregex
FROGGS ahh, I see 15:18
15:18 SmokeMac_ left 15:29 rindolf left 15:34 SmokeMachine joined 15:35 egor joined 15:36 egor left, benabik joined 15:37 ajr_ joined 15:46 nebuchadnezzar joined
timotimo okay, back to work on richards 15:51
15:52 denis_boyun joined
timotimo does "var peek, next = queue" in js work like "var peek = queue; var next = queue;"? 15:52
PerlJam timotimo: no, only next would be assigned; peek would still be undefined. 15:53
timotimo ah, ok 15:54
15:54 FOAD joined 15:58 silug left 16:00 p5eval joined, p5eval left
timotimo i'm getting "error while compiling op bind (source text: ":=") first child of a bind op must be a qast::var" 16:01
apparently comes from "return self"
16:01 dmol joined
timotimo why can't i return self? :| 16:02
16:03 slava joined
timotimo nqp: class Test { method foo() { return self } }; say(Test.new()) 16:04
camelia nqp: OUTPUT«Test<1066528866>␤»
16:04 dmol left
timotimo huh, i can apparently do that 16:04
ah, ok, i commented out the return self and it still shows that in the source text
oh of course 16:05
how do i method new in nqp? >_> 16:08
ah, self.CREATE, then bindattr? hm. 16:09
16:09 kaare_ joined, dmol joined, pmurias left 16:12 berekuk joined, xinming left 16:13 dmol left 16:14 xinming joined 16:16 dmol joined 16:19 p5eval joined 16:20 rindolf joined 16:21 FOAD left, silug joined 16:23 FOAD joined 16:28 kbaker left
timotimo d'oh. there's some error in my richards translation 16:31
16:31 spider-mario joined
timotimo somehow a ResizableIntegerArray is making its way to a place where it really shouldn't go 16:34
16:34 kbaker joined
timotimo ah. it's always good to actually return the object you created from a .new 16:34
16:35 dmol left 16:38 colomon joined
timotimo can't tell if benchmark wrong or running ... 16:38
how long is such a richards run supposed to take? well, for nqp probably a few minutes >_> 16:39
it kind of deadlocks :| 16:40
16:43 EvanTeitelman joined, FROGGS left 16:44 berekuk left
timotimo missing methods with 1 passed argument apparently don't err out when they are called 16:47
16:48 SamuraiJack joined, bbkr_ joined 16:49 bbkr left 16:51 denis_boyun left 16:52 domidumont left 16:55 FROGGS joined
timotimo ah the classic while loop without incrementing the counter 16:56
16:56 genehack joined 16:59 bluescreen10 left, denisboyun joined 17:05 EvanTeitelman is now known as evant 17:08 skids joined 17:15 btyler_ left 17:17 geekosaur left 17:18 geekosaur joined 17:20 l30n1du5 joined
segomos that is a classic 17:26
timotimo my richards scheduler seems to just throw away the tasks after running them once or something :| 17:27
17:28 SmokeMachine left 17:30 berekuk joined
timotimo ah, my "STATE_SUSPENDED_RUNNABLE" constant was actually more like RUNNING_RUNNABLE 17:34
>_>
17:34 SmokeMachine joined 17:38 spider-mario left 17:40 domidumont joined 17:41 spider-mario joined 17:50 rindolf left 17:51 skids left, spider-mario left 17:52 spider-mario joined 17:57 Vlavv left 17:59 btyler joined
timotimo i cannot fathom how the original code is supposed to be right, this just makes no sense to me 18:01
the scheduler is waiting for a tcb to be "neither suspended nor held" and will skip over them if they are either of those
if a tcb has .run called on it and it is "suspended runnable", which three of my tcbs are, it will start running, but it never gets allowed to run because of the "neither suspended nor held" requirement 18:02
and when a resource is released, it removes the held bit, but that isn't set for any of the tcbs 18:03
18:07 domidumont left 18:10 Vlavv joined
timotimo my implementation of "neither suspended nor held" was incorrect ... 18:11
18:16 abnorman joined
dalek : 1689592 | (Tobias Leich)++ | STATUS.md:
fudged sprintf2.t and pack.t
18:23
18:23 denisboyun left 18:29 sqirrel joined
timotimo i made it work finally 18:39
slava is it possible to compile perl6 to pbc? 18:42
or does it have to be pir and then something else uses pbc 18:43
18:43 zwut00 joined
FROGGS perl6 --target=pbc -e '1' 18:43
ohh no 18:44
PerlJam I don't think that actually works.
(not sure if it ever did)
FROGGS slava: it looks like nqp/perl6 emits pir, and parrot compiles it to pbc
slava going to have to play with it :), I wonder if there is any speed up that can be head by having pbc 18:45
PerlJam slava: you'd only save on the "parsing the program" step, which is (generally) small compared to the rest of the execution. 18:46
slava I see
also, grammars are cool. :D
18:47 Guest72817 left, denis_boyun joined
FROGGS PerlJam: I must disagree, when writing the SDL module, the execution speed difference was enormous 18:48
(precompiled using ufo <=> normal way)
that was eight months ago though
hmmm, maybe I just remember wrong 18:49
PerlJam slava: Do it and let us know the results :)
(blog about them even!)
timotimo r: my int $foo = 8; $foo +>= 1; say $foo 18:50
camelia rakudo c0814a: OUTPUT«Cannot modify an immutable value␤ in block at src/gen/CORE.setting:15312␤ in block at /tmp/WWFiKPb0UW:1␤␤»
timotimo r: my Int $foo = 8; $foo +>= 1; say $foo
camelia rakudo c0814a: OUTPUT«4␤»
timotimo that's a pretty operator
FROGGS interesting 18:51
timotimo can i pre-initialise list slots for a perl6-List, too? 18:53
er, or an array?
18:53 xinming left 18:55 xinming joined
FROGGS you can splice elements to it, but I dunno how efficient this is :/ 18:57
timotimo these lists are supposed to be very small anyway, so it's no big deal
18:58 SamuraiJack left, not_gerd joined
not_gerd slava: you can precompile modules, but not scripts 18:58
FROGGS yeah, I mean parrot offers FixPMCArrays and setting list sizes... but I guess this isn't exposed to perl6 land 18:59
not_gerd slava: it's a two-step process: .pm -> .pir via perl6 and .pir -> .pbc via parrot
timotimo is porting the richards benchmark over to perl6
not_gerd I actually made it work in a single step, but that was never merged
slava not_gerd: two step is fine (I don't think it's a big deal, since it can be easily scripted) 19:01
not_gerd: by precompile, you mean pm to pir?
not_gerd slava: ultimately, pm to pbc 19:02
timotimo r: constant int foo = 10; 19:03
camelia rakudo c0814a: OUTPUT«===SORRY!=== Error while compiling /tmp/cKBCUFjW9y␤Missing initializer on constant declaration␤at /tmp/cKBCUFjW9y:1␤------> constant int ⏏foo = 10;␤ expecting any of:␤ statement list␤ prefix or term␤ pref…
timotimo is the "int" wrong here?
not_gerd timotimo: NYI as far as I know 19:04
19:06 telex left 19:07 telex joined 19:21 sqirrel left
timotimo i'm annoyed that Rakudo::Debugger can't be built 19:29
FROGGS :/
timotimo "error:imcc:loadlib directive could not find library `perl6_group' in file 'perl6-debug.pir' line 1" 19:30
i don't even ...
FROGGS I believe this is due to the jvm refactorings... there was once a perl6_group, but now it is called --vmlibs=perl6_ops, you can see that in the makefiles 19:32
timotimo ....oh?
19:33 frettled left, frettled joined, l30n1du5 left
FROGGS timotimo: github.com/rakudo/rakudo/commit/15...f85#diff-9 19:34
so, it broken now for about 3 months
timotimo that makes it work 19:35
FROGGS cool
timotimo nobody used to be able to help me fix that
for AGES
FROGGS :o)
timotimo and then you're just like "ah yeah, just change this bit here in the makefile"
couldn't you have done that a bit earlier? :(
FROGGS I remember because I had to adjust v5's makefile too
timotimo i've had to cope without the debugger for a loooong time ;_;
FROGGS ó.ò 19:36
poor timotimo
19:36 Mouq joined
timotimo huh 19:36
not work, just build.
19:37 jaffa4 joined
FROGGS error message? 19:37
timotimo null pmc access in get_pmc_keyed, method mu not found for invocant of class parcel 19:38
19:38 not_gerd left
FROGGS --ll-exception? 19:38
where does this happen?
19:39 celesta joined
celesta ahoi #perl6 19:39
jaffa4 hi all
What backends are made based on qast?
FROGGS $ ./p5 'say sprintf "%1.1s", "abc"' 19:40
Perl5: a␤
v5: '1.1s' is not valid in sprintf format sequence '%1.1s'
# another TODO for JVM's nqp::sprintf
timotimo perl6-debug.nqp lines 445 -> 1 -> 489 -> NQPHLL and compiler, p6d.nqp -> line 445, some more nqphll, qregex, grammar, perl6-debug line 403, ...
FROGGS jaffa4: nqp and rakudo uses qast
jaffa4 what else? 19:41
FROGGS v5 as a smaller project
timotimo: might make sense that I try to debug at on my machine
moritz well, all the backends use QAST, because QAST ist what they get from the frontend 19:42
timotimo when i type 'say "hello"' into the rakudo::debugger shell, i get null pmc access in pmc_get_keyed 19:47
when i type 1, it says "unable to load setting core maybe it's missing you_are_here?"
19:51 denis_boyun left
FROGGS timo 19:52
timotimo that's me 19:53
FROGGS timotimo: first you get the NPMC-Access, after that you get the other error
timotimo rakudo::debugger probably missed to chase some changes in the compiler/grammar/...
yeah, in two separate lines
when running my richards script through it 19:54
gist.github.com/timo/5a86e4e2df103f401767
19:57 denis_boyun joined
FROGGS yeah, I get almost the same for ./perl6-debug --ll-exception -e '1' 19:58
I have no idea what to do now 19:59
20:01 stevan_ joined 20:02 kaare_ left 20:04 denis_boyun_ joined 20:05 denis_boyun left 20:11 prammer left 20:13 prammer joined 20:15 jeff_s1 left 20:18 jaffa4|2 joined 20:20 jaffa4 left
[Coke] casts a yapc asia jnthn++ to his tv and is surprised at jnthn-voice. 20:32
FROGGS [Coke]: why surprised? 20:34
[Coke] first time I've heard him speak, I think 20:35
FROGGS ahh, okay 20:36
PerlJam [Coke]: what did you expect him to sound like? :)
dalek rl6-roast-data: b4246f3 | coke++ | / (5 files):
today (automated commit)
20:38
20:38 notjack left 20:42 spider-mario left
[Coke] PerlJam: I have no idea. ;) 20:43
apparently a different british.
stackoverflow.com/questions/1823497...rl-5-and-6 20:46
PerlJam wow 20:47
I wonder why he thinks it "needs" to run on both P5 and P6?
tadzik boss requires that? :P 20:48
colomon future proofing by making it totally unworkable now?
masak o/ 21:03
21:03 kbaker left, dayangkun left
celesta \o hej masak 21:03
masak celesta: hi! 21:04
timotimo "I seem to recall that Perl6 originally had a design goal of being able to execute Perl5 code [citation needed], but I don't think that's been done, and I wouldn't count on it ever actually happening." - someone's become cynical over the last 13 years
masak who are you quoting? 21:05
to some extent, that's already "actually happening". 21:06
21:06 jaffa4|2 left
timotimo the stackoverflow conversation 21:06
masak looks 21:07
yeah, the question seems... ambitious. 21:08
std: $]
camelia std c2215f0: OUTPUT«===SORRY!===␤Unsupported use of $] variable; in Perl 6 please use $*PERL_VERSION at /tmp/zZkKFxyvyB line 1:␤------> $]⏏<EOL>␤Parse failed␤FAILED 00:00 41m␤»
timotimo catch that exception! :) 21:09
masak it's interesting how "[citation needed]" has come to need "don't take my word for it".
timotimo it seemed more like "i don't even believe it" or something 21:10
[Coke] ~. 21:12
masak I read it as "this is how I seem to remember it, but an actual source would be a good thing to confirm"
timotimo right, i'm just cynical sometimes 21:13
[Coke] figured someone here would be motivated to citate.
(yes, I know that isn't a word. :P)
lue S01 should placate citeless fears 21:14
geekosaur citing sites lest someone be psyched? 21:15
masak .oO( it's not "citate", it's "tricarboxylic acid cycle" )
21:16 dayangkun joined 21:17 nugged joined
slava would it be safe to assume that the modules that come with rakudo* are part of 'core' ? 21:17
FROGGS no
masak no
tadzik on 21:18
FROGGS it is just like strawberryperl bundles useful modules
tadzik we have 3 core
masak slava: when dealing with Perl 6, you need to assume a whole lot of "distributedness", and not so much "officialness".
FROGGS but these arn't core either
21:18 lizmat joined
tadzik slava: perlgeek.de/blog-en/perl-6/how-core-is-core.html 21:18
lue How existing is the use v5 in rakudo? 21:20
FROGGS I think it is awesome :P 21:23
lue would I be able to suggest its usage to the stackoverflow question, or would that answer be more a "when it's ready..." ? 21:24
FROGGS but if you meant how useful it is, then I re-ask: how useful is Perl 5 without all the cool modules? because I'd think that none of them will work yet
I'd wait before advertising v5 21:25
21:27 lizmat left
lue alrighty then. I kinda want to mention v5 as something as planned (too bad I can't leave comments on stackoverflow yet). 21:27
PerlJam lue: Why?
lue: Why not wait until it's "ready" (whatever that means) then tell people it exists?
lue quote: "add comment (requires 50 reputation)" 21:28
PerlJam lue: sorry, that was "Why do you want to mention that v5 is something that's planned?"
lue Because current discussion on the question seems to be saying that "P5 and P6 are completely different, what you want is hopeless" when that is (eventually) not the case. 21:29
I won't mention it though, since it's really only appropriate as a comment methinks.
masak Perl 5 and Perl 6 *are* different in the sense that they are different runloops.
I'm sometime hesitant to go all the way and call them different languages, even though that is the community consensus. there's some sense in which they are and some in which they are not. 21:30
PerlJam lue: even with the existence of v5, I think what he wants is hopeless if only because he seems to be all sorts of confused about what he wants. :)
lue It'd just be nice to dispel the implied conclusion that P5 and P6 cannot coexist in the same file.
slava tadzik: thanks, that makes sense 21:31
masak lue: yes, but if we're not quite there yet (according to the main developer of v5), then it might not be time to tell about it.
yet.
lue which is why I agreed not to. yet. :)
FROGGS :o) 21:32
PerlJam I also find it interesting that the guy said "This code works on both versions or perl without error:" 21:34
slava that actually confused me
lue r: say $] 21:35
camelia rakudo c0814a: OUTPUT«===SORRY!=== Error while compiling /tmp/bQ267__iqC␤Non-declarative sigil is missing its name␤at /tmp/bQ267__iqC:1␤------> say ⏏$]␤ expecting any of:␤ argument list␤ prefix or term␤ prefix or meta-prefix␤»…
lue std: say $]
camelia std c2215f0: OUTPUT«===SORRY!===␤Unsupported use of $] variable; in Perl 6 please use $*PERL_VERSION at /tmp/30I9vo1peV line 1:␤------> say $]⏏<EOL>␤Parse failed␤FAILED 00:00 42m␤»
PerlJam yes, he clearly did not execute that code on a Perl 6 compiler. So what were "both" versions?
masak lue: feel free to submit rakudobug.
lue oh. I was just testing the most suspicious part of the "Works on Perl 6 too" example in the question. 21:36
lue files rakudobug
21:36 nugged left 21:37 sorear joined
slava lol 21:40
shouldn't something like $} have a twigil and a more descriptive name?
wait, nvm, it does say what to use
masak yeah, we tend to provide "next steps" in the Perl 6 error messages. 21:42
21:43 TimK1 joined
lue I can't recall the specifics anymore, but I remember a couple times where I wish I could turn off the P5 errors to use otherwise-valid P6 code. 21:44
masak std: say
camelia std c2215f0: OUTPUT«===SORRY!===␤Unsupported use of bare 'say'; in Perl 6 please use .say if you meant $_, or use an explicit invocant or argument at /tmp/xYV7ed74t1 line 1:␤------> say⏏<EOL>␤Check failed␤FAILED 00:00 41m␤»
masak std: say #OK
camelia std c2215f0: OUTPUT«===SORRY!===␤Unsupported use of bare 'say'; in Perl 6 please use .say if you meant $_, or use an explicit invocant or argument at /tmp/GsLXHKh1JA line 1:␤------> say⏏ #OK␤Check failed␤FAILED 00:00 41m␤» 21:45
masak oh, that one isn't suppressible.
timotimo std: say() 21:46
camelia std c2215f0: OUTPUT«ok 00:00 41m␤»
lue r: say <>; # what if I wanted a simple-to-type empty list and I also hate seemingly unnecessary spaces, thus ruling out < > ?
camelia rakudo c0814a: OUTPUT«===SORRY!=== Error while compiling /tmp/Tgs7yc74p1␤Unsupported use of <>; in Perl 6 please use lines() to read input, ('') to represent a null string or () to represent an empty list␤at /tmp/Tgs7yc74p1:1␤------> say <⏏>; # what if I…
PerlJam lue: () is just as easy to type as <> 21:47
masak what PerlJam said. 21:48
lue [This is definitely not that annoying use case I found a long time ago, but it's the only one I thought of quickly.] But... what if I *want* to use angle brackets for their aesthetics?
masak timotimo: oh! I ususally go `say ''`, because I usually use `say` as a listop.
FROGGS but it would be cool to have a pragma that says: hey, I am a Perl 6 dev and I know what I do
PerlJam lue: then we modify your desires so that you conform to the norm ;)
masak lue: then you have to wait until Perl 6.7, when they're de-deprecated again because Perl 5 is going out of production. 21:49
FROGGS: there will be modules. :)
FROGGS a module that changes the grammar? :P
lue My point is that I think a "no P5 warnings" switch/flag/etc. would exist, simply for people (like me) who are not liable to accidentaly a language they never learned.
s/would/should/ 21:50
PerlJam lue: I can see that.
lue FROGGS: sure. Just use a slang :)
masak right. 21:52
FROGGS one would just have to know out the special_variables category... 21:54
knock out*
21:55 stevan_ left
lue is still waiting to be able to implement use X::Insulting 21:58
FROGGS lue: yeaah! I wanna have that too!
21:58 pmurias joined
FROGGS "Redeclaration of variable $x you useless lump!" 21:59
lue r: use MONKEY_TYPING; augment class X::AdHoc { supersede method message() { "Humorous Comment: " ~ $.payload.Str } }; die 42; # :(
camelia rakudo c0814a: OUTPUT«===SORRY!=== Error while compiling /tmp/xkfz1ZdWhe␤"supersede" not yet implemented. Sorry. ␤at /tmp/xkfz1ZdWhe:1␤------> "Humorous Comment: " ~ $.payload.Str } ⏏}; die 42; # :(␤ expecting any of:␤ method arguments␤ …
pmurias timotimo: what are the results of the richards benchmark?
21:59 xinming left
FROGGS r: use MONKEY_TYPING; augment class X::AdHoc { method message() { "Humorous Comment: " ~ $.payload.Str } }; die 42; 22:00
camelia rakudo c0814a: OUTPUT«===SORRY!=== Error while compiling /tmp/ZTFT78KGhX␤Package 'X::AdHoc' already has a Method 'message' (did you mean to declare a multi-method?)␤at /tmp/ZTFT78KGhX:1␤------> ␤»
lue My example uses the (likely incorrect) assumption that augment means 'modify object' and supersede means 'replace object'
FROGGS I think your assumption is correct
masak yeah, I don't know why that use of 'augment' doesn't work. 22:01
22:01 xinming joined
timotimo r: use MONKEY_TYPING; augment class X::AdHoc { only method message() { "Humorous Comment: " ~ $.payload.Str } }; die 42; 22:01
camelia rakudo c0814a: OUTPUT«===SORRY!=== Error while compiling /tmp/bARLhF4FNr␤Package 'X::AdHoc' already has a Method 'message' (did you mean to declare a multi-method?)␤at /tmp/bARLhF4FNr:1␤------> ␤»
timotimo r: use MONKEY_TYPING; augment class X::AdHoc { supercede method message() { "Humorous Comment: " ~ $.payload.Str } }; die 42; 22:02
camelia rakudo c0814a: OUTPUT«===SORRY!=== Error while compiling /tmp/KY2yjiarxX␤Package 'X::AdHoc' already has a Method 'message' (did you mean to declare a multi-method?)␤at /tmp/KY2yjiarxX:1␤------> ␤»
timotimo who knows.
pmurias timotimo: you have fully ported over the richards benchmark?
timotimo to nqp, yes
to perl6, no.
pmurias awesome
lue I personally like the idea of having to use supersede on the method as well as augment the class, as a reminder to myself that I'm replacing an existing method.
timotimo could not debug it and it behaves strangely
want to have it? :)
pmurias I could take a look 22:03
pmurias likes debugging others people code ;)
timotimo: if you put in on github I can try to fix it 22:04
timotimo can't seem to gist it right noo 22:05
probably just the multi-file gist problem
i'm pretty certain i missed some changes when porting it over from nqp, i made changes here and there
oh, i can't create any gists at alls
lue would also like the alternate spelling of "supercede", as he somehow continually tries that spelling first. That's one for the modules though, I would guess. 22:06
timotimo gist.github.com/timo/6236138 is the nqp version
pmurias re nqp version, is there a different version?
timotimo has both versions 22:07
refresh please
pmurias what's the benefit of gist over a repo? 22:08
timotimo: the perl6 version behaves strangely? or the nqp one? 22:09
timotimo perl6. 22:11
a gist is a repo, too
22:12 fridim_ joined
evant pmurias: Gists are fast. They're like pastebin. 22:12
masak 'night, #perl6
segomos FROGGS: still trying to figure out where i can override the 'use' keyword, any hints?
22:14 zwut00 left 22:15 jeff_s1 joined
pmurias timotimo: so now we need a benchmarking harness which runs the test multiple, avarages the results, computes a score etc.? 22:16
timotimo that already exists
perl6-bench in japhb's account
22:18 benabik left
pmurias did you try using it with the richards benchmark? 22:21
timotimo not yet 22:22
i wasn't able to get the perl6 version up before my frustration ceiling has been reached
pmurias hmm perl6-bench doesn't seem like what we want 22:26
it seem to run the benchmark every time in a new process, which would make the startup time heavily dominant 22:27
timotimo no 22:28
it calculates the startup time
you need to take a SCALE argument on the commandline that can go down to 0
pmurias calculates the startup time? 22:29
22:29 ajr_ left
pmurias how? 22:29
timotimo run a no-work workload
22:32 btyler_ joined 22:34 btyler left
pmurias doesn't seem sane 22:35
timotimo you think so? 22:36
pmurias the startup time of a hello world and a bigger thing doesn't have to be equal 22:38
timotimo uh ... 22:39
pmurias the richards benchmark can run like 700 hundred time per second on dart
timotimo well of course not.
that's why you run the benchmark with zero workload
and not a hello world
pmurias github.com/dart-lang/benchmark_har..._base.dart seems simple enough for me to port 22:40
timotimo yeah okay but why?
22:41 denis_boyun_ left
pmurias for one it would allow better comparision 22:41
with dart and js
timotimo haha, you really think we're going to compete? 22:43
you cray.
22:59 btyler_ left
pmurias timotimo: competing and winning are different things ;) 23:07
23:09 Colby` joined, Pleiades` left, Colby` is now known as Pleiades`
pmurias timotimo: with enough effort nqp/rakudo-js should be able to compete with dart-js 23:10
23:12 berekuk left, berekuk joined 23:14 berekuk left
celesta good night #perl6 23:20
23:20 celesta left 23:30 sidus left