»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, std:, or /msg camelia p6: ... | irclog: irc.perl6.org | UTF-8 is our friend! | feather will shut down permanently on 2015-03-31 Set by jnthn on 28 February 2015. |
|||
00:01
Ugator1 left,
rurban left
00:02
donaldh left
|
|||
dalek | kudo/nom: d4fc1f9 | jnthn++ | src/core/native_array.pm: Tweak ASSIGN-POS candidates for native arrays. We lost out due to some interesting sorting issues involving the Any candidates. With this, we can run things like: my int @a; my int $i = 0; while $i < 1000000 { @a[$i] = 1; $i = $i + 1; } And have everything fully inlined and cause no allocations once into the loop (meaning no GC runs). |
00:09 | |
jnthn | rest & | ||
tadzik | ooooo | ||
jnthn++ | |||
japhb | Very nice performance, jnthn++ | ||
00:24
coffee` left
00:28
lichtkind_ joined,
beastd left
00:30
lichtkind left
00:49
adu joined
00:51
wicope left
00:57
kjs_ joined
01:02
aborazmeh joined,
aborazmeh left,
aborazmeh joined
01:03
skids joined
|
|||
grondilu | '$i = $i + 1'? why not $i++? | 01:05 | |
m: my int $i = 0; say ++$i | |||
camelia | rakudo-moar d4fc1f: OUTPUT«1» | ||
01:10
kjs_ left
01:13
aborazmeh left
01:16
zby_home_ left
01:44
madmuid1 left
02:05
raiph joined
|
|||
skids | m: my $foo is dynamic = 3; grammar foo { regex f { :my $foo is dynamic = CALLER::CALLER::<$foo>; f { $foo++; $foo.say; CALLER::<$foo>.say; CALLER::CALLER::<$foo>.say; CALLER::CALLER::CALLER::<$foo>.say;}}}; foo.parse("f",:rule<f>); | 02:14 | |
camelia | rakudo-moar d4fc1f: OUTPUT«44(Any)3» | ||
02:22
Mouq joined
02:25
dustinm`_ left
02:30
prime left
02:36
dustinm` joined
02:38
prime joined
|
|||
b2gills | m: my multi a ( *% () ) { say 'no args' }; my multi a(*%_) { say 'args' }; a(); a(:a) | 02:51 | |
camelia | rakudo-moar d4fc1f: OUTPUT«no argsargs» | ||
b2gills | lizmat: ^^ | ||
03:09
raiph left
03:21
noganex joined,
lichtkind_ left
03:23
noganex_ left
|
|||
skids | m: my $f is dynamic = Array.new; sub f ($g is rw) { CALLER::CALLER::<$f>.WHICH.say; $g.WHICH.say; say CALLER::CALLER::<$f> =:= $g}; sub g { f(CALLER::<$f>) }; g(); | 04:21 | |
camelia | rakudo-moar d4fc1f: OUTPUT«Array|86540368Array|86540368True» | ||
skids | m: my $f is dynamic = Array.new; sub f ($g) { CALLER::CALLER::<$f>.WHICH.say; $g.WHICH.say; say CALLER::CALLER::<$f> =:= $g}; sub g { f(CALLER::<$f>) }; g(); | ||
camelia | rakudo-moar d4fc1f: OUTPUT«Array|85625296Array|85625296False» | ||
skids | m: my $f is dynamic = Array.new; sub f ($g) { CALLER::<$f>.WHICH.say; $g.WHICH.say; say CALLER::<$f> =:= $g}; f($f); # I guess the extra layer isn't needed. | 04:23 | |
camelia | rakudo-moar d4fc1f: OUTPUT«Array|79088896Array|79088896False» | ||
Mouq | skids: FWIW you can just say $CALLER::f, and if there's no definition in between CALLER::…::CALLER you can just you $CALLERS::f | 04:24 | |
m: my $f is dynamic = Array.new; sub f (\g) { CALLER::<$f>.WHICH.say; $g.WHICH.say; say CALLER::<$f> =:= g}; f($f); | |||
camelia | rakudo-moar d4fc1f: OUTPUT«5===SORRY!5=== Error while compiling /tmp/H8Qn8lOmkTVariable '$g' is not declaredat /tmp/H8Qn8lOmkT:1------> 3) { CALLER::<$f>.WHICH.say; $g.WHICH.say7⏏5; say CALLER::<$f> =:= g}; f($f); expecting any of: method arguments» | ||
Mouq | m: my $f is dynamic = Array.new; sub f (\g) { CALLER::<$f>.WHICH.say; g.WHICH.say; say CALLER::<$f> =:= g}; f($f); | ||
camelia | rakudo-moar d4fc1f: OUTPUT«Array|80771744Array|80771744True» | ||
Mouq | =:= is container identity | ||
m: my $f is dynamic = Array.new; sub f ($g) { $CALLER::f.VAR.name.say; $g.VAR.name.say; say $CALLER::f =:= $g}; f($f); | 04:26 | ||
camelia | rakudo-moar d4fc1f: OUTPUT«$f$gFalse» | ||
Mouq | m: my $f is dynamic = Array.new; sub f (\g) { $CALLER::f.VAR.name.say; g.VAR.name.say; say $CALLER::f =:= g}; f($f); | ||
camelia | rakudo-moar d4fc1f: OUTPUT«$f$fTrue» | ||
Mouq | m: my $f is dynamic = Array.new; sub f ($g is rw) { $CALLER::f.VAR.name.say; $g.VAR.name.say; say $CALLER::f =:= $g}; f($f); | 04:27 | |
camelia | rakudo-moar d4fc1f: OUTPUT«$f$fTrue» | ||
skids | m: my $f is dynamic = Array.new[1,2]; sub f { say $CALLERS::f }; f; | 04:30 | |
camelia | rakudo-moar d4fc1f: OUTPUT«(Any) (Any)» | ||
Mouq | my $f is dynamic = Array.new(1,2); sub f { say $CALLERS::f }; f; | 04:31 | |
skids | Hrm I only get one (Any) on an older build. | ||
Mouq | m: my $f is dynamic = Array.new(1,2); sub f { say $CALLERS::f }; f; | ||
camelia | rakudo-moar d4fc1f: OUTPUT«1 2» | ||
skids | oops. | ||
Mouq | skids: TimToady++ added CALLERS recently | ||
So idk if that's the issue | |||
skids | Yes, I was trying to show that it was NYI. But I guess I should upgrade. | 04:32 | |
timotimo is happy to see the native array stuff by jnthn++ give great performance improvements already | 04:53 | ||
05:22
madmuid joined
05:24
BenGoldberg joined
05:49
mr-foobar left
05:55
Vlavv_ left
06:12
gtodd left
06:13
gtodd joined
06:23
anaeem1_ joined
06:24
anaeem1_ left
06:26
anaeem1_ joined
06:29
gfldex joined
|
|||
moritz | \o | 06:32 | |
06:46
rindolf joined
06:49
avuserow joined
|
|||
raydiak | o/ | 06:52 | |
avuserow | \o raydiak | 06:53 | |
dalek | kudo-star-daily: 128a568 | coke++ | log/ (9 files): today (automated commit) |
06:56 | |
07:02
prime- joined
07:03
prime left
07:04
zby_home_ joined,
BenGoldberg left
|
|||
[Coke] | jnthn++ | 07:07 | |
07:14
smls joined
07:15
gfldex left
07:16
xfix joined
07:27
Akagi201 joined
07:29
wicope joined
07:36
rindolf left
07:43
adu left
|
|||
[Tux] | jnthn++. I::P5 meets my expectations w.r.t. IO | 07:44 | |
nine++ | |||
tux.nl/Files/20150314084716.png / tux.nl/Files/20150314084753.png was for jnthn | 07:48 | ||
reify - 430000 callc | |||
07:50
darutoko joined
|
|||
[Tux] | postcircumfix:<{ }> <= where could I find the use of that in my own code? | 07:50 | |
AT-KEY? | |||
raydiak | [Tux]: likely | 07:56 | |
07:58
Rounin joined
|
|||
[Tux] | \o/ RT#122892 is fixed | 08:00 | |
synopsebot | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122892 | ||
08:11
Vlavv_ joined
08:14
telex left,
telex joined,
kjs_ joined
|
|||
[Tux] | tux.nl/Files/20150314091845.png | 08:19 | |
08:24
rurban joined
08:28
FROGGS[mobile] joined
|
|||
FROGGS[mobile] | m: my int8 $foo = 317; say $foo | 08:29 | |
camelia | rakudo-moar d4fc1f: OUTPUT«61» | ||
FROGGS[mobile] | that only works for a short while now, right? | ||
since nativeref landed probably | 08:30 | ||
08:41
diana_olhovik joined
|
|||
Mouq | m: my int8 $foo = 31700000000; say $foo | 08:43 | |
camelia | rakudo-moar d4fc1f: OUTPUT«0» | ||
TimToady | surely that should only be int8(), and bare int8 should fail | 08:44 | |
08:45
diana_olhovik left,
Rounin left
|
|||
TimToady | or at least we oughta have some way of saying "die if this doesn't fit" | 08:45 | |
m: subset int8really of int8 where int8.Range; my int8really $foo = 31700000000; say $foo | 08:46 | ||
camelia | rakudo-moar d4fc1f: OUTPUT«Type check failed in assignment to '$foo'; expected 'int8really' but got 'Int' in block <unit> at /tmp/jwTExdGSRb:1» | ||
TimToady | that seems less than optimal | 08:47 | |
Mouq | TimToady: Although I don't think it'll actually be an int8 in that case | ||
TimToady | 'of int8' | ||
08:48
diana_olhovik joined
|
|||
TimToady | m: say int8.Range | 08:48 | |
camelia | rakudo-moar d4fc1f: OUTPUT«-128..127» | ||
TimToady | it already knows it's range, so it seems kinda silly not to have a way to enforce it | ||
Mouq | Right, but I'm not sure that the Rakudo impl handles that yet… not that I know much about the natives implementation | ||
TimToady | though I understand the C-think going on here | ||
FROGGS[mobile] | TimToady: using a native type is explicit enough for me to allow overflow | 08:49 | |
Mouq | m: subset int8really of int8 where int8.Range; my int8really $foo = 317; say $foo | ||
camelia | rakudo-moar d4fc1f: OUTPUT«Type check failed in assignment to '$foo'; expected 'int8really' but got 'Int' in block <unit> at /tmp/aFW16uKGx7:1» | ||
TimToady | well, but then I oughta be able to do the subset | ||
FROGGS[mobile] | also because using a native type is mostly done for performance reasons | ||
TimToady | there should be an easy way to ask for a check | 08:50 | |
Mouq | m: subset Int8 of Int where int8.Range; my Int8 $foo = 317; say $foo | ||
camelia | rakudo-moar d4fc1f: OUTPUT«Type check failed in assignment to '$foo'; expected 'Int8' but got 'Int' in block <unit> at /tmp/9dyZdDh4NU:1» | ||
Mouq | Hm | ||
Oh, no, that's right :P | 08:51 | ||
m: subset Int8 of Int where { say int8.Range }; my Int8 $foo = 15; say $foo | |||
camelia | rakudo-moar d4fc1f: OUTPUT«-128..12715» | ||
Mouq & | |||
TimToady | error is LTA then | ||
m: subset int8really of int8 where int8.Range; my int8really $foo = 15; say $foo | 08:52 | ||
camelia | rakudo-moar d4fc1f: OUTPUT«Type check failed in assignment to '$foo'; expected 'int8really' but got 'Int' in block <unit> at /tmp/GaHDC49EE4:1» | ||
TimToady | and that should work | ||
08:54
alini left
|
|||
TimToady | seesighting & | 08:58 | |
[Tux] | jnthn++; # optimizer working already made me find one (small) optimization possibility | 09:01 | |
moritz | collect.p6c.org/ # capacity management for hack (so far; maybe I'll add www too) | 09:02 | |
09:07
Akagi201 left
09:09
Akagi201 joined
|
|||
itz | oh collectd looks nice | 09:11 | |
raydiak | g'night #perl6 | 09:17 | |
09:18
Akagi201 left
|
|||
moritz | itz: that's because I had nothing to do with its design :-) | 09:22 | |
[Tux] | tux.nl/Files/20150314102813.png <= there is no way I can find that first deoptimisation, right? | 09:28 | |
09:30
zby_home_ left
|
|||
[Tux] | most "red" seems to come from reify and gimme | 09:30 | |
moritz | yes, that's to be expected :( | ||
nine_ | What is reify anyway? | 09:34 | |
moritz | it's the routine that turns lazy list elements into actual elements | 09:35 | |
nine_ | Ah, so that's the performance improvement the GLR may bring? | ||
moritz hopes so | 09:37 | ||
09:38
coffee` joined
09:45
rindolf joined
|
|||
timotimo | we kind of bounce around between reify, gimme and whatever code may be involved, like with a GatherIter or MapIter | 09:51 | |
often we do a whole lot of busywork for every individual item, too | 09:52 | ||
dalek | ast: 3c01d70 | usev6++ | S05-modifier/ii.t: Add test for RT #77406 |
10:00 | |
synopsebot | Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=77406 | ||
10:08
spider-mario joined
|
|||
[Tux] | nine_, www.perlmonks.org/?node_id=1120037 | 10:08 | |
dalek | ast: c4a6374 | moritz++ | S05-substitution/subst.t: Test non-Str replacement parts for Str.substr |
10:13 | |
nine_ | [Tux]: cool :) | 10:16 | |
masak | antenoon salutations, #perl6 | 10:25 | |
[Tux] | o/ | 10:28 | |
it is frightening how much enthusiasm you got awakened in me since Slang::Tuxic. Frightening indeed | 10:29 | ||
10:30
Akagi201 joined
10:32
tgt joined
10:34
Ugator joined
|
|||
Mouq | It's so hard for me not to go off on the PerlMonks trolls (troll?). The ignorance, hypocrisy, disrespect… ugh. (people on PerlMonks who manage to deal couteously with the trolls)++ | 10:34 | |
I mean I don't even care personally… its mostly that you people don't deserve it | 10:38 | ||
So anyway… | |||
vendethiel | Mouq: thinking about one instance in particular? | 10:41 | |
Mouq | vendethiel: No, but I'd rather not link any particular instances | 10:43 | |
vendethiel: I kinda feel icky for bringing this negativity into #perl6 in the first place :P transitioning to another topic would be A-OK with me | 10:44 | ||
10:47
kjs_ left
|
|||
jnthn | mor...afternoon, #perl6 :) | 11:04 | |
11:04
madmuid left
|
|||
timotimo | o/ | 11:15 | |
11:24
kjs_ joined
11:28
anaeem1_ left
11:29
anaeem1 joined
|
|||
lizmat | good top of the afternoon, #perl6! | 11:31 | |
jnthn | o/ lizmat | 11:32 | |
11:33
anaeem1 left
|
|||
lizmat | just realised we missed the ultimate pie moment: 3.14.15 9:26:53 | 11:33 | |
*pi :-) | |||
jnthn | Mmmm...pie... | 11:35 | |
lizmat | jnthn: am I correct in seeing that the roles intarray and numarray could actually be generated from a template ? | 11:45 | |
11:46
diana_olhovik left
11:48
eli-se joined,
eli-se left
|
|||
jnthn | lizmat: Painfully maybe | 11:49 | |
11:50
muraiki joined
|
|||
lizmat | well, keeping the roles in sync feels pretty painful to me too | 11:50 | |
11:52
cognominal joined
|
|||
lizmat | m: my int @a = 0 | 11:52 | |
camelia | rakudo-moar d4fc1f: OUTPUT«Type check failed in binding @values; expected 'Positional' but got 'Int' in method STORE at src/gen/m-CORE.setting:11009 in block <unit> at /tmp/9Q17ZLsP2A:1» | ||
lizmat | add another STORE candidate ? | ||
jnthn | um, how on earth... | 11:53 | |
oh duh, it was meant to be * | |||
lizmat | ok, will fix | ||
jnthn | well | ||
lizmat | ? | ||
jnthn | now you mention it, we may as well go for two candidates | ||
lizmat | ok, will do | ||
:-) | |||
jnthn | 'cus it avoids a level of wrapping | ||
but do ith with delegation. | 11:54 | ||
e.g. make it a multi | |||
lizmat | ok, apart from the painfulness of the person doing the templating | ||
*for | |||
would you be against it ? | |||
jnthn | Yes, for now | ||
lizmat | ok | ||
jnthn | I'm more wondering how we have the compiler do the work. | 11:55 | |
lizmat is not going to mention the magic word | |||
jnthn | Well, yeah, there is that :) | 11:56 | |
More the parametric role thing this time, though | |||
I ahve .gist/.Str/.perl locally for the native arrays | 11:57 | ||
dalek | kudo/nom: 471718b | jnthn++ | src/core/native_array.pm: Must only create parameterized native array. |
11:59 | |
kudo/nom: 433fb52 | jnthn++ | src/core/native_array.pm: Native array .gist/.Str/.perl. |
12:04 | ||
ast: 0fc0ce4 | jnthn++ | S09-typed-arrays/native.t: Native array .Str/.gist/.perl/.new tests. |
12:05 | ||
kudo/nom: 8dd4417 | lizmat++ | src/core/native_array.pm: Add candidates for native_array.STORE |
|||
jnthn | lizmat: I think the *@values one should just self.STORE(@values) | 12:06 | |
lizmat | ah, ok | ||
jnthn | lizmat: There's no need to duplicate code. | ||
lizmat: And the delegating method may in the future be inlinable anyway. | |||
lizmat | okidoki | ||
jnthn | lizmat++ | 12:07 | |
The single value candidate is tiny enough it can stay | |||
12:07
cognominal left
|
|||
lizmat | I could even move the delegating one into the class, as they are identical between roles | 12:08 | |
jnthn | Depending on use-cases we might want to have an array[int] candidate also, in that we can do the copying more cheaply. Guess we can see what kinds of programs people write. | ||
lizmat | would that make sense? | ||
jnthn | Yes | ||
Keep stuff that doesn't have any _i/_n into the class | |||
*in | |||
The roles are for stuff we can't make generic, or at least can't performantly make generic. | 12:09 | ||
lizmat | would array[int] already work ? | 12:11 | |
jnthn | um | 12:12 | |
No, given we're defining it :) | |||
Hm | |||
Maybe it's not actually worth it (more) | |||
lizmat | MMD for array[int] | ||
jnthn | Thinking about what spesh will do in the existing @value case, it'd | 12:13 | |
1) inline AT_POS | |||
2) notice the box/unbox | |||
3) remove it, giving us the version we would hand-code | |||
lizmat | something else: my int $i = 0; | 12:14 | |
jnthn | So I don't think we benefit from the extra candidate. | ||
lizmat | is the = 0 needed? | ||
jnthn | No | ||
lizmat | but added for clarity ? | ||
jnthn | Yeah. | ||
lizmat | and no runtime penalty ? | ||
jnthn | If yes, tiny. And again, something we can expect to have optimized out. | 12:15 | |
lizmat | ok | 12:16 | |
jnthn | I dunno quite how it works with the code Rakudo generates, but I've seen spesh toss dead initializations in NQP code. | ||
OK, what else is on the todo methods list... :) | 12:17 | ||
m: my int @a = 1..5; say @a.item | |||
camelia | rakudo-moar 8dd441: OUTPUT«1 2 3 4 5» | ||
jnthn | goody | ||
m: my int @a = 1..5; say @a.keys | |||
camelia | rakudo-moar 8dd441: OUTPUT«Memory allocation failed; could not allocate 57248 bytes» | ||
jnthn | yowser | ||
m: my int @a = 1..5; say @a.values | |||
camelia | rakudo-moar 8dd441: OUTPUT«1 2 3 4 5» | ||
12:18
rindolf left
|
|||
jnthn | Hm, where do we get that .values from :) | 12:18 | |
dalek | kudo/nom: 533b24b | lizmat++ | src/core/native_array.pm: Factor out STORE(*@values) case to class |
||
jnthn | m: my int @a = 1..5; say @a.values.perl | ||
camelia | rakudo-moar 8dd441: OUTPUT«array[int].new(1, 2, 3, 4, 5)» | ||
jnthn | Hmm, is .values really meant to return identity? | ||
m: my @a = 1..5; say @a.values.perl | |||
camelia | rakudo-moar 8dd441: OUTPUT«(1, 2, 3, 4, 5).list» | ||
jnthn | No, it's not. Thought so. | ||
lizmat | my $a = [1..5]; say @a.values.perl | 12:19 | |
m: my $a = [1..5]; say @a.values.perl | |||
camelia | rakudo-moar 8dd441: OUTPUT«5===SORRY!5=== Error while compiling /tmp/RxXkEJD_5UVariable '@a' is not declared. Did you mean '$a'?at /tmp/RxXkEJD_5U:1------> 3my $a = [1..5]; say @a.values.perl7⏏5<EOL> expecting any of: method arguments» | ||
jnthn | undecl var :) | ||
lizmat | m: my $a = [1..5]; say $a.values.perl | ||
camelia | rakudo-moar 8dd441: OUTPUT«(1, 2, 3, 4, 5).list» | ||
jnthn | method values in List does an explicit clone. | ||
lizmat | and that is good or bad ? | 12:21 | |
jnthn | Probably fine | ||
If you write @foo.values instead of @foo then you probably did it with reason :) | 12:22 | ||
lizmat | ah, yeah, dukh :-) | ||
*duh rather | |||
jnthn | What I really do want to make sure of with TimToady is whether operations on native arrays should return native arrays | ||
lizmat | TimToady is seesighting | 12:23 | |
jnthn | That's fine, I don't have to know it Right Now | ||
:) | |||
lizmat | I see that native push/unshift don't have a candidate for @values, but they do for *@values | ||
shouldn't that get the same treatment as STORE ? | |||
jnthn | Depends how common it's gonna be I guess | 12:24 | |
12:25
molaf_ joined
|
|||
jnthn | Are you going to add a test for the "assign one thing"? | 12:25 | |
(if not, I will) | 12:26 | ||
lizmat | sure, tell me which file ? | ||
jnthn | S09-typed-array/native.t | ||
There's plenty of tests already for assigning to native int/num arrays. | |||
12:26
perl6_newbee joined
|
|||
jnthn | (So it should be easy to find inspriration for adding a new one) | 12:28 | |
12:28
molaf left
|
|||
jnthn | lizmat: Thanks to inlining I think we can also shrink the roles a bit further | 12:29 | |
multi method push(array:D: *@values) { # for example this could self.push($_) for @values | |||
lizmat | yeah, my point | 12:30 | |
jnthn | And the inner .push will get inlined | ||
jnthn is still getting used to writing code with a dynamic optimizer acting on it, despite having implemented much of said dynamic optimizer :) | |||
lizmat | yeah, for me it was a big change too | ||
dalek | pan style="color: #395be5">perl6-examples: 794708a | paultcochrane++ | Makefile: Add a run-all target to the Makefile |
||
pan style="color: #395be5">perl6-examples: 8176c76 | paultcochrane++ | Makefile: Give the "test" target a better description |
|||
jnthn | And JVM of course knows how to inline things :) | 12:31 | |
lizmat | something feels wrong with this sig: method splice($offset = 0, $size?, *@values) { | 12:33 | |
jnthn | Oh? | ||
I didn't come up with it :) | |||
It's lifted directly from the List.splice sig | 12:34 | ||
What's wrong with it, ooc? | |||
It seems reasonable to me | |||
lizmat | so how does it know that the first value after the offset, is not intended to be part of the slurpy ? | ||
dalek | pan style="color: #395be5">perl6-examples: 6ed0a83 | paultcochrane++ | README.md: Mention run-all target in README |
12:35 | |
12:35
zakharyas joined
|
|||
jnthn | You have to specify a $size if you're going to specify elements to splice in too | 12:35 | |
lizmat | my @a = ^10; @a.splice(3,4,5,6); say @a | 12:36 | |
m: my @a = ^10; @a.splice(3,4,5,6); say @a | |||
camelia | rakudo-moar 8dd441: OUTPUT«0 1 2 5 6 7 8 9» | ||
lizmat | m: my @a = ^10; @a.splice(3,*,4,5,6); say @a | 12:37 | |
camelia | rakudo-moar 8dd441: OUTPUT«Cannot call 'Real'; none of these signatures match::(Mu:U \v: *%_) in sub infix:<<> at src/gen/m-CORE.setting:5326 in method splice at src/gen/m-CORE.setting:10204 in block <unit> at /tmp/UBlzkPzFDG:1» | ||
jnthn | Looks right to me. I might write it @a.splice(3, 4, (5, 6)) in that case for clarity | ||
lizmat | hmmm.... | ||
jnthn | But more often you'd be doing @a.splice(3, 4, @replacements) or so, I think | ||
lizmat | I guess | 12:38 | |
12:41
FROGGS joined
|
|||
jnthn | nqp: sub foo($a, $b) { say($a); say($b); }; my @a := nqp::list_i(1, 2); foo(|@a) | 12:41 | |
12:41
camelia left
|
|||
jnthn | ?? | 12:41 | |
lizmat | you butterfly killer, you! :-) | 12:42 | |
12:43
camelia joined
|
|||
jnthn | .oO( schmettodling ) |
12:43 | |
jnthn tired it locally :) | |||
Turns out it works, and it works on JVM too, meaning implemetning native array flattening will be easy :) | 12:44 | ||
12:44
ChanServ sets mode: +v camelia
|
|||
FROGGS | o/ | 12:44 | |
jnthn | o/ FROGGS | ||
lizmat | jnthn: this candidate: multi method ASSIGN-POS(array:D: Any:D $idx, Mu \value) { | 12:46 | |
wouldn't it make more sense to Int() $idx ? | |||
aka coerce in the sig ? | |||
dalek | kudo/nom: 889ce3f | jnthn++ | src/core/native_array.pm: Support flattening native arrays into calls. |
12:49 | |
jnthn | lizmat: I don't know the definedness checks work out correctly there | ||
lizmat: I fear we'd not hit the Any:U candidate. | 12:50 | ||
dalek | ast: 9766555 | jnthn++ | S09-typed-arrays/native.t: Test flattening native arrays into calls. |
||
lizmat | well, that feels correct in this context to me | ||
but ok | |||
jnthn | Well, I was following the ASSIGN-POS semantics in Any. | 12:51 | |
dalek | kudo/nom: 214f5a7 | lizmat++ | src/core/native_array.pm: Factor out array.push/unshift into class |
||
jnthn | lizmat: If you're looking for another one to take on, DELETE-POS is NYI and NYT for native arrays | 12:53 | |
Should be able to go in the class also | 12:54 | ||
lizmat | DELETE-POS meaning setting to 0 ? | ||
jnthn | And use nqp::deletepos(self, pos) or so | ||
lizmat | ok | ||
jnthn | Uh | ||
lizmat | I assume native arrays are consecutive ? | ||
jnthn | m: my @a = 1..10; @a[3]:delete; say @a; | 12:55 | |
camelia | rakudo-moar 533b24: OUTPUT«1 2 3 (Any) 5 6 7 8 9 10» | ||
jnthn | Oh, it does that... | ||
But you have no undefined things | |||
(in natives) | |||
lizmat | m: my @a = 1..10; @a[3]:delete; say @a[3]:exists; | ||
camelia | rakudo-moar 533b24: OUTPUT«False» | ||
jnthn | Maybe DELETE-POS on a native array is just a "no you can't" exception | ||
lizmat | m: my @a = 1..10; @a[3]:delete; say @a[*]:exists; | ||
camelia | rakudo-moar 533b24: OUTPUT«True True True False True True True True True True» | ||
lizmat | yeah, like binding | ||
jnthn | aye | 12:56 | |
lizmat | I can do that :-) | ||
jnthn | Yeah, I think it'll have to be that. | ||
I often forget :delete doesn't actually do a splice-y thing | |||
(Not disagreeing with the current behavior) | 12:57 | ||
lizmat | perhaps we would need a :splce adverb | ||
:splice | |||
12:57
kaare_ left
|
|||
jnthn | Could maybe be cute :) | 12:57 | |
lizmat | would be same as :delete on hashes | ||
jnthn | @a[2..4]:splice = @things; # actually much easier to understand | ||
Though on hashes :splice would be a no-op or not allowed | 12:58 | ||
Well, not sure we should go and stick it in right now, but worth considering. | |||
lizmat | :splice on hashes would need a list of pairs ? | ||
jnthn | I dunno :) | ||
I don't know what on earth it'd do :) | 12:59 | ||
13:00
zakharyas left
|
|||
jnthn | lizmat: Dunno if you know the answer to this, but | 13:00 | |
multi method keys(List:D:) { | |||
self.values.map: { (state $)++ } | |||
} | |||
13:00
Sir_Ragnarok left
|
|||
jnthn | Is there any reasons that isn't just (^self.elems).list | 13:00 | |
? | |||
smls | how could a :splice adverb allow inserting elements without removing any? | ||
lizmat | jnthn: ^self.elems on an infinite list ? | 13:01 | |
13:01
anaeem1_ joined
|
|||
jnthn | Ah | 13:01 | |
13:01
FROGGS[mobile] left
|
|||
jnthn | Yeah, that's the one. | 13:01 | |
lizmat++ | |||
13:01
anaeem1_ left
|
|||
FROGGS | m: say (^Inf).list | 13:01 | |
camelia | rakudo-moar 533b24: OUTPUT«0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88…» | ||
FROGGS | works | 13:02 | |
jnthn | FROGGS: yeah but .elems doesn't return Inf, it hangs :) | ||
FROGGS | :/ | ||
13:02
FROGGS[mobile] joined,
anaeem1 joined
|
|||
jnthn | At least, on infinite-but-not-known-infinite it must. | 13:02 | |
Anyway, I *can* take the shortcut on native arrays :) | |||
Because they ain't lazy. | |||
lizmat | yeah | ||
13:02
FROGGS[mobile] left
|
|||
smls | splice($pos, 0, @insertion) # can adress offset with zero length; [] subscript can't do that | 13:03 | |
lizmat | also (^self.elems).list wouldn't be lazy | ||
not sure that's good or bad, but there you go | |||
jnthn | lizmat: a Range is lazy, no? | ||
lizmat | but .list ing it isn't ? | 13:04 | |
jnthn | smls: Yes, another reason it's not as cute as it may first seem... | ||
lizmat: .list just implies "put it in a List" | |||
m: (^Inf).list and say 'alive' | |||
camelia | rakudo-moar 533b24: OUTPUT«alive» | ||
lizmat | well, Range.list is defined as: method list() { self.flat } | ||
13:04
Sir_Ragnarok joined
|
|||
jnthn | hmm | 13:04 | |
lizmat | and Range.flat is defined as: method flat() { nqp::p6list(nqp::list(self), List, Bool::True) } | ||
jnthn | method flat() { nqp::p6list(nqp::list(self), List, Bool::True) } | 13:05 | |
Right :) | |||
Which does not actually evaluate | |||
Just flags that the range iteration will only ever produce readily-flattened values, iirc | |||
dalek | kudo/nom: 9b295bc | lizmat++ | src/core/native_array.pm: Implement DELETE-POS, also hide BIND-POS |
13:06 | |
13:06
anaeem1 left
|
|||
smls | jnthn, lizmat: Also, couldn't normal array slices support splice behavior (instead of adding a new adverb)? | 13:07 | |
FROGGS | jnthn: so native arrays always have a known size? | ||
(in contrast to CArrays) | |||
jnthn | FROGGS: They always know their size, yes. They can grow. | 13:08 | |
smls | m: my @a = ^10; @a[3..4] = 10..15; say @a | ||
camelia | rakudo-moar 533b24: OUTPUT«0 1 2 10 11 5 6 7 8 9» | ||
FROGGS | jnthn: that means we often also cannot return native arrays from C functions | ||
smls | ^^ could this be made to allow resizing the array? | ||
FROGGS | like we cannot return buffers | ||
13:09
anaeem1 joined
|
|||
jnthn | smls: Not by default, I don't think :) | 13:09 | |
lizmat | m: my int @a = ^10; say [+] @a # twice as fast as Int @a :-) | ||
camelia | rakudo-moar 533b24: OUTPUT«45» | ||
jnthn | FROGGS: No, they make no sense as return values | ||
FROGGS: That's why, in part, the CArray REPR exists. | |||
FROGGS | jnthn: it might be more than helpful to at least allow to cast a pointer to a native array or buffer by providing the number of elements | ||
smls | jnthn: Because it returns list of Scalars that don't know that they're part of an array? | 13:10 | |
lizmat | smls: I'm afraid it's too late for that change | ||
jnthn | smls: Yes | ||
smls: Also because we probably rely on the current semantics in a lot of places | |||
smls | ok, carry on then :P | ||
jnthn | smls: You'd break stuff like @a[$x..$y] = 1 xx * | ||
13:10
Rounin joined
|
|||
jnthn | FROGGS: Yes, we need a better story there. There are also issues of memory ownership. | 13:11 | |
13:11
diana_olhovik_ joined
|
|||
jnthn | FROGGS: And we shouldn't saddle our normal memory-managed REPRs with "do I even own my data" | 13:12 | |
lizmat | afk for a few hours& | 13:13 | |
jnthn | FROGGS: When you say "cast" do you mean "an efficient way to take the CArray and copy the data into a Buf"? | ||
FROGGS: Or more "take ownership of the memory"? | 13:14 | ||
arnsholt | The latter sounds really dangerous | ||
jnthn | Yeah, my thought too ;) | ||
FROGGS | jnthn: depends... in most cases I mean copy I think | 13:15 | |
jnthn | FROGGS: OK. I think we could really do with an efficient bulk-copy op at some point that can let us handle these things in a more efficeint way. | ||
FROGGS | a pointer to pointer cast does not copy for example | ||
jnthn: something related: can I declare a (native) array if a given size? and what be the syntax to do so? | 13:16 | ||
ahh nvm | |||
std: my @a[32] | |||
camelia | std 28329a7: OUTPUT«ok 00:00 137m» | ||
jnthn | my @a[42]; | ||
And no, you can't do ityet | |||
Sized/shaped things are further down my todo list | |||
FROGGS | and they will be awesome to use :o) | 13:17 | |
jnthn | Once native arrays are getting to the point where what remains is polish and optimization, I'm planning to dig into NFG. | ||
FROGGS | btw, I'd like to help out for our great TLAs... but I dunno what I could do | ||
I guess I can hook into NFG at some point | |||
or other minor things about NSA | 13:18 | ||
13:18
eli-se joined
|
|||
jnthn | Yeah. | 13:18 | |
eli-se | hi | ||
jnthn | o/ eli-se | ||
FROGGS | jnthn: so please, if you find anything please let me know :o) | ||
lunch & | 13:19 | ||
jnthn | FROGGS: Will do. :) | ||
arnsholt | jnthn: OOC, how much of the NFG work is nailing down the design? | ||
jnthn | arnsholt: Not too much, in so far as I think I've figured out the overall data structure stuff here. | 13:20 | |
arnsholt | Spiffy! | 13:21 | |
jnthn | Figuring out exactly how to get some of the required stuff in the UCD extracted and into a shape we can use is a bit tedious. :) | 13:22 | |
arnsholt | Yeah, I guess that's one of those things that's tedious (and probably a lot of work), but not necessarily very hard | 13:23 | |
13:23
skids left
13:26
BenGoldberg joined
13:31
diana_olhovik_ left,
anaeem1 left
13:34
diana_olhovik_ joined
|
|||
jnthn | bbiab | 13:36 | |
13:39
anaeem1 joined
13:44
diana_olhovik_ left
13:50
diana_olhovik_ joined
13:52
anaeem1 left,
anaeem1 joined
13:55
diana_olhovik_ left
|
|||
moritz | Mouq: it takes time to learn how to deal with the trolls (on perlmonks, and in general). I don't think I've perfected it, but I've become better | 13:56 | |
13:56
anaeem1 left
|
|||
moritz | Mouq: one possible trick is decide in advance how many replies you'll write at most to trolls (for me typically 2), and don't go beyond | 13:57 | |
Mouq: the bystanders aren't dumb; the'll pick up who is trolling and who is using facts | 13:58 | ||
14:00
skids joined
14:01
lichtkind joined,
raiph joined
14:03
eli-se left
14:06
diana_olhovik_ joined
|
|||
timotimo | I'm considering adding a section to the weekly to post interesting things evaluated with camellia | 14:07 | |
and do that on a different day | 14:08 | ||
vendethiel | timotimo: that'd be very interesting :P | ||
"the smallish calendar" | |||
14:09
kjs_ left
|
|||
moritz | this week's butterfly | 14:09 | |
timotimo | I like your suggestion, moritz! | 14:12 | |
bbl | |||
14:17
adu joined
|
|||
skids | Is there a "match only if you have progressed the cursor since the last time you ran across this element" rx metasyntax? | 14:18 | |
moritz | skids: I don't think so | 14:21 | |
14:22
eli-se joined
14:24
zakharyas joined
|
|||
moritz | m: my int @a = 1..5; say @a.pick(3) | 14:24 | |
camelia | rakudo-moar 9b295b: OUTPUT«Memory allocation failed; could not allocate 656 bytes» | 14:25 | |
FROGGS still wonders why perl6-j -e 'say nqp::p6store(my $foo, (42 for ^2))' passes a type object to p6store on the rhs | |||
14:27
eli-se left
|
|||
moritz | I wonder if methods such as pick, roll etc. could be put into role Positional, and thus not duplicated among List and array | 14:34 | |
moritz tries | 14:39 | ||
m: say 42.rand.floar.^name | 14:40 | ||
camelia | rakudo-moar 9b295b: OUTPUT«No such method 'floar' for invocant of type 'Num' in block <unit> at /tmp/0POkqOZ0vj:1» | ||
moritz | m: say 42.rand.floor.^name | ||
camelia | rakudo-moar 9b295b: OUTPUT«Int» | ||
moritz | it's not so easy :( | 14:52 | |
jnthn | moritz: Also it's not clear that the return types should be the same | 14:53 | |
moritz | I get ambiguous dispatch for Range.roll | ||
moritz is confused about how multis and roles should interact | |||
jnthn | The candidates are flatteningly composed into the class | 14:54 | |
moritz | jnthn: even if both the role and the class contain a proto method? | ||
m: role R { proto method x(|c) {*}; multi method x() { 'R' } }; class C does R { proto method x(|) { * }; multi method x() { 'C' } }; say C.new.x | 14:55 | ||
camelia | rakudo-moar 9b295b: OUTPUT«Ambiguous call to 'x'; these signatures all match::(C $: *%_):(C $: *%_) in block <unit> at /tmp/9gWimGJNDo:1» | ||
moritz | I'd expected that to print C | ||
jnthn: well, roll is a lazy method, so I'd have to return List anyway | 14:56 | ||
pmichaud | good morning, #perl6 | 14:57 | |
masak | moritz: I'd expect that to print C, too. classes should get to override roles' methods. | ||
pmichaud! \o/ | |||
moritz | masak: wanna rakudobugit? | 14:58 | |
pmichaud | I am _finally_ free again! Well, mostly. :) | ||
masak rakudobugsit | 14:59 | ||
pmichaud | My (second) robotics team just advanced to their world championship. :) | ||
moritz | pmichaud: doesn't sound like too much free time to me :-) | ||
pmichaud: and congratulations! | |||
masak | yeah! congrats! | ||
pmichaud | actually, it is. Since we don't have to worry about advancing from the world championship, we can just polish what we already have and enjoy the event. | ||
vendethiel | congrats ;-) | 15:00 | |
masak | I look forward to looking up from the ground at the ruins of civilization, after the robots destroyed it, raising my fist, and shouting "damn you pmichaud and your second robotics team!" :P | ||
pmichaud | masak: several of the team members have world domination as their goal. | 15:01 | |
masak | I like them already | ||
moritz | masak: my thoughts went more like "I, for one, welcome our new pmichaud-seecond-robotic overlords" :-) | 15:02 | |
vendethiel | *g* | ||
jnthn | moritz: First off, you probably don't want the proto in both the role and the class (only the class). Second, the invocant of a role is ::?CLASS, meaning it's generic, and so by the time it gets composed into the class it's been instantiated. | ||
vendethiel | .oO( the second-overlord syndrom ) |
||
masak | jnthn: so... no bug? | ||
moritz | jnthn: I don't understand | ||
jnthn | So the ambiguous dispatch is correct there. | ||
masak | jnthn: could you demonstrate how to make the dispatch not ambiguous? | ||
jnthn | moritz: Method in roles are *as if you wrote them in the class*. | ||
moritz | jnthn: I thought if I had a proto in both, the class proto would overwrite the role proto | 15:03 | |
jnthn: much like the mechanism for selecting one of several conflicting methods supplied by roles | |||
jnthn | moritz: Thing is that multi candidates are composed independently of protos | 15:04 | |
masak: You could do it by multi foo(RoleType: ...) { } | |||
masak: Thus opting out of the genericity | |||
15:05
rindolf joined
|
|||
masak | jnthn: that's from the perspectively of the role, though? | 15:05 | |
jnthn | masak: Yes | 15:06 | |
Possibly the presence of a controlling proto in a role should, if there is a conflicting proto in the target class, exclude all of the multi candidates with the same short name in the role. | 15:07 | ||
Then what moritz originally wrote woulda worked. | |||
It may have other downsides. | |||
masak | ok, I see nothing to rakudobug here. | 15:08 | |
masak moves along | |||
moritz | I'd argue that composing role candidates independently of protos is at least questionable | 15:09 | |
jnthn | It's largely a consequence of multi candidate lists getting figured out entirely at composition time | ||
moritz | well, my point is that the presence of a proto should make the whole collection of proto + multis be treated like a single, normal method | 15:10 | |
that's how we handle it for subs/lexicals | |||
that is, a proto in an inner scope completely hides all candidates from an outer scope | 15:11 | ||
OTOH I'm probably not qualified to judge the impact on the rest of the roles design | 15:13 | ||
15:13
[particle] joined
|
|||
masak | m: my @a; @a or= 1, 2, 3, 4; say @a | 15:14 | |
camelia | rakudo-moar 9b295b: OUTPUT«1 2 3 4» | ||
masak | \o/ | ||
jnthn | m: my int @a; @a or= 1, 2, 3, 4; say @a # curious :) | ||
camelia | rakudo-moar 9b295b: OUTPUT«1 2 3 4» | ||
jnthn | phew :) | ||
Hm, we get to close RT#107122 :) | 15:16 | ||
synopsebot | Link: rt.perl.org/rt3//Public/Bug/Displa...?id=107122 | ||
15:16
[particle]1 left
|
|||
jnthn away for a bit | 15:25 | ||
15:25
anaeem1_ joined
|
|||
moritz | ok, my attempts to move roll (at least partially) into Positional failed | 15:27 | |
TimToady | circularity? | 15:29 | |
jnthn | moritz: I'm pretty certain Positional is too general to put .roll into anyay | ||
I thought Callable/Associative/Positional were just meant to be about the sigil. | 15:30 | ||
I can see us wanting some role to factor some common list-y things into though | |||
moritz | jnthn: I don't see why pick, roll, permutate etc. would need anything except .elems and .[] / AT-POS | 15:31 | |
jnthn | But again, I think we need to make some choices about return types of operations on typed things. | ||
moritz | and in my humble mental model, those are exactly the operations that Positional implies | ||
TimToady smells the delightful smell of competing principles here | |||
jnthn | moritz: Ah, I'd had elems as being more associated with Iterable. | 15:32 | |
Anyway, with the GLR ahead and the basics of native arrays landed, it's a good time to try and get these sorts of things straightened out. | 15:33 | ||
pmichaud wonders about the relationship (if any) between Positional and Iterable | |||
15:34
Woodi joined
|
|||
jnthn | There's all sorts of questions like what does @native-int-array.map(...) return | 15:34 | |
pmichaud | I'm not sure that Positional should imply .elems, though. | ||
smls | List? | ||
(re .map) | 15:35 | ||
jnthn | smls: So how do I ever get another native int array? | ||
smls | good question | ||
moritz | pmichaud: I guess Positional should imply Iterable, but not the other way round (hashes are iterable but not positional) | ||
pmichaud | I mean, Positional obviously implies .[] and AT-POS, but I don't know that it should be extended to .elems | ||
smls | jnthn: Maybe you'll have to modify it in-place? | 15:36 | |
pmichaud | and that means that .roll/.pick/.etc really belong in the Listy things | ||
jnthn | smls: That ain't what .map does though | ||
smls | @native-array.map({ $_++ }) | ||
colomon | pmichaud: + | ||
pmichaud: +1 | |||
jnthn | More likely is that | ||
moritz | so, do we need another role? | ||
TimToady | m: $_ = "abc"; say m/(.)(.)(.)/ ~~ Positional | ||
camelia | rakudo-moar 9b295b: OUTPUT«False» | ||
jnthn | @native-int-array.map(-> int $i --> int { $i + 1 }) | ||
colomon | pmichaud: …. errr, actually, is even Listy right for that? | ||
TimToady | m: $_ = "abc"; say m/(.)(.)(.)/.roll | 15:37 | |
camelia | rakudo-moar 9b295b: OUTPUT«「b」» | ||
jnthn | Should return another array[int] | ||
pmichaud | colomon: what else would it be? (I'm coming into this discussion late... I'm not sure of the motivation for moving .pick/.roll in the first place.) | ||
smls | why Listy if Iterable already exists? | ||
pmichaud | please tell me there's not already a Listy role. I'm not proposing one. | ||
colomon | pmichaud: Yeah, what smls said: there’s a sort of collision in my head between the notion of Listy and Iterable | 15:38 | |
jnthn | pmichaud: Mostly that yesterday I landed the first bits of native arrays, and the discussion is where code shared between them and List should be placed. | ||
moritz | m: say Hash ~~ Iterable | ||
camelia | rakudo-moar 9b295b: OUTPUT«True» | ||
moritz | m: say Hash ~~ Positional | ||
camelia | rakudo-moar 9b295b: OUTPUT«False» | ||
moritz | as it currently is, Iterable is possibly used for associative stuff too | 15:39 | |
TimToady | m: say Match ~~ Positional | ||
camelia | rakudo-moar 9b295b: OUTPUT«False» | ||
TimToady | m: say Match ~~ Associative | ||
camelia | rakudo-moar 9b295b: OUTPUT«False» | ||
moritz | TimToady: that should probably both the True, no? | ||
TimToady | ya'd think | ||
pmichaud | ISTR there was a reason we ended up having Match be neither Positional nor Associative | ||
jnthn | Me too, but I can't remember what on earth it was... | 15:40 | |
pmichaud | I don't R what that reason was, atm. I'm still trip-lagged from yesterday's championship. | ||
moritz | m: say Match ~~ Iterable | ||
camelia | rakudo-moar 9b295b: OUTPUT«False» | ||
pmichaud | I suspect it had to do with the problems of incorrectly binding Match objects into arguments. | ||
moritz | ah, probably | ||
sub f(@x) {}; f($/); | 15:41 | ||
pmichaud | my sub xyz(%h) { ... }; xyz($match) // or something like that | ||
when/if we make that decision concrete, we should record the justification somewhere. :) | |||
TimToady | that's sort of a coercable distinction, Associative vs Associative() | 15:42 | |
pmichaud | I bet it's in the ir clogs somewhere. | ||
and yes, it may be different now that we have coercers | |||
TimToady | this whole Match object thing is just a pain in the patoot | ||
pmichaud wonders if things that coerce to Bool can be called "socoercers" | |||
TimToady is so glad we didn't go with Highlander Variables generally | 15:43 | ||
timotimo | yay pm | ||
TimToady | pmichaud: er, ow? | ||
pmichaud | jnthn: with respect to @native-int.map(...) : It seems to me your more generic question is "how does one construct a native-int array?" | 15:44 | |
smls | jnthn: Is it not feasible to have the optimizer cut out the boxing/unboxing steps in: my int @new-native-array = @native-array.map({ $_ * 2 }); | ||
pmichaud | I wouldn't expect @anything.map() to return anything but some form of List. | ||
because there's nothing about .map that implies that the types of the returned objects match the type of the invocant | |||
moritz | pmichaud: same here, mostly because map is lazy, and array[int] isn't | ||
timotimo | m: bag "sorcerer".comb (-) bag "socoercer".comb | ||
camelia | ( no output ) | ||
timotimo | damn phone keyboards | 15:45 | |
TimToady | that's one of the reasons we have hypers that *do* guarantee sameness | ||
timotimo | if have to type that all over again | ||
moritz | fwiw the question of how to determine the return value comes up in other places too | ||
specifically what kind of Blob an IO operation (or pack) returns | |||
jnthn | pmichaud: Well, my point was that if you want to get something typed back then the lambda you give to map should indicate type. | 15:46 | |
timotimo | remember hash classify and the other one? | ||
moritz | how can I tell it to return a buf16 instead of a buf8, for exmaple | ||
smls | jnthn: After all, in Perl 5 lists are *always* transient (more of a syntax constuct than a type). | ||
In Perl 6 they were made to a proper type for extra flexibility/power, but couldn't the simple cases be handled similarly by the compiler? | |||
pmichaud | jnthn: I wonder if .map wants to have some sort of a :return-type option. | ||
because the lambda given to map really indicates type of the elements, not type of the list | 15:47 | ||
jnthn | smls: I don't like designs that are inherently slow unless you have a magical optimizer that can do something clever. | ||
TimToady | well, we need a typesafe mapper to implement hyper, so exposing that could be a map variant | ||
Mouq++ just did some work there, I believe | 15:48 | ||
pmichaud | although I suppose that a lambda returning 'int' could be assumed to mean native-int | ||
jnthn | pmichaud: Well, I was suggesting the return type of the lambda could distinguish that. | ||
Right. | |||
Because List implies boxing, and I'm not sure I see that changing. | |||
pmichaud | Oh, I think List could be fixed to not imply boxing. | ||
TimToady | and if we can figure out how to coerce a list of int back to whatever, we can get there | ||
note lowercase 'list' | 15:49 | ||
pmichaud | Seems to me that the ability to have native arrays might affect List (as part of GLR) | ||
jnthn | pmichaud: Well, in previous discussions with TimToady the conclusion I'd drawn was that native array = non-lazy | ||
TimToady | the question, as with the rest of GLR, is when that can be negotiated | ||
smls | jnthn: Isn't that true about much of Perl 6 design though? "Torturing the implementors" and all that. | 15:50 | |
TimToady | some can obviously be negotiated at compile time | ||
but even with ordinary objects, we have to allow that some things have to be negotiated on first call | |||
pmichaud | jnthn: yes, but we're already looking at wanting to refactor List to better handle non-laziness; since it's subsuming Parcel | ||
vendethiel | "highlander variables"? | ||
pmichaud | I wonder if native-array's analogue is more Parcel-like | ||
vendethiel | the ones that "auto-coerce"? | ||
jnthn | pmichaud: The deeper thing going on here is that the REPR of array is *not* P6opaque | 15:51 | |
TimToady | vendethiel: RFC 9 | ||
pmichaud | jnthn: this discussion convinces me that List-as-currently-implemented is too heavyweight | ||
vendethiel | TimToady: thanks :) | 15:52 | |
smls | .oO( List vs list ) |
||
TimToady | pmichaud: oh, you weren't convinced of that yet? :P | ||
pmichaud | I'm more convinced now. | ||
as in, I have an important key that will help with the Parcel severance | |||
jnthn | pmichaud: Perhaps so, but to be clearer: you can't put any object attributes on array, otherwise we can't represent it directly with the VM array REPR. | ||
pmichaud | jnthn: understood. | 15:53 | |
TimToady | I think we at minimum need a way to negotiate a pipeline on first call, and that can optionally optimize itself at compile time when we know enough | ||
jnthn | pmichaud: And then we lose most of the nice performance properties we stand to get. | ||
pmichaud: Which is why array doesn't inherit from List, which is why we ended up with the "where does common stuff live" discussion :) | |||
TimToady | whether we need a mechanism to renegotiate when one of the endpoints learns more, I dunno yet | ||
jnthn | TimToady: I can kinda see that. | 15:54 | |
pmichaud | I'm still not convinced that pipelines are the right way to go. (But I'm not convinced they aren't, either.) | ||
my design-intuition tells me "no". | |||
TimToady | by pipeline I mean nothing more than nested function calls | ||
pmichaud | in that case, "maybe". | ||
TimToady | for strictly lazy, every function call returns precisely one element | ||
vendethiel | TimToady: are there RFCs you'd "recommend" people to read because they've been really insightful to perl6's creation/evolution,btw? that sounds interesting | ||
TimToady | so that can be as fast as possible | 15:55 | |
pmichaud | anyway, intuition says there's a clean answer to that (and to handling native array also) | ||
TimToady | vendethiel: I can give you some info on that | 15:56 | |
pmichaud | TimToady/vendethiel: +1 I'd like to see that list | ||
vendethiel | .oO( or is it that Array ? ) |
||
jnthn | If we are in a position to know "the target of this is assignment into a native array" then I guess we can get something fairly nice in place. | ||
pmichaud | jnthn: ooooh | 15:57 | |
perhaps because if we're not assigning/binding into a native array, it's going to end up boxing | 15:58 | ||
that feels a bit want-ish, but I think it might be managable. | |||
vendethiel | mh, is explicit derefenrece necessary in perl5 because "$foo" doesn't contain the same value as @foo? | ||
jnthn | pmichaud: Yeah, it's about tyring to avoid boxing to some degree, or have boxing that can be eliminated when inlining. | 15:59 | |
pmichaud: The ideal is that "my int @native-array = @another-native-array.map(-> int $a --> int { $a + 1 });" can execute without any boxing. | 16:00 | ||
pmichaud | jnthn: I don't think I agree with that ideal. | ||
well.... | |||
vendethiel | ideone has perl6 but no perl5 Oo | ||
jnthn | pmichaud: In what sense? :) | ||
pmichaud | in the sense of "there's a better way to write that" | 16:01 | |
my int @x = @y >>+>> 1; | |||
jnthn | pmichaud: Yes, *that* one goes much more nicely as a hyper...not every example will :) | ||
pmichaud | jnthn: so, I'd like to see some examples that don't. Those are the ones that light the way to go. | ||
because it sounds to me like we're trying to turn the DWIM knob on .map up waaaaay to high | 16:02 | ||
*too | |||
jnthn | Well, the alternative is that folks wanting to write fast code with native things end up writing it in the C-ish dialect of Perl 6 :) | 16:04 | |
dalek | href="https://perl6.org:">perl6.org: 147f2fb | TimToady++ | source/archive/rfc/rfc-ratings. (2 files): Some notes on how RFCs affected design of Perl 6 |
||
TimToady | vendethiel: ^^ | ||
vendethiel | TimToady++ | ||
pmichaud | jnthn: that's not the only alternative at all... :) | ||
TimToady | to get the coloring, edit with vim and :so vim-ratings.vim | 16:05 | |
er, rfc-ratings.vim | |||
pmichaud | jnthn: that's why I'm wanting to see some "code that wants to be fast" that isn't already better handled by existing constructs | ||
moritz | ok, I have a working patch after all that moves some of the roll implementation into Positional, making array[int] work | 16:06 | |
but from our recent discussion, I kinda think it might be the wrong thing to do | |||
pmichaud | I think it needs more thinking, yes. | ||
moritz | so, should I push to a branch? | 16:07 | |
pmichaud | moving roll into Positional feels very wrong to me. | ||
moritz | or should I try to move it into Iterable? | ||
pmichaud | because roll is something we do on things that have bounds | ||
and neither Positional nor Iterable imply that | |||
moritz | though Iterable also feels wrong | ||
pmichaud | although I suppose it's possible to do .roll on infinite things | 16:08 | |
moritz | List isn't bounded either | ||
and still we do List.roll | |||
pmichaud | yeah, I need to think about it a bit more. | ||
moritz | so our current type system simply ignores the question of whether something is bounded | ||
pmichaud | right, and for efficiency sake we need to figure out how to handle finite things better | 16:09 | |
such as Parcel, and native arrays, and ... | |||
TimToady | and we fall into the P5ish trap of introspect everywhere all the time | ||
pmichaud | moritz: if you can hold this in a branch that would be lovely | ||
TimToady | it's that introspection that wants to get negotiated away | ||
jnthn | pmichaud: I'll have a look at translating some $other-langauge code I have doing that kind of stuff into Perl 6, and see if I actually do come out wanting .grep/.map on native things after all :) | ||
tbrowder | I want to translate one of my simple Perl 5 programs and associated modules to Perl 6. The one of most interest at the moment uses Geo::Ellipsoid, so I plan to add it to the most wanted list (via a pull request). I also will attempt to translate it to Perl 6 and contribute it (I have checked with the author who is on board with my attempt) . Geo::Ellipsoid, in turn, currently depends on more well-known Perl 5 modules: Math::Trig, Sc | ||
pmichaud | jnthn: I think that's the best way to go. I think it will be very illuminating | ||
TimToady | .map on a native can certainl know that only the entire result needs to be boxed, at most | 16:10 | |
moritz | tbrowder: your line was truncated after "Math::Trig. Sc" | ||
masak | tbrowder: you got cut off, at 'Math::Trig, Sc' | ||
TimToady | and that returned box can then deal with further list processing | ||
moritz | masak: my trusted echo :-) | ||
16:11
eli-se joined
|
|||
TimToady | er, well, depending on the return type of the function, of course | 16:11 | |
eli-se | hahaha | ||
pmichaud | TimToady: yeah, that's a promising approach | ||
jnthn | TimToady: Yes, that's kinda my "what does .map on a native int array return" question :) | ||
masak | moritz: yeah, I drew slightly slower this time :P | ||
tbrowder | ...Math::Trig, Scalar::Utils, Test::Simple, and Test::Number::Delta. I have checked the known modules list and have found none of them on the list. Should I add them to the most wanted list, or are one or more actually obsolete now or part of the Perl 6 core? | 16:12 | |
eli-se | jnthn: int array if the return type of the function in int, normal array otherwise! | ||
moritz | tbrowder: what functions from Math::Trig do you need, for example? | ||
tbrowder: most of Scalar::Utils is unnecessary in Perl 6 | |||
jnthn | eli-se: I suggested that as a possible answer earlier, yes ;) | ||
pmichaud | TimToady: in rfc-ratings.txt does the "!" imply "with emphasis" and "with extreme prejudice"? | 16:13 | |
eli-se | Scala does that, although it may be inefficient in a dynamically typed language, since you need all results first. | ||
tbrowder | Um, I haven't gotten that far into it yet, but I can provide that if needed--just take a little effort. | ||
eli-se | And then loop over all results to find the types. | ||
dalek | kudo/richer-positional: ec56951 | moritz++ | src/core/ (2 files): Move .roll into Positional this way, native arrays automatically get a roll method. Needs more discussion about whether this is the right approach. An objection was that Positional does not necessary imply .elems |
||
jnthn | eli-se: But Perl 6 is gradually typed :) | ||
TimToady | pmichaud: it just meant something I might want to talk about, at the time | ||
jnthn | eli-se: So you can declare on the lambda what you're giving back :) | ||
eli-se | :[ | ||
TimToady | the funny one was that we accepted 352 Merge Perl and C#, but have default Main class for scripting. | 16:14 | |
pmichaud | having .map be return-type aware seems to have some promise, even beyond natives... having @something.map( -> $x --> Foo { ... }) be able to return List[Foo] might be worthwhile also. | ||
jnthn | Looping over all results to find types is odd. By then you probably boxed them all :P | ||
pmichaud: Yes, very true :) | 16:15 | ||
TimToady | we do need to think about the typologoy of lists if we're ever to manage typed slurpies | ||
16:15
liztormato joined
|
|||
TimToady | *ology | 16:15 | |
pmichaud | at the same time, it feels to me that @something.map( &lambda, :return-type(MyType[Foo])) is the more correct answer. | 16:16 | |
FROGGS .oO( *isms ) | |||
TimToady | yuck | ||
pmichaud | I mean concept, not syntax. | ||
eli-se | Clojure has into | ||
16:16
liztormato_ joined
|
|||
pmichaud | :into feels nice | 16:16 | |
TimToady | still yuck | 16:17 | |
eli-se | so you can use map with a starting result value | ||
TimToady | at least, get rid of the Foo | ||
eli-se | e.g. (into [] (map f xs)) returns a vector and (into #{1 2 3} (map f xs)) returns a set already populated with 1, 2 and 3. | ||
TimToady | all you need is the container role to instantiate with the result of the function | ||
liztormato_ | To me this feels like an internal attribute like :$BIND | 16:18 | |
pmichaud | what if I wanted to coerce? | ||
liztormato_ | *:into I mean | ||
eli-se | pmichaud: map(&coerce) | ||
pmichaud | eli-se: yes, but sometimes I didn't write &coerce. it feels funny-ish. | 16:19 | |
TimToady | the individual coercions are the mandate of the mapping funciton | ||
*ion | |||
if need be, you just compose two functions | |||
16:19
liztormato left,
liztormato_ is now known as liztormato
|
|||
pmichaud | I still haven't reconciled myself with things like :$BIND... I need to do that. | 16:20 | |
moritz | on an only slightly related note, should List[Int()] DWIM? | 16:21 | |
that is, a list of Ints that coerces on element assignment? | |||
pmichaud | moritz: I think I've somewhat assumed that it does. | 16:22 | |
TimToady | and if so, can we have a listop that goes before the rest of your slurped list that declares teh rest of the list is that type? | ||
(on the calling end) | |||
pmichaud | I'm out of date on coercers, too. I need to catch up on the most recent design decisions there. | ||
TimToady | one assumes one could put Int() *@ints on the formal end | 16:23 | |
16:23
tgt left
|
|||
liztormato will catch up later& | 16:23 | ||
16:24
liztormato left
|
|||
TimToady | but with a List[Int]: form, or so, you could tag the rest of the args as a list of Int, and bind (by name!) to Int *@ints | 16:24 | |
pmichaud | I'll have to bail also, my brane has reached its absorption capacity for this morning. It's still decluttering from this week's robotics contests. | 16:25 | |
perhaps "defragmenting" is the better term :) | |||
TimToady | List[Int] is kinda klunky for that, so the list bit might be factorable out | ||
see ya | |||
moritz | Int[] | 16:27 | |
TimToady | basically a typed slurpy would not consider itself variadic, but would require a single typed list for the rest of the args | ||
and one could formally declare the type of the rest of the args with a slurpy-prep coercion of some sort | |||
some-slurpy-function $a,$b,$c, Int* 1..* | 16:28 | ||
[Tux] | was is the most effective way to check if an array like (1,4..7,19..Inf) has $i in it? defined @x[$i] ? | ||
TimToady | and some such would bind to three positionals and an Int slurpy | ||
vendethiel | o_o | 16:29 | |
TimToady | syntax negotiable, of course | ||
vendethiel wonders what's going on there | |||
tbrowder | Math functions needed are: pi, cos, sin, sqrt, atan2, and abs. All are listed in doc.perl6.org/routine.html so I guess I don't need Math::Trig. | 16:30 | |
TimToady | |Tux|: you seem to be confusing values and indices there | ||
[Tux] | @x.grep($i) | ||
yes I was | 16:31 | ||
TimToady | yes, grep will, of course, illustrate the halting problem nicely there :) | ||
[Tux] | that is what I was afraid of | ||
that is why I ask :) | |||
moritz | tbrowder: correct | ||
TimToady | if you know it's monotic, then maybe .first(* >= $i) | 16:32 | |
16:32
Akagi201 left
|
|||
jnthn | m: say so (1,4..7,19..Inf).lol.first(2) | 16:33 | |
camelia | rakudo-moar 9b295b: OUTPUT«False» | ||
jnthn | m: say so (1,4..7,19..Inf).lol.first(5) | ||
camelia | rakudo-moar 9b295b: OUTPUT«False» | ||
TimToady | if you know you have a finite list of (potentially infinite) ranges, you can just run down the list of ranges and smartmatch against each | ||
jnthn | oh. | ||
m: say so (1,4..7,19..Inf).tree.first(5) | |||
16:33
Akagi201 joined
|
|||
jnthn | bah | 16:33 | |
TimToady | that's backwards | ||
jnthn | away for a bit & | ||
camelia | rakudo-moar 9b295b: OUTPUT«(timeout)» | 16:34 | |
jnthn | Post-GLR, just .first should do it... :) | ||
really away & | |||
vendethiel | TimToady: github.com/perl6/perl6.org/commit/...0c0219R158 "printciple" :P | ||
TimToady | m: say so (1,4..7,19..Inf).tree.first: { 5 ~~ $_ } | 16:35 | |
16:35
muraiki left
|
|||
camelia | rakudo-moar 9b295b: OUTPUT«(timeout)» | 16:35 | |
TimToady | ranges maybe don't itemize the way tree is trying to do, I guess | 16:36 | |
FROGGS | jnthn: I think... it might make sense to leave the digest+jvm bug (my $foo = (42 for ^2)) for post GLR? | ||
TimToady | m: ((1,2),(3,4)).tree.perl | ||
camelia | ( no output ) | ||
TimToady | m: ((1,2),(3,4)).tree.perl.say | ||
camelia | rakudo-moar 9b295b: OUTPUT«(1, 2; 3, 4).item» | ||
TimToady | moritz: btw, a day or two in the backlog you were playing with lols, and apparently missing the semicolons there | 16:37 | |
m: ((1,2),(3,4)).lol.perl.say | |||
camelia | rakudo-moar 9b295b: OUTPUT«(1, 2; 3, 4)» | ||
moritz | m: say ((1,2),(3,4)).lol[0] | ||
camelia | rakudo-moar 9b295b: OUTPUT«1 2» | ||
TimToady | m: ((1,2),(3..5)).lol.perl.say | ||
camelia | rakudo-moar 9b295b: OUTPUT«(1, 2; 3, 4, 5)» | ||
moritz | m: .say for ((1,2),(3,4)).lol | ||
camelia | rakudo-moar 9b295b: OUTPUT«1 23 4» | ||
moritz | oh, seems to work better than I feared | ||
thanks TimToady | 16:38 | ||
TimToady | what's flattening the range there? | ||
m: say (1..5).perl | |||
camelia | rakudo-moar 9b295b: OUTPUT«1..5» | ||
vendethiel | Oo TIL perl5 has an "unimport" construct | ||
TimToady | our unimport is called "your lexical scope ran out" :) | ||
geekosaur | p5 unimport takes advantage of p5 import being an ugly hack | 16:39 | |
TimToady | though we do support the 'no' declaration to some extent | ||
moritz | m: say so (1,4..7,19..Inf).lol.first: { 5 ~~ $_ } | 16:40 | |
camelia | rakudo-moar 9b295b: OUTPUT«True» | ||
vendethiel | "no use;" | ||
moritz | TimToady: it currently looks like .tree is an inferior subset of .lol, or so | ||
TimToady | it used to be we had to use .tree to mean .lol | ||
maybe now that most of the .trees that meant .lol are being caught (are they?) we can fix .tree | 16:41 | ||
m: say so (1,4..7,19..Inf).lol.first: { 20 ~~ $_ } # just checking... | |||
camelia | rakudo-moar 9b295b: OUTPUT«True» | ||
TimToady | \o/ | ||
16:42
kjs_ joined
|
|||
rindolf | what is .lol? | 16:42 | |
moritz | list-of-list | ||
rindolf | Like [0] [0,1] [0,1,2] [0,1,2,3], etc.? | 16:43 | |
And what is "so"? | |||
16:44
anaeem1_ left
|
|||
timotimo | opposite of not | 16:44 | |
16:44
anaeem1 joined
|
|||
moritz | rindolf: faq.perl6.org/#so | 16:44 | |
it's surprising, but we have, like, documentation :-) | 16:45 | ||
rindolf | moritz: ah. | ||
moritz | also doc.perl6.org/so | ||
rindolf | Thanks! | 16:46 | |
So what does .lol do? | |||
moritz | it turns a list of otherwise potentially flattening lists or parcels into a list-of-lists | 16:47 | |
thereby protecting the inner structures from flattening | |||
16:48
daxim left
|
|||
timotimo | and tree makes parcels all the way down or to the level specified | 16:48 | |
moritz | m: say ((1, 2), (3, 4)).tree.perl | 16:49 | |
camelia | rakudo-moar 9b295b: OUTPUT«(1, 2; 3, 4).item» | ||
16:49
anaeem1 left
|
|||
moritz | timotimo: except that it doesn't, right now | 16:49 | |
timotimo | we'll see one the glr is through | 16:50 | |
16:50
anaeem1_ joined
|
|||
TimToady | tree is supposed to apply a mapping function to each node at each level, differentiable by level | 16:50 | |
16:51
mjaggersnagger joined
16:52
smls left
|
|||
TimToady | don't really think there's all that much interaction with GLR though | 16:52 | |
16:52
anaeem1__ joined
|
|||
timotimo | Oh, ok | 16:52 | |
16:52
anaeem1_ left
|
|||
TimToady | we could probably fix .tree right now | 16:52 | |
adu | parsers? | 16:53 | |
TimToady | what about parsers? | ||
moritz | adu: parsers parse. Or at least common wisdom says so. | 16:54 | |
adu | that's what I'm trying to understand | ||
moritz: I'm quite familiar with parsers | |||
TimToady | a more specific question would help ascertain a more specific answer :) | ||
mjaggersnagger | hi | ||
adu | I wrote C::Parser, I should know at least a little bit | ||
TimToady | mjaggersnagger: howdy | ||
mjaggersnagger | :) I have a question :o | ||
TimToady | not yet you don't :P | 16:55 | |
mjaggersnagger | ooo | ||
16:55
Akagi201_ joined
|
|||
TimToady | if you ask it, you will :) | 16:55 | |
mjaggersnagger | haha | ||
well basically | |||
is it mandatory that you need a grammar defined for a language? | |||
like can you not just wing it? and if so, how does it help? | |||
b2gills | how else would you create it? | ||
adu | mjaggersnagger: I think that's called a module | 16:56 | |
TimToady | well, in a sense, a recursive descent parser has no grammar | ||
mjaggersnagger | yeah I've written a parser already | ||
with no like formal grammar define | |||
d | |||
16:56
anaeem1__ left
16:57
anaeem1 joined
|
|||
TimToady | so, for instance, the EXPR method in P6's parser is just a operator precedence parser, and has no formal grammar | 16:57 | |
except as defined operationally by the method | |||
mjaggersnagger | so it's not completely necessary? | ||
eli-se | Will Perl 6 get glob? | ||
adu | mjaggersnagger: oh, so a custom parse method? | ||
TimToady | sure | ||
mjaggersnagger | hmm | ||
vendethiel | eli-se: no :P | ||
eli-se | Will it allow recursion? | ||
vendethiel: :( | |||
vendethiel | wait, the glob() function? | 16:58 | |
eli-se | yeah for finding files | ||
TimToady | well, why not have a glob? | ||
vendethiel | oh, this one | ||
I think dir(:test...) works okay-ish for now | |||
mjaggersnagger | im writing a language for like no reason whatsoever, and I'm stuck at parsing expressions :( | ||
TimToady | mjaggersnagger: it helps to have reasons... | ||
adu | mjaggersnagger: are you using the builtin EXPR? | ||
mjaggersnagger | and when I ask, people say I need a grammar defined. If I already know the kind of syntax of my grammar, does that mean that I kind of have a grammar defined | 16:59 | |
adu | mjaggersnagger: or from scratch? | ||
mjaggersnagger | I just don't really know it? | ||
16:59
Akagi201 left
|
|||
mjaggersnagger | built in expr? | 16:59 | |
I'm writing it in C from scratch | |||
TimToady | if you're writing something just as a form of abstract expressionism, I recommend acrylic or oil paints instead... | ||
moritz | mjaggersnagger: and here I thought your question was about parsing with Perl 6, this being #perl6 and all :-) | ||
mjaggersnagger | hahaha | 17:00 | |
I bookmarked this place from r/compiler | |||
s | |||
adu | mjaggersnagger: then you need to learn about LR | ||
moritz | mjaggersnagger: if you want to write a parser in C, I'd very much recommend using a parser library, something like jeffreykegler.github.io/Marpa-web-site/ maybe | ||
mjaggersnagger | sorry for being in the wrong place :o | ||
adu | mjaggersnagger: en.wikipedia.org/wiki/Shift-reduce_parser | 17:01 | |
17:01
anaeem1 left
|
|||
mjaggersnagger | ooo but I've already written a lot of the parser | 17:01 | |
moritz | because just parsing from "first principles" in C simply is too much pain | ||
mjaggersnagger | it's recursive descent and works, except for my hacky expressions parsing | ||
17:02
daxim joined
|
|||
TimToady | to the first approximation, P6's compiler is recursive descent with a layer of operator precedence in the middle | 17:02 | |
mjaggersnagger | yeah I was going to try operator precedence parsing | ||
TimToady | well, it can be many layers, but even so | ||
mjaggersnagger | but it basically generates C or transcompiles or whatever | ||
so I can literally just kinda cut the expression from the source and paste it in the compiled source, so to speak | |||
hasn't worked out so well, haha | 17:03 | ||
TimToady | you still need to recognize the end of the expression correctly | ||
mjaggersnagger | yeah that's the issue, it's consuming the thing that shows when an expression ends | ||
TimToady | because you can't "kinda cut", you either do, or you don't, cut | ||
and it's either right or wrong | 17:04 | ||
mjaggersnagger | I suppose the issue is that it doesn't know where an expression ends, thats why its not cutting the expression out | ||
TimToady | when you write parsers, and cheat, you always get caught eventually | ||
mjaggersnagger | lol, very true | ||
I had this hacky rule that if the current token is not an operator and the next token isnt an operator, it probably isn't an expression | |||
TimToady | Perl 5 cheated many ways, and got caught frequently, so it's a viable approach :) | 17:05 | |
mjaggersnagger | so it'd stop eating tokens | ||
TimToady | but we try very hard to do things in a non-cheating way for Perl 6 | ||
mjaggersnagger | learn from your mistakes, eh? | ||
TimToady | or at least give the appearance | ||
mjaggersnagger | haha | ||
my first compiler, so I still have a lot to learn | 17:06 | ||
TimToady | don't we all | ||
mjaggersnagger | deeeep | ||
17:07
anaeem1 joined
|
|||
mjaggersnagger | kinda weird that I've never actually written any Perl before | 17:07 | |
and I'm in an IRC about perl | |||
adu | mjaggersnagger: operator precedence is a PITA without LR | ||
17:08
sqirrel joined
|
|||
TimToady | well, Perl folks tend to be pathologically helpful | 17:08 | |
mjaggersnagger | I think it's left to right, my theory isn't too strong | ||
TimToady | except when they're not | ||
adu: how so? | 17:09 | ||
mjaggersnagger | I should try op perc parsing, but I'm not sure how to settle on the precedence for each operator :o | 17:10 | |
prec* | |||
TimToady | imagine the common cases, and how to minimize the number of parentheses needed, and especially of the surprising ones. | 17:11 | |
but they're no magical bullet | |||
there will be cases that surprise people always | |||
in Perl 6 the most frequent surprise is needing parens on (^10).stuff | 17:12 | ||
mjaggersnagger | hmm | 17:13 | |
adu | TimToady: how would you do it? | ||
TimToady | thing is, you could fix that, but then someone who wants ^(10.stuff) would be surprised | ||
how would I do what? | |||
adu | TimToady: handle operator precedence and operator associativity without LR parsing methods? | 17:14 | |
TimToady | the way Perl 6 does | ||
moritz | "magically" | ||
"perly" | |||
it's really the same thing :-) | |||
adu | with backtracking? | 17:15 | |
TimToady | why would you ever need backtracking on an op prec parser? | ||
(assuming one-token lookahead is not the definition of LR here...) | |||
17:16
eli-se left
|
|||
TimToady | you're certainly allowed to look ahead to see if there's a terminator, or an infix at some precedence | 17:16 | |
adu | for example, if operator and operand parsers are not mutually exclusive | ||
TimToady | example? | 17:17 | |
adu | "minus a mod b factorial" for example | ||
TimToady | well, but they are exclusive in P6, which seems like a good thing | 17:18 | |
adu | presumably, would parse as (-a) % (b!) | 17:19 | |
TimToady | the P6 parser always knows whether it's expecitng a term or an infix | ||
adu | right, but you would need something other than backtracking to help parse that | ||
TimToady | our term parser is recursive descent, is all | 17:20 | |
so the only thing EXPR has to worry about on affixes is their order, in cases like -a! | 17:21 | ||
or ^10.foo | |||
mjaggersnagger | guuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuys | 17:22 | |
how do I tell if my parser is LL or LR? I honestly don't know myself :o | |||
vendethiel | which side is it going from? :P | 17:23 | |
mjaggersnagger | well its like reading some text | ||
top to bottom left to right | |||
is that LR? | 17:24 | ||
TimToady | no, see en.wikipedia.org/wiki/LR_parser | ||
adu | mjaggersnagger: it doesn't matter which direction it's read | 17:25 | |
mjaggersnagger: 9/10 you're dealing with LR | |||
mjaggersnagger | ooo oke | ||
:D | |||
thanks for helping me out everyone :D | |||
i gotta go now, I might check back soon | |||
ciao | 17:26 | ||
TimToady | o/ | ||
17:26
mjaggersnagger left
17:28
Celelibi left
|
|||
[Tux] | I have a hard tom writing the p6 form of «my ($left, $right) = $string.split("-")» | 17:31 | |
vendethiel | that seems correct to me | ||
17:33
Celelibi joined
|
|||
FROGGS | m: my ($left, $right) = "foo-bar-baz".split("-"); say $left | 17:33 | |
camelia | rakudo-moar 9b295b: OUTPUT«foo» | ||
FROGGS | m: my ($left, $right) = "foo-bar-baz".split("-"); say $right | ||
camelia | rakudo-moar 9b295b: OUTPUT«bar» | ||
FROGGS | m: my ($left, $right) = "foo-bar-baz".split("-", 2); say $right | ||
camelia | rakudo-moar 9b295b: OUTPUT«bar-baz» | ||
FROGGS | [Tux]: ^^ | 17:34 | |
TimToady | P5 actually optimizes that to .split("-",3) | 17:35 | |
so it doesn't do a bunch of splitting, just to throw the rest of the list away | |||
I suppose in P6 that could just be lazy | |||
mst | certainly the p5 implementation of that optimisation is not something one would particularly want to copy :) | ||
TimToady | ss/of that optimisation // :P | 17:36 | |
but it certain does to various sneaky clever tricks like that | 17:37 | ||
seems to be the specs require that a list that is too long complain there unless you end the list with * | |||
*speculations | 17:38 | ||
S03:2991 | 17:39 | ||
synopsebot | Link: design.perl6.org/S03.html#line_2991 | ||
TimToady | m: my ($left, $right) := "foo-bar-baz".split("-"); say $right | 17:41 | |
camelia | rakudo-moar 9b295b: OUTPUT«Too many positionals passed; expected 2 arguments but got 3 in block <unit> at /tmp/CIRhYO5JJG:1» | ||
TimToady | m: my ($left, $right, *) := "foo-bar-baz".split("-"); say $right | ||
camelia | rakudo-moar 9b295b: OUTPUT«5===SORRY!5=== Error while compiling /tmp/5mHltW5xb8Malformed parameterat /tmp/5mHltW5xb8:1------> 3my ($left, $right, *7⏏5) := "foo-bar-baz".split("-"); say $righ expecting any of: formal parameter» | ||
17:41
atta left
|
|||
TimToady | m: my ($left, $right, *@) := "foo-bar-baz".split("-"); say $right | 17:41 | |
17:41
atta joined
|
|||
camelia | rakudo-moar 9b295b: OUTPUT«bar» | 17:41 | |
TimToady | so maybe assignment should be a little more like binding there... | ||
17:44
adu left
17:45
eli-se joined,
itz_ joined,
itz left
17:46
telex left
17:48
telex joined
17:49
sqirrel left
|
|||
TimToady | Mouq: the problem with swapping the defaults on shapes vs subsigs is that as an rvalue in ordinary code, &foo($,$) would cause a call of foo, so the syntax there is currently &foo:($,$) | 17:51 | |
so one would like to keep the same syntax for &foo:($,$) in the signature to indicate part of the type of foo, as distinct from the unpacking parens | 17:52 | ||
it would be lovely if there were a way that &foo($,$) could consistently be a full sub declaration, but not at the expense of our current deref system | 17:53 | ||
eli-se | what is $,$? | 17:54 | |
TimToady | maybe &foo(...) could be a special form, but that's also ucky | ||
eli-se | a variable named ,$ with a $ sigil? :P | ||
moritz | eli-se: a list of two anonymous variables | ||
eli-se | :O | ||
TimToady | or in a signature, two scalar args that are not bound | ||
17:55
Ugator left
|
|||
TimToady | think _ in Prolog and such | 17:55 | |
moritz | does anybody have a monitoring system that could send me an email if the load on hack goes too high? | ||
TimToady | so we're talking about a function named foo that we know takes two scalar positionals | ||
moritz | I'd like to be able to log in and investigate before it becomes unresponsive | ||
eli-se | moritz: If you host on Rackspace then there's one. I also used Cacti but I don't know whether it can email automatically. | 17:57 | |
17:57
BenGoldberg left
|
|||
TimToady | put a temp sensor on the fan? :) | 17:58 | |
eli-se | Otherwise, it's simple to implement. | ||
moritz | eli-se: it's not Rackspace | ||
eli-se: and last I looked, cacti was more of an aggregation than a monitoring system | 17:59 | ||
17:59
kjs_ left,
tbrowder left
|
|||
eli-se | while true; do if [ load > n ]; then email; fi; done :P | 17:59 | |
moritz | and I know it can be built; I just don't have a mail server running on any of my always-on hosts | ||
eli-se: assuming there's a mailer running | |||
eli-se | yeah | ||
moritz | which is why I'm asking for somebody who already has a monitoring system running | ||
TimToady | just send a UDP packet :) | ||
moritz sighs | 18:00 | ||
eli-se | or delete the website; you'll notice soon enough | ||
TimToady actually does a lot with UDP packets inside his house | |||
Woodi | hi everyone :) | 18:01 | |
moritz: "systems" usualy include web interface... but also have sensors that could be reused | |||
moritz | Woodi: thank you the unnecessary lecture on "systems" | 18:02 | |
Woodi | moritz: I used "mon" years ago, and later hear about "nagios" | ||
moritz | Woodi: that's not what I was asking for | ||
eli-se | hire someone to continuously cat /proc/loadavg | 18:04 | |
18:04
molaf_ left
|
|||
vendethiel | *g* | 18:04 | |
moritz | this channel is becoming more and more like p6l | 18:05 | |
bartolin | moritz: I could help with that. I've got a nagios instance running on a virtual server | ||
eli-se | I'd take that job, automate it and then make lots of money. | 18:06 | |
moritz | bartolin: that would be great. What do I have to do to make it happen? | ||
vendethiel | moritz: p6l? | ||
perl6-language mailing list? | |||
moritz | vendethiel: the very same | 18:07 | |
bartolin | moritz: you'd need to run nagios-nrep-server locally and allow access from my ip | ||
hahainternet | moritz: what's up | ||
TimToady | that's what he's trying to figure out :) | ||
hahainternet | ah you want a monitoring system that is open and accessible | ||
moritz | vendethiel: where asking about the naming of a certain method brought up suggestions for a major rewamp of the whole object system | ||
hahainternet | sorry i can't do that :( | ||
jnthn | FROGGS: Yes, agree leave the digest bug until post-GLR if it's turning out to be non-obvious. | ||
vendethiel | moritz: got any link for me :P? | 18:08 | |
moritz | bartolin: installing now | ||
FROGGS | jnthn: it would probably mean I have to understand iterators or something... | 18:11 | |
masak | TimToady++ # github.com/perl6/perl6.org/commit/147f2fbceb | 18:12 | |
18:12
eli-se left
|
|||
TimToady | it needs a modeline to automatically apply the colorings somehow | 18:13 | |
18:14
eli-se joined
|
|||
TimToady | if such a thing is possible | 18:14 | |
of course, I'm using the colorings from murphy, so maybe this is the wrong approach entirely... | 18:15 | ||
but the letters are supposed to pun to the color names | |||
18:20
vendethiel left
18:27
ash_gti joined
|
|||
ash_gti | github.com/github/linguist/pull/2229 was merged into github/linguist so (perl6|nqp) should start having some basic syntax support on github, I am working on more comprhensive matchers though, like for instance, method names and variables are only the simplest cases | 18:45 | |
18:46
cognominal joined
18:51
bayprogrammer joined
18:53
kjs_ joined,
eli-se left
|
|||
flussence | as far as monitoring load goes, having the system you're checking for signs of life responsible for sending the email when it falls over is probably not the best idea... | 18:54 | |
TimToady | .oO(dead man's switch) |
||
moritz | flussence: aye; bartolin++ kindly volunteered a nagios instance he runs on a different host | 18:55 | |
flussence | bartolin++ :) | ||
18:56
kaare_ joined
18:57
eli-se joined
|
|||
flussence | (I made the same mistake myself for a while: having a remote server try to email my home server to tell it when dyndns needs kicking...) | 18:58 | |
18:59
zakharyas left
|
|||
TimToady | dinner & | 19:00 | |
19:02
vendethiel joined,
LonelyGM joined
19:06
LonelyGM left
|
|||
moritz | it's fascinating to see how many of those RFCs dealt with lvalue subs | 19:08 | |
5, actually | 19:10 | ||
19:10
perl6_newbee left
19:20
zakharyas joined
19:29
dpuu left
19:30
J-L left
19:32
LonelyGM joined
|
|||
LonelyGM | Hey everyone | 19:34 | |
vendethiel | o/ | 19:36 | |
19:38
zakharyas left
19:39
zakharyas joined
19:42
eli-se left
|
|||
LonelyGM | I'm live with Larry from SoulFood Budapest getting some ribs :) | 19:45 | |
vendethiel | nice :D | ||
19:48
grondilu left
19:49
eli-se joined
19:50
LonelyGM left
|
|||
timotimo | bon appetit | 19:52 | |
moritz | why did I read "getting some rjbs"? :-) | 19:58 | |
FROGGS | moritz: I thought the same :o) | 19:59 | |
moritz | FROGGS: good, I'm not the only one who's insane :-) | 20:00 | |
mst | moritz: because when it comes to innuendos you have an overactive gag reflex | 20:03 | |
masak | :P | 20:05 | |
20:06
LonelyGM joined
20:11
eli-se left
20:13
bayprogrammer left
20:14
ash_gti left,
Vlavv_ left
|
|||
flussence figures out where the sound's hiding in those fosdem videos, and gets to watching them | 20:16 | ||
20:16
LonelyGM left
|
|||
timotimo | i want to see the froggs talk :( | 20:16 | |
vendethiel | flussence: tell us! | ||
20:17
LonelyGM joined
|
|||
flussence | adding about 20-30dB to the audio seems to work... | 20:17 | |
20:17
Vlavv_ joined
20:18
darutoko left
|
|||
flussence | (I've run them through replaygain stuff, and it tells me peak +24.45dB for jnthn's video and +33.03dB for tadzik's video) | 20:18 | |
FROGGS | timotimo: :/ | 20:20 | |
LonelyGM | :/ | ||
flussence | (I haven't got to tadzik's one yet though, it might turn out to be static with those levels...) | 20:21 | |
LonelyGM | 15Is creating a working Perl 6 compiler harder than creating a compiler for any of the above languages? | ||
I mean any other :) | 20:22 | ||
20:22
japhb left
20:23
japhb joined
|
|||
moritz | LonelyGM: it's considerably harder than many for many other languages | 20:23 | |
LonelyGM | And what do you think what is the main reason behind it? | 20:25 | |
moritz | LonelyGM: I should blog about that :-) | ||
20:26
grondilu joined
|
|||
LonelyGM | moritz: you have your first subscriber ;) | 20:26 | |
vendethiel | oooh, could it be possible to write pod blocks just before a function to have executable specs? | ||
moritz | some aspects: mutable grammar, gradual typing, sophisticated OO system | ||
then the exploratory nature of the project | 20:27 | ||
our MOP | |||
grondilu | Hello. I was reading stuff about Monte-Carlo methods and how they can be seen as a way to perform numerical integration. So I look at an example to test in rosettacode.org/wiki/Numerical_inte...on#Perl_6, and pick x**3 from 0 to 1. Then I write: .say for ([\+] rand**3 xx *) Z/ 1 .. *, and I was happy with it, but then I notice it is not stable in terms of memory usage. Shouldn't the for loop | 20:28 | |
empty the array as it is consummed? | |||
20:31
zakharyas left
|
|||
moritz | LonelyGM: watch perlgeek.de/blog-en/ for updates :-) | 20:32 | |
LonelyGM | moritz: wow dankeschön | ||
grondilu | on the other hand I notice that even: | 20:35 | |
my @a := ([\+] rand ** 3 xx *) Z/ 1 .. *; loop { say @a.shift }' | |||
is not memory stable. I guess I must be missing something. | |||
moritz | grondilu: why would you expect it to be stable in memory? | ||
grondilu: it produces objects that are GCed whenever there is a GC run | |||
20:36
eli-se joined
|
|||
moritz | so basically any Perl 6 program at all that allocates objects somewhere isn't memory stable | 20:36 | |
20:36
LonelyGM left
|
|||
grondilu | just to be clear : by memory stable I mean "RAM usage does not keep increasing" | 20:37 | |
moritz | oh | ||
well, it should go down too occasionally | |||
grondilu | I'm running the program and watch it with htop | ||
moritz | if not, it's most likely a bug | ||
grondilu | I'll keep it running and see how high it gets. | 20:38 | |
so far I'm at 35% RAM, still increasing. | 20:42 | ||
grondilu stops it as it really does not seem to be willing to stop | 20:44 | ||
grondilu tries a simpler example : .say for [+] rand xx * and notices its RAM usage also steadily increases. | 20:45 | ||
20:46
lichtkind left
|
|||
grondilu tries the even simpler '.say for rand xx *' and notices again an increasing RAM usage. He thinks that's LTA | 20:47 | ||
20:50
diana_olhovik_ left
20:51
diana_olhovik_ joined
20:53
rindolf left
|
|||
grondilu notices that '.say for 1..*' also has its RAM usage fly away. That seems dumb if you ask him. | 20:53 | ||
20:54
eli-se left,
japhb left
20:55
japhb joined
|
|||
bartolin | it doesn't even need the .say, does it? 'for 1..* { }' | 20:55 | |
grondilu | yeah but I'm not sure the optimizer would not do something to an empty loop. | 20:56 | |
like turning it into loop { } or something. | 20:57 | ||
bartolin | ahh, I see | ||
grondilu | (also I like to display stuff to see what's going on) | 20:58 | |
bartolin | well, looking at the ram usage, it isn't optimized to 'loop { }' :-/ | 20:59 | |
21:02
lichtkind joined
|
|||
Mouq | moritz: Hah, good tip. Thanks :) | 21:03 | |
I'm still catching up on backlog, but it seems like a lot of the GLR issues stem from the intentional conflation of lazy and not-lazy. I think it might be a better direction if we seperated these things in a way that they were both as easy to use, but the programmer always knew which was which. | 21:04 | ||
At the same time I'm not sure that's a very Perlish approach | 21:05 | ||
itz_ | I just had t/spec/S09-typed-arrays/native.t using much memory and so slow | 21:06 | |
probably a work-in-progress :) | |||
Mouq | Also, very tangential, when I implemented .tree I had it apply to the outermost list (which is why ((1,2),(3,4)).tree ends up as (1, 2; 3, 4).item). I'm thinking now that that's incorrect behavior | 21:09 | |
itz_: Latest Rakudo+NQP+Moar? | |||
itz_ | Mouq: as built via rakudobrew | ||
Mouq | Ah… no clue :P But that is something that was added very recently. What are you running on? | 21:11 | |
itz_ | this was a NetBSD VM .. just trying linux | ||
21:13
beastd joined
|
|||
Mouq | grondilu: I think that's an established pre-GLR fail. Definitely LTA that we accumulate the elements of the iterator there (at least I'm pretty sure that's what's going on) | 21:14 | |
21:15
BenGoldberg joined
|
|||
Mouq | itz_: After test 94 appears to hang? That's what I'm getting on OS X | 21:16 | |
Though I'm not on NQP- and MoarVM-HEAD yet | 21:18 | ||
flussence | aw, the video of tadzik's talk was working up to 12 minutes in then the sound died completely :( | ||
itz_ | I was getting it after the first test of S09-typed-arrays/native.t but the system had little VM | 21:19 | |
21:19
gfldex joined
|
|||
itz_ | in the sense of virtual memory inside a qemu instance | 21:20 | |
21:21
LonelyGM joined
|
|||
jnthn | itz_: Odd, here that tests runs in 1.1s. | 21:22 | |
*test | 21:23 | ||
jnthn builds latest just in case | |||
Nope, still good for me on latest. | 21:24 | ||
LonelyGM | For loops dont consumes arrays do they | ||
moritz | github.com/moritz/perlgeek.de/blob...y-hard.txt blog post draft (for LonelyGM, among others :-) | 21:26 | |
feedback welcome | |||
LonelyGM | Thx :)) | ||
Gonna check when i get home, btw I think Larry is gonna be around soon ;) | 21:27 | ||
vendethiel | moritz++ | 21:28 | |
21:29
xfix left
21:30
LonelyGM left
|
|||
vendethiel | moritz: "lated bound" | 21:30 | |
grondilu | Mouq: pre-GLR fail. OK, noted. Looking forward to this GLR thing. | ||
Mouq | Oh, no the S09-typed-arrays/native.t runs fine. I had updated everything except Rakudo itself :B | 21:32 | |
moritz++ | |||
grondilu: Same :) | |||
Mouq & | |||
21:32
Rounin left
21:33
LonelyGM joined
|
|||
moritz | vendethiel: fixed, thanks | 21:34 | |
itz_ | jnthnL works fine on linux .. maybe some oddity of the platform | ||
I will try again | |||
21:36
LonelyGM left
|
|||
itz_ | running that test on its own on NetBSD I see the same hang after 94 as Mouq on OS X | 21:37 | |
21:41
raiph left
|
|||
TimToady is around soon :) | 21:43 | ||
itz_ | hmmm I'll try deleting everything | ||
21:48
lichtkind_ joined
|
|||
[Tux] | m: "19-*" ~~ m/^ (<[0..9]>+)["-"[(<[0..9]>+)||("*")]]? /;$0.say | 21:49 | |
camelia | rakudo-moar 9b295b: OUTPUT«「19」» | ||
[Tux] | m: "19-*" ~~ m/^ (<[0..9]>+)["-"[(<[0..9]>+)||("*")]]? /;$0.perl.say | ||
camelia | rakudo-moar 9b295b: OUTPUT«Match.new(orig => "19-*", from => 0, to => 2, ast => Any, list => ().list, hash => EnumMap.new())» | ||
lizmat | jnthn: looking at array.pop/shift: is the die there because we return int, so that a fail will die for the wrong reason ? | 21:50 | |
[Tux] | how do I get 19 (not the Match) out of the match? There is no .value or something like that | ||
21:51
kjs_ left
|
|||
TimToady | moritz: looks good | 21:51 | |
jnthn | lizmat: Correct | ||
moritz | TimToady: thanks | 21:52 | |
jnthn | lizmat: It seemed like the sensible thing to do | 21:53 | |
lizmat | and I guess the return type is necessary to avoid boxing atm ? | ||
21:53
lichtkind left
21:54
lichtkind_ left
|
|||
jnthn | lizmat: Well, it does, but that is also the case because there's a good chance you may assign the value into a native int also | 21:55 | |
m: sub foo() { fail "omg" }; my int $x = foo(); | |||
camelia | rakudo-moar 9b295b: OUTPUT«This type cannot unbox to a native integer in block <unit> at /tmp/Z1X2vkmavu:1» | ||
jnthn | And that is not so helpful to get :) | ||
Granted we'll eventually s/This type/Failure/ | |||
lizmat | is there a way to get at the value that cannot be unboxed to a native int? | 21:56 | |
if so, then maybe we need to make that exception smarter ? | |||
raydiak | m: "19-*" ~~ m/^ (<[0..9]>+)["-"[(<[0..9]>+)||("*")]]? /;$0.Str.say # [Tux] | ||
camelia | rakudo-moar 9b295b: OUTPUT«19» | ||
lizmat | jnthn: aka, throw the Failure instead of the unbox failure | ||
jnthn | That's quite a kettle of fish. | 21:57 | |
lizmat | ok, was just a thought | 21:58 | |
jnthn | Might be do-able | 21:59 | |
But...hmm. | |||
lizmat | then we wouldn't have to special case Failure in type checking | ||
jnthn | Natives generally can't store undefineds, though. | ||
lizmat | I'm not asking for that, just a better error message when it can't :-) | 22:00 | |
vendethiel | m: use less memory; | ||
jnthn | *nod* | ||
camelia | rakudo-moar 9b295b: OUTPUT«===SORRY!===Cannot invoke this object (REPR: Null, cs = 0)» | ||
lizmat | specially when the problem is storing an error message | ||
vendethiel | nice. | ||
this was the most random crash I ever encountered :D | 22:01 | ||
lizmat | m: useless memory | ||
camelia | rakudo-moar 9b295b: OUTPUT«5===SORRY!5=== Error while compiling /tmp/NlrfGn9a7mUndeclared routines: memory used at line 1 useless used at line 1» | ||
lizmat | :-) | ||
itz_ | S09-typed-arrays/native.t is fine .. I assume rakudobrew got confused | ||
jnthn | vendethiel: Think I saw that one in RT already, though less amusingly stated. :) | ||
vendethiel | Literally just going through github.com/perl6/perl6.org/commit/147f2fbceb, I saw "use less" in there, wanted to try it... Null! | ||
22:02
LonelyGM joined
22:06
LonelyGM left
22:08
anaeem1 left,
anaeem1__ joined
22:09
sqirrel joined
22:11
petercommand left
22:12
petercommand joined
22:24
LonelyGM joined
22:28
LonelyGM left
|
|||
dalek | kudo/nom: 1ab902e | lizmat++ | src/core/Exception.pm: Add X::Cannot::Infinite|Empty exceptions |
22:36 | |
kudo/nom: 400a7e3 | lizmat++ | src/core/ (4 files): Use typed exceptions for push/unshift/pop/shift |
|||
lizmat | m: 1 ... () # test for this is now broken, will look at tomorrow | 22:37 | |
camelia | rakudo-moar 9b295b: OUTPUT«Unhandled exception: Element shifted from empty list at <unknown>:1 (/home/camelia/rakudo-inst-1/languages/perl6/runtime/CORE.setting.moarvm:throw:4294967295) from src/gen/m-CORE.setting:15694 (/home/camelia/rakudo-inst-1/languages/perl6/runtime/…» | ||
lizmat | sleep& | ||
22:42
telex left
22:48
LonelyGM joined
|
|||
dalek | kudo-star-daily: 8d95584 | coke++ | log/ (9 files): today (automated commit) |
22:49 | |
rl6-roast-data: 22075ad | coke++ | / (9 files): today (automated commit) |
|||
22:49
telex joined
22:54
LonelyGM left
22:55
telex left,
sqirrel left
22:56
diana_olhovik_ left,
LonelyGM joined,
telex joined,
cognominal left
|
|||
masak | 'night, #perl6 | 22:58 | |
jnthn | o/ masak | ||
23:01
LonelyGM left,
telex left
23:08
telex joined
23:09
Akagi201_ left
23:10
Ven joined,
Akagi201 joined
23:14
telex left
23:16
telex joined
23:20
rurban left
23:21
LonelyGM joined
23:25
LonelyGM left,
Ven left
23:44
anaeem1__ left,
anaeem1 joined
23:48
anaeem1_ joined
23:49
anaeem1 left
23:52
anaeem1_ left
23:57
mr-foobar joined
|