»ö« 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«4␤4␤(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 args␤args␤»
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|86540368␤Array|86540368␤True␤»
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|85625296␤Array|85625296␤False␤»
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|79088896␤Array|79088896␤False␤»
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/H8Qn8lOmkT␤Variable '$g' is not declared␤at /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|80771744␤Array|80771744␤True␤»
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␤$g␤False␤»
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␤$f␤True␤»
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␤$f␤True␤»
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..127␤15␤»
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_5U␤Variable '@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 2␤3 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/5mHltW5xb8␤Malformed parameter␤at /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/NlrfGn9a7m␤Undeclared 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