»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
dalek rl6-roast-data: 3301233 | coke++ | / (2 files):
today (automated commit)
00:07
rl6-roast-data: bbb17a8 | coke++ | / (2 files):
today (automated commit)
lichtkind good night 00:44
diakopter o/
lichtkind good night 01:00
:)
japhb_ A performance weirdness in Rakudo: 'for ^100 X ^100 -> $i, $j { $i + $j }' takes >56x as long as 'for ^100 -> $i { for ^100 -> $j { $i + $j } }' (In niecza, the difference is around 1.45x.) 01:25
jnthn: ^^
diakopter japhb_: what about for ^10000 in the outside and nothing on the inside 01:26
wait, what's X again 01:27
dalek rl6-bench: 99da16f | (Geoffrey Broadwell)++ | bench:
Pull after fetching; for now, this DWIM, but will probably need to be readdressed later. Also, simply splitting into loops is not trouncing Rakudo bug #115390. :-(
rl6-bench: 846839e | (Geoffrey Broadwell)++ | microbenchmarks.pl:
Add more microbenchmarks, this time for multiple ways to visit all indices for a 2D array
japhb diakopter, it's not so much X again as not looping over multiple indices. 01:28
Though if you're curious about just hitting the loop body that many times ... 01:29
diakopter what's X again
permute?
japhb_ Oh, sorry, I thought you said "that's X again" :-) 01:30
cartesian (AKA cross) product
time perl6 -e 'for ^100 X ^100 -> $i, $j { }' ==> ~20s 01:31
time perl6 -e 'for ^10000 -> $i { }' ==> ~1s
diakopter _._.
r: my @a = ^100; for (@a X @a) -> $i, $j { }; say 'alive' 01:36
p6eval rakudo 53daef: OUTPUT«alive␤» 01:36
diakopter japhb_: what's that on your machine
japhb_ ~14s 01:37
diakopter hm 01:38
diakopter the compiler could detect the constant-ness of the sequence and inline a loop 01:41
japhb The thing is, it really doesn't seem like X should be *that* much slower than just a double loop. 01:43
japhb_ (And in niecza, it's really not.) 01:44
japhb diakopter, also, circling back on the concat v. push/join question: push/join is much faster in niecza, and much slower in Rakudo. 01:52
diakopter :S 01:53
japhb Yeah, don't I know it.
sorear #116026 is kind of sad 02:26
diakopter the say line? 02:27
or everything? :)
sorear no, the "I don't know about Str.flip" part and the "I'm patching one implementation when I really want to patch the spec" part
diakopter sees subname(|) for the first time 02:30
colomon sorear: aye 02:56
japhb How do you set the maximum recursion depth in NQP (and Rakudo and Niecza, for that matter), and what are the default values? 04:41
japhb NQP fails man-or-boy-test 10 (and passes 9) because of a low maximum recursion depth 04:42
sorear niecza does not have a maximum recursion depth; I keep meaning to fix this 04:44
dalek rl6-bench: 7cf00e5 | (Geoffrey Broadwell)++ | timeall:
Minor whitespace tweak to ease visual comparison
rl6-bench: ee77445 | (Geoffrey Broadwell)++ | / (4 files):
Add rc-man-or-boy-test
japhb sorear, Ah, interesting
sorear japhb: infinite recursion on niecza will allocate activation frames continuously until all ram and swap is used up 04:45
a "deep recursion" error would be much more user-friendly 04:46
japhb Sure, of course
sorear I think you can do pir::getinterp__p().some_method(100000) 04:47
but I forget the details
japhb FWIW, man-or-boy 9, ignoring startup: nqp: .112s/1.000x rakudo: .267s/2.380x niecza: 1.055s/9.411x
(Using the version of the rc-man-or-boy-test files that I just committed)
japhb wanders off for a while ... will backlog 04:48
FROGGS__ morning 08:03
dalek ast: ac01495 | moritz++ | integration/99problems- (3 files):
correct some tests in light of lazy "for"
08:14
rindolf Hi all. 08:16
moritz hi rindolf.
FROGGS hi rindolf
rindolf moritz, FROGGS : what's up?
FROGGS well, coffee and a bit $work, thats all 08:17
moritz work, and sink context 08:20
jnthn morning, #perl6 08:21
FROGGS morning jnthn
jnthn Snow. We haz it. :)
FROGGS we have it for days... already built a snowman with my kids 08:22
moritz yesterday we went sledging with $daughter for the first time
jnthn :D
FROGGS 'twas a shame that we had no carrot :/ 08:23
jnthn Sledging...that was a fun thing to do as a kid :)
moritz Ronja quite liked it :-) 08:24
jnthn hm, that "make uniq faster" patch also makes it unlazy... 08:25
FROGGS well, it's still fun
moritz jnthn: aye 08:26
jnthn Though I suspect it can be made faster while still retainign laziness
moritz jnthn: though maybe using grep instead of gather/take would both speed it up and keep it lazy
jnthn also...it should be using an object hash
tadzik 0925 jnthn | hm, that "make uniq faster" patch also makes it unlazy...
0925 FROGGS | well, it's still fun
heh
jnthn :D
tadzik good morning, #perl6 :)
moritz \o tadzik
jnthn hi tadzik
tadzik Finally, Monday!
-- said no one ever
jnthn Worse, at this time of year it's dark outside when you're meant to get up 08:27
tadzik yeah, the worst part of the year, when you only see the sun through the office window 08:28
FROGGS morning tadzik
tadzik waking up, dark. Getting back home, dark
hi FROGGS
FROGGS ya, dark-- 08:29
sorear morning folks 08:29
FROGGS morning sorear
wow, getting full here
sorear is somebody going to respond to #116026? it's too depressing for me 08:30
FROGGS: full in what sense?
FROGGS gets some more chairs
many ppl
sorear #perl6?
jnthn sorear: Hey, don't flip out... :P
FROGGS many talking ppl to be more specific
jnthn sorear: I will this evening if nobody beats me to it.
moritz sorear: I've already replied, and rejected the ticket d 08:31
jnthn moritz++
moritz nr: say try { die "foo" }
p6eval niecza v24-5-g599cbcb: OUTPUT«Any()␤»
..rakudo 53daef: OUTPUT«foo␤ in block at /tmp/YOjTt0XJQX:1␤␤»
rindolf jnthn: morning.
moritz jnthn: how do I change try to return Nil (or Any) instead of the exception on failure?
sorear moritz: your reply never reached p6c 08:32
moritz sorear: that's unfortunate
7 remaining failing test files in qast-sink-1 08:33
jnthn moritz: Something in statement_thingy:sym<try> 08:34
I think in the CATCH part of the handle node in there 08:35
moritz I'll try 08:37
hoelzro hey Perl 6 folk 08:38
FROGGS hi hoelzro 08:39
hoelzro I was reading the compiler overview in the the rakudo tree, and I found a reference to use.perl.org/~JonathanWorthington/journal/39772
afaik, use.perl.org is no longer up, yes?
because a) the URL should probably be moved to another copy of that article, and b) I'd really like to read that article =) 08:41
moritz iirc there's a way to mnagle the URL to still work, and recover the article that way 08:42
but I can't remember how :(
hoelzro curses 08:43
there really should be a no-brainer mirror to that content, though
cedrvint hoelzro: use.perl.org/use.perl.org/_Jonathan...39772.html
hoelzro cedrvint: thanks!
arnsholt Greetings from Mumbai! o/ 08:44
jnthn o/ arnsholt 08:46
jnthn Bet you don't have snow there :P 08:46
arnsholt Thankfully! 08:47
moritz jnthn: it's not that easy, it seems (returning Nil from try) 08:54
moritz oh, I think it is, I was just too dumb :-) 09:15
appending a value to a Past::Stmts doesn't change the return value if :resultchild(0) is present :-) 09:16
dalek kudo/qast-origin-1: f5a8f2b | moritz++ | src/core/traits.pm:
fix "handles"

this actually points to a bug in sinking some statements which needs to be tracked down separately
09:31
kudo/qast-origin-1: 9831e45 | moritz++ | src/Perl6/Actions.pm:
return Nil from a try when an error was thrown
jnthn That must get us down to very few failures? 09:33
dalek ast: 42d1a93 | moritz++ | S29-context/die.t:
[die.t] do not return a lazy list that dies when we really want to die right away
09:34
moritz jnthn: curiously enough the return value from try wasn't the problem 09:34
(sunk exceptions generally aren't, just sunk Failures)
the code was more like
is try { map { die }, 1, 2, 3}, .... 09:35
jnthn ah
moritz so the lazy list passed through the try
and then died outside of it
this will surprise people.
jnthn yeah
moritz runs another spectest
jnthn A few things about sink context will.
moritz down to 6 failing test files 09:41
hoelzro total? 09:42
moritz what total?
seems I haven't quite fixed delegation after all :(
hoelzro 6 failing tests in total?
moritz 6 failing test files in total 09:43
hoelzro is that just in the Rakudo tree, or roast too?
moritz just roast
I haven't checked the local tests yet
I always forget about those :-)
hoelzro ;)
moritz: is that with fudging off?
moritz hoelzro: no 09:44
hoelzro ah =(
I was about to freak out at how close you were =)
felher jnthn++ # I didn't know that you can put one heredoc after another, and even call different methods on them. :) 09:45
jnthn :) 09:47
moritz hoelzro: this is about a branch reaching the same readiness as our main branch 09:48
jnthn moritz: It would be a near miracle to pass almost all of spectest with failing make test ;)
hoelzro moritz: \o/ which branch?
macros?
moritz hoelzro: qast-sink-q
erm
qast-sink-1
hoelzro ah ha
moritz r: say do given 42 { when Int { 23 } } 10:27
p6eval rakudo 53daef: OUTPUT«23␤»
dalek ast: 4677a6f | moritz++ | S04-phasers/next.t:
make S04-phasers/next.t robuster wrt laziness
10:32
dalek kudo/qast-origin-1: c02d13a | moritz++ | src/core/ (2 files):
fix more built-ins to deal with sink context
10:50
moritz jnthn: a tricky one remains: the CATCH block isn't evaluated in sink context
oh, just tricky because I'm loooking at the wrong piece of code 10:51
moritz tries another approach 10:51
moritz I guess set_block_handler needs a :sink option or so 10:57
jnthn When do we not want it to sink? 10:58
moritz good question 10:59
are there any handlers that modify the return value?
moritz tries perl6_invoke_catchhandler__vPP, starts a spectest run and departs for lunch& 11:01
grondilu rn: given "foo" { s/foo/bar; .say } # testing if 'given' affects $_ as rw 11:08
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Malformed replacement part; couldn't find final $stop␤at /tmp/CttKUcAxSs:1␤------> } # testing if 'given' affects $_ as rw⏏<EOL>␤»
..niecza v24-5-g599cbcb: OUTPUT«===SORRY!===␤␤Malformed replacement part; couldn't find final / at /tmp/0fOC3R2dOx line 1:␤------> given "foo" { s/foo/⏏bar; .say } # testing if 'given' affect␤␤Parse failed␤␤»
grondilu rn: given "foo" { s/foo/bar/; .say } # testing if 'given' affects $_ as rw
p6eval rakudo 53daef: OUTPUT«Cannot assign to a non-container␤ in sub infix:<=> at src/gen/CORE.setting:11971␤ in block at /tmp/TT1mgWqMgy:1␤␤»
..niecza v24-5-g599cbcb: OUTPUT«Unhandled exception: Writing to readonly scalar␤ at /home/p6eval/niecza/lib/CORE.setting line 593 (Cool.subst @ 88) ␤ at /tmp/ar_B1uaR6W line 1 (ANON @ 4) ␤ at /tmp/ar_B1uaR6W line 1 (mainline @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 4208 (AN…
grondilu do I have to write '$_ = "foo"; ..." if I want to modify $_ ? 11:10
Ulti r: "foo"; say $_; 11:13
p6eval rakudo 53daef: OUTPUT«Any()␤»
Ulti :/
moritz grondilu: yes 11:36
or anything else that creates a variable
r: givem my $ = 'abc' { s/a/A/; .say }
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Confused␤at /tmp/bShMMK8KWC:1␤------> givem my $ = 'abc' ⏏{ s/a/A/; .say }␤»
moritz r: givem (my $ = 'abc') { s/a/A/; .say }
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Confused␤at /tmp/Ll53FOy9pf:1␤------> givem (my $ = 'abc') ⏏{ s/a/A/; .say }␤»
moritz r: given my $ = 'abc' { s/a/A/; .say } 11:37
p6eval rakudo 53daef: OUTPUT«Abc␤»
moritz helps if I spell 'given' correctly :-)
jnthn r: given "foo" -> $_ is copy { s/o/O/; .say } 12:08
p6eval rakudo 53daef: OUTPUT«fOo␤»
grondilu 'given my $ = Whatever {...}' will do, I guess 12:09
dalek kudo/qast-sink-1: f5a8f2b | moritz++ | src/core/traits.pm:
fix "handles"

this actually points to a bug in sinking some statements which needs to be tracked down separately
12:15
kudo/qast-sink-1: 9831e45 | moritz++ | src/Perl6/Actions.pm:
return Nil from a try when an error was thrown
kudo/qast-sink-1: c02d13a | moritz++ | src/core/ (2 files):
fix more built-ins to deal with sink context
moritz I accidentally pushed to the wrong branch before; sorry for duplicate commits 12:16
timotimo forces emself to do more perl6 12:39
timotimo currently trying to make a histogram of characters in a string 12:43
classify seemed the way to go, but the result was kind of ugly
moritz how so? 12:44
moritz r: say 'this is a longish string'.comb.classify({; $_ => 1 } ).pairs.map({; .key => .value.elems }).perl 12:45
p6eval rakudo 53daef: OUTPUT«("t\t1" => 2, "h\t1" => 2, "i\t1" => 4, "s\t1" => 4, " \t1" => 4, "a\t1" => 1, "l\t1" => 1, "o\t1" => 1, "n\t1" => 2, "g\t1" => 2, "r\t1" => 1).list␤»
timotimo that's a bit prettier than mine:
"8438947349873498574398".comb.classify({$_}).map: { $^a.key => +$^a.value }
r: "8438947349873498574398".comb.classify({$_}).map: { $^a.key => +$^a.value }
p6eval rakudo 53daef: ( no output )
timotimo r: "8438947349873498574398".comb.classify({$_}).map: { $^a.key => +$^a.value }.perl.say
p6eval rakudo 53daef: OUTPUT«Block.new()␤»
timotimo oh, whoops :) 12:46
r: "8438947349873498574398".comb.classify({$_}).map({ $^a.key => +$^a.value }).perl.say
p6eval rakudo 53daef: OUTPUT«("8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1).list␤»
moritz actually yours works :-)
though of course you can just use a hash and ++ each element per character
timotimo what's the ; for in your map block? forces it to be a block rather than being evaluated on the spot?
i tried that as a second option 12:47
moritz right
timotimo r: "8438947349873498574398".comb.map({$_ => ++(state %a){$_}}).perl
p6eval rakudo 53daef: ( no output )
timotimo but didn't quite know how to get the %a out of there afterwards
r: "8438947349873498574398".comb.map({$_ => ++(state %a){$_}}).perl.say
p6eval rakudo 53daef: OUTPUT«("8" => 1, "4" => 1, "3" => 1, "8" => 2, "9" => 1, "4" => 2, "7" => 1, "3" => 2, "4" => 3, "9" => 2, "8" => 3, "7" => 2, "3" => 3, "4" => 4, "9" => 3, "8" => 4, "5" => 1, "7" => 3, "4" => 5, "3" => 4, "9" => 4, "8" => 5).list␤»
timotimo currently it's like a triangle reduce
except in a triangle reduce i could get out the last result and that would be the one i would want - in this case if i try that i get one pair rather than a complete hash 12:48
moritz r: my %count; ++%count{$_} for '8438947349873498574398'.comb; say %count.perl 12:49
p6eval rakudo 53daef: OUTPUT«("8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1).hash␤»
timotimo that's not a true one-liner :D
moritz good old imperative, easy-to-get-right code
timotimo i've got a very silly idea that i'm going to try involving horrible abuse of hyperops
moritz r: say (do {my %count; ++%count{$_} for '8438947349873498574398'.comb; }).perl
p6eval rakudo 53daef: OUTPUT«(1, 1, 1, 2, 1, 2, 1, 2, 3, 2, 3, 2, 3, 4, 3, 4, 1, 3, 5, 4, 4, 5).list␤»
moritz r: say (do {my %count; ++%count{$_} for '8438947349873498574398'.comb; }; %count).perl 12:50
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Variable %count is not declared␤at /tmp/7BKW7Xa2AT:1␤------> '8438947349873498574398'.comb; }; %count⏏).perl␤»
moritz r: say (do {my %count; ++%count{$_} for '8438947349873498574398'.comb; %count}).perl
p6eval rakudo 53daef: OUTPUT«("8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1).hash␤»
moritz there you go.
timotimo so "do" is actually short for "do_it_in_one_statement"?
moritz "do" means "turn this statement or expression into an expression, and call it if it's a block" 12:52
timotimo how come this works: 12:57
r: ("8438947349873498574398".comb »Z=>» (1,)).perl.say
p6eval rakudo 53daef: OUTPUT«("8" => 1, "4" => 1, "3" => 1, "8" => 1, "9" => 1, "4" => 1, "7" => 1, "3" => 1, "4" => 1, "9" => 1, "8" => 1, "7" => 1, "3" => 1, "4" => 1, "9" => 1, "8" => 1, "5" => 1, "7" => 1, "4" => 1, "3" => 1, "9" => 1, "8" => 1).list␤»
timotimo but this doesn't:
r: ("8438947349873498574398".comb »Z=>» ((state %h),)).perl 12:58
p6eval rakudo 53daef: OUTPUT«(timeout)»
moritz I wouldn't call the first one "working"
timotimo 1 is just a dummy value in this case 12:59
i want to try to have the same hash as the value for each of the keys in the resulting list
moritz anyway, I don't even see what the second one is supposed to do
timotimo so ("8" => %h, "4" => %h, ...).list
moritz but you don't ever change %h
timotimo not yet :)
moritz ah
r: say ("8438947349873498574398".comb X=> ((state %h),)).perl 13:00
p6eval rakudo 53daef: OUTPUT«().list␤»
moritz r: say ("8438947349873498574398".comb X=> (state %h).item).perl
p6eval rakudo 53daef: OUTPUT«().list␤»
timotimo is it because %h is empty and the X op tries to unpack it?
moritz I think so, yes
r: say ("8438947349873498574398".comb X=> {}).perl
p6eval rakudo 53daef: OUTPUT«().list␤»
moritz r: say ("8438947349873498574398".comb X=> Any).perl
p6eval rakudo 53daef: OUTPUT«("8" => Any, "4" => Any, "3" => Any, "8" => Any, "9" => Any, "4" => Any, "7" => Any, "3" => Any, "4" => Any, "9" => Any, "8" => Any, "7" => Any, "3" => Any, "4" => Any, "9" => Any, "8" => Any, "5" => Any, "7" => Any, "4" => Any, "3" => Any, "9" => Any, "8" => Any).…
moritz it probably should respect its itemness, but doesn't 13:01
timotimo mhm
moritz r: say ("8438947349873498574398".comb X=> []).perl
p6eval rakudo 53daef: OUTPUT«().list␤»
moritz same problem here
timotimo i think i've got a workaround
now to figure out which way i want the dwim to point 13:02
oh, X=> solves it nicer than Z=> + dwim
r: ("8438947349873498574398".comb X=> ((state %h,).tree)).perl.say
p6eval rakudo 53daef: OUTPUT«("8" => {}, "4" => {}, "3" => {}, "8" => {}, "9" => {}, "4" => {}, "7" => {}, "3" => {}, "4" => {}, "9" => {}, "8" => {}, "7" => {}, "3" => {}, "4" => {}, "9" => {}, "8" => {}, "5" => {}, "7" => {}, "4" => {}, "3" => {}, "9" => {}, "8" => {}).list␤»
timotimo r: ("8438947349873498574398".comb X=> ((state %h,).tree)).map({.value{.key}++; .value}).perl.say # i think this gives me a list of the hash multiple times 13:04
p6eval rakudo 53daef: OUTPUT«({"8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1}, {"8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1}, {"8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1}, {"8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1}, {"8" => 5, "4" =…
timotimo r: ("8438947349873498574398".comb X=> ((state %h,).tree)).map({.value{.key}++; .value})[*-1] 13:05
p6eval rakudo 53daef: ( no output )
timotimo r: ("8438947349873498574398".comb X=> ((state %h,).tree)).map({.value{.key}++; .value})[*-1].perl.say
p6eval rakudo 53daef: OUTPUT«{"8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1}␤»
timotimo what i don't understand yet is this:
r: ("8438947349873498574398".comb X=> ((state %h,).tree)).map({.value{.key}++; .value})[0].perl.say
p6eval rakudo 53daef: OUTPUT«{"8" => 1}␤»
moritz r: my %a = a => 1, b => 2; say %a[0] 13:06
p6eval rakudo 53daef: OUTPUT«("a" => 1, "b" => 2).hash␤»
moritz r: my %a = a => 1, b => 2; say %a[1]
p6eval rakudo 53daef: OUTPUT«Index out of range. Is: 1, should be in 0..0␤ in method gist at src/gen/CORE.setting:10189␤ in sub say at src/gen/CORE.setting:7474␤ in block at /tmp/pkT761oYpB:1␤␤»
moritz r: my %a = a => 1, b => 2; say %a.list[0]
p6eval rakudo 53daef: OUTPUT«"a" => 1␤»
moritz I guess something in there flattens
timotimo that could be, yes 13:07
timotimo r: ("8438947349873498574398".comb X=> ((state %h,).tree)).map({.value{.key}++; .value}).hash[0].perl.say 13:13
p6eval rakudo 53daef: OUTPUT«("8" => 5, "4" => 5, "3" => 4, "9" => 4, "7" => 3, "5" => 1).hash␤»
timotimo that doesn't make sense to me, either.
the community of perl6 could initiate the Unintentional Code Obfuscation Contest 2013 :D 13:16
(not saying this task couldn't be done in a very transparent, readable and obvious way, because i'm sure it can. with ease, too)
timotimo moritz: so, was the thing where Z=> or X=> wouldn't respect the itemness even if .item was called, a rakudobug? i'll check what niecza has to say. 13:18
n: say ("8438947349873498574398".comb X=> (state %h).item).perl
p6eval niecza v24-5-g599cbcb: OUTPUT«Potential difficulties:␤ %h is declared but not used at /tmp/pS34JeHBKf line 1:␤------> 8438947349873498574398".comb X=> (state ⏏%h).item).perl␤␤("8" => {}, "4" => {}, "3" => {}, "8" => {}, "9" => {}, "4" => {}, "7" => {}, "3" => {}, "4"…
timotimo there we have our answer, i guess! 13:19
rn: say ("8438947349873498574398".comb X=> (state %h,)).perl
p6eval rakudo 53daef: OUTPUT«().list␤»
..niecza v24-5-g599cbcb: OUTPUT«Potential difficulties:␤ %h is declared but not used at /tmp/6PcVs5UQVr line 1:␤------> 8438947349873498574398".comb X=> (state ⏏%h,)).perl␤␤().list␤»
moritz timotimo: yes, it's a bug
timotimo would you like to file it?
moritz I can 13:20
nr: say <a b> X=> [];
p6eval niecza v24-5-g599cbcb: OUTPUT«"a" => [] "b" => []␤»
..rakudo 53daef: OUTPUT«␤»
moritz (just a minimal test case for the ticket) 13:21
timotimo only if you have time left over that you don't know what to do with :P
timotimo otherwise i can do it 13:21
moritz nr: say <a b> Z=> [];
p6eval niecza v24-5-g599cbcb: OUTPUT«"a" => []␤»
..rakudo 53daef: OUTPUT«␤»
moritz submitted. 13:23
timotimo thank you
pugs: say <a b> Z=> [];
p6eval pugs: OUTPUT«*** ␤ Unexpected ">"␤ at /tmp/WDCS9Ud0v7 line 1, column 13␤»
moritz Z as metaop is way younger than pugs' last features 13:24
timotimo OK
n: say <a b> X=> [state %h]
p6eval niecza v24-5-g599cbcb: OUTPUT«Potential difficulties:␤ %h is declared but not used at /tmp/QIoIHLEoOK line 1:␤------> say <a b> X=> [state ⏏%h]␤␤"a" => [] "b" => []␤» 13:25
tadzik masak: oxforddictionaries.com/definition/e...ndiloquent autopun? :)
grandiloquent (adj.) – pompous or extravagant in language, style, or manner
moritz nice one, tadzik++ 13:26
tadzik robertj++ actually (twitter.com/robertjacobsen/status/...181979649)
moritz r: gist.github.com/4250553 13:27
p6eval rakudo 53daef: OUTPUT«("A", "B", "Z", "-").list␤("a", "b", "c", "_").list␤»
moritz for some reason that produces ("Z", "-", "A", "B").list␤("_", "a", "b", "c").list("_", "a", "b", "c").list␤ in the qast-sink-1 branch 13:28
timotimo is there a \n missing in your last line, moritz? 13:29
r: ("_", "a", "b", "c").list("_", "a", "b", "c").say
p6eval rakudo 53daef: OUTPUT«Too many positional parameters passed; got 5 but expected 1␤ in method list at src/gen/CORE.setting:5023␤ in block at /tmp/luNLRme_Zy:1␤␤»
timotimo r: ("_", "a", "b", "c").list(("_", "a", "b", "c")).say
p6eval rakudo 53daef: OUTPUT«Too many positional parameters passed; got 2 but expected 1␤ in method list at src/gen/CORE.setting:5023␤ in block at /tmp/8bnLviawJx:1␤␤»
timotimo ah, the implicit self, i suppose?
moritz timotimo: there's a ␤ 13:30
timotimo i see two, i believe there should be three 13:31
moritz anyway, the amount of newlines isn't the issue here
that might be copy&paste gone wrong
timotimo of course :)
moritz rather the order of returned values 13:32
timotimo oh, now i see it
i thought the mistake was that it somehow returns three lists for two walls and was very surprised
[Coke] moritz: when rejecting/responding to tickets, I find it helpful to reply to the list also. Did you intentionally not reply to list on 116026? 13:36
moritz [Coke]: no; I simply though that when I hit "reply", it includes everybody who's relevant 13:39
[Coke] yes, for RT's definition.
timotimo is there a possibility to get proper perl6 syntax highlighting up on github? how about better support for rendering the POD that's used for the perl6book? 13:40
[Coke] you must check the "cc" box, or it doesn't get cc'd to the list. (despite the fact that the initial bug report is always sent to the list.)
moritz heh, I have a another autopun, from an internal software release: 13:41
* #13332033: Encoding-Fixes für Wheezy
moritz timotimo: you probably "just" have to patch whatever syntax hilighter github uses to support Perl 6 13:42
hoelzro I was thinking of patching it a while ago 13:43
not enough tuits =(
timotimo: if you want to patch it, it's called linguist, iirc
timotimo it's probably ruby software? 13:44
hoelzro looks like
timotimo triage mode engaged: rt.perl.org/rt3/Public/Bug/Display...l?id=71356 - this bug seems resolved. can be closed.
hoelzro oh, interesting. 13:45
linguist is just the language detection framework
moritz rakudo: class A { has $!b is readonly = "foo"; method b { say $!b } }; A.new.b
p6eval rakudo 53daef: OUTPUT«foo␤»
[Coke] timotimo: are there tests?
hoelzro it actually uses pygments under the hood for the coloring
moritz rakudo: class A { has $!b is readonly = "foo"; method b { say $!b }; method set-b { $!b = 'blubb' } }; give A.new { .set-b; say .b } 13:46
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Confused␤at /tmp/8EMEuQyTiD:1␤------> d set-b { $!b = 'blubb' } }; give A.new ⏏{ .set-b; say .b }␤»
timotimo [Coke]: doesn't seem so. are tests required for each bug to be closed? that would probably be a good thing so do.
moritz timotimo: yes, we do require tests
[Coke] for testable things, aye.
timotimo ok, sure. they go into roast, right?
moritz right
timotimo i'll see if i can add a test :) 13:47
[Coke] we can mark that one testneeded, though.
timotimo: ok - then add a pointer to the test in a comment on the ticket, and we can close it out.
timotimo should the test refer to the bug number, too? 13:48
moritz yes, in a comment 13:48
timotimo i'll get started then :) 13:49
[Coke] awesome.
timotimo: do you have an RT id?
timotimo i don't think i do yet. do i just sugn up for a bitcard? 13:50
[Coke] ... probably? It's been 10 years, I unno. :) 13:53
moritz timotimo: I think so, yes 13:54
timotimo good, i'm in now 13:56
moritz timotimo: what's your RT id?
dalek kudo/qast-sink-1: cd1ab4c | moritz++ | src/core/Str.pm:
work around a sink bug
13:57
timotimo is it the one on the top right where it says "logged in as timo"? 13:57
moritz right 13:57
[Coke]: can you make timo a bug admin please? 13:58
timotimo whoa!
diakopter hm, 3 not-quite-spam emails today saying "2 days left" 13:59
timotimo huh? isn't the world going to end on the 22nd? 14:00
moritz jnthn: I can't seem to find out how to sink CATCH (and similar) blocks.. HALP PLZ! 14:05
timotimo oh. well, is readonly works as in "can be written and won't crash", but the variable isn't actually readonly
well, at least i can write tests.
moritz timotimo: that's what I feared 14:06
timotimo tests will reveal all.
moritz all hail the tests! 14:07
timotimo the tests shall test your faith. do not falter!
i'm considering modifying Configure.pl so that checking out parrot and nqp won't give a big "oh god oh no no no no detached head oh god what am i gonna do? what are YOU gonna do? we're doomed!" message 14:08
moritz timotimo: but please only do that if the last commit in the branch is the same revision as the requested revision 14:09
diakopter speaking of which.. is there a way to make nqp --gen-parrot clone parrot with none of the .git history?
moritz otherwise you won't get the right revision
diakopter: no
timotimo yes, of course. i was going to add branches that tell you "required by perl6 version uiaeo" and checking those out
diakopter <sad>
Woodi hallo today
moritz timotimo: that doesn't seem too helpful 14:10
timotimo if it's not, i'm going to leave it be
moritz timotimo: instead of getting a warning about a detached head, you'll get commits to a branch that nobody cares about
and is stuck on 'git pull' without a good error message
timotimo oh, hadn't thought of that properly.
then a tag would be more appropriate? 14:11
diakopter moritz: I guess I was more asking "is there a way to do that in git" (clone a particular revision without history)
moritz timotimo: a tag won't prevent the detached head warning
timotimo doh.
in that case, it'll be fine to leave it be. 14:12
moritz the problem is really that we want a specific revision, and the specific revision is not what the user wants when he wants to patch nqp or parrot
Woodi just tried star 2012.11 with --profile and compiling nqp SEGFAULTs at stage1. 2Gb here, but retrying 'make' explodes in 0,5s - maybe it can't fill all memory so fast ?
Woodi *parrot with --profile 14:12
timotimo diakopter: i know how to make git clone only the needed stuff for the newest revision, i'll look into Configure.pl to see if i can figure out how it works since i know even less perl5 than i do perl6 14:13
diakopter timotimo: I think it'd be a neat option like --no-parrot-history or something 14:14
timotimo oh, configure-pl doesn't do very much by itself. i'll see. 14:14
moritz diakopter: git supports it with the --depth option
diakopter cool 14:15
moritz though the resulting repo doesn't support many operations 14:16
timotimo uh, that's not completely true
moritz google for 'git shallow clone' for more info ;-)
timotimo well, yeah, it doesn't do blame or history 14:17
but you can push from it, i believe
and you can easily expand the history after the fact, i think.
moritz "(you cannot clone or fetch from it, nor push from nor into it)" says man git-clone
timotimo o_O 14:18
i must have something confused here.
at least git pull --depth can expand the history as i remembered
moritz timotimo: or maybe newer git revisions can do it 14:19
bphillips I'm playing around with implementing a Spore REST client in perl6 (i.e. metacpan.org/module/Net%3A%3AHTTP%3A%3ASpore). Can someone point me to a reasonably good example or doc on metaprogramming in perl6 (specifically, adding a dynamically named method+signature to an instance)
timotimo hum. i have 1.7, but 1.8 is the current stable one. i should investigare 14:20
diakopter I'd argue that nqp/parrot developers are not going to use the --gen-parrot option to do development. I can't tell you how many times I've waited for parrot to clone over a slow connection 14:21
I change systems too often
moritz bphillips: $obj.^add_method($name, method (\c) { # check arguments yoursel here }); $obj.^compose; 14:22
timotimo at least the documentation still says, that you can't pull to or push from it :(
moritz diakopter: I regularly develop nqp, and occasinally parrot, and I do use --gen-{nqp,parrot}
diakopter oh
bphillips moritz: Is there no way to create the signature dynamically as well so that perl6 does argument checking for me? 14:23
timotimo not being able to pull into a shallow clone is a problem with how gen-nqp and gen-parrot do updates
diakopter n00b question: segfault in arbitrary C program on linux. I know how to debug on Windows MSVC. where do I start with gcc/linux 14:24
timotimo diakopter: gdb binary_name and then run and see what happens, bt is the most interesting command for you
in some distros you will get a list of packages you have to install to get complete symbol tables for your program, so that you can have complete tracebacks
moritz diakopter: valgrind $programname
bphillips: not that I know of. Parameters in signatures are tied to lexical variables, and you can't easily create them at run time 14:25
diakopter moritz: Invalid read of size 4 14:27
yay!
neat, it found the debug symbols automagically
bphillips moritz: cool, I'll give it a whirl
moritz though I wonder if we could provide an API for creating a signature that only does checking, but no binding 14:29
timotimo there are spectests for the is readonly trait in S06-traits/is-readonly.t, but i can't run them because my perl6 doesn't know what VAR is
diakopter moritz: thanks!
too scared to try gdb 14:30
moritz timotimo: that' test is fudged, no? 14:31
timotimo well, it says #?rakudo skip VAR, so apparently yes 14:32
the other one where VAR is used is #?rakudo skip 'segfault', which isn't better
timotimo AFK for a bit 14:35
moritz anyway, I think you can remove those VAR tests
I don't see how they add any value 14:36
timotimo after that, should i see that i make tests that test is readonly with classes rather than local variables?
moritz ss/rather than/in addition to/ 14:37
timotimo er, yes, i meant that. would they go into S12-traits? 14:38
moritz put them into S06-traits/is-readonly.t too 14:40
[Coke] timotimo, moritz: timo is now a bugadmin. 14:41
moritz thanks [Coke]++ 14:42
jnthn moritz: Can have a look at the CATCH sinking when I get home from $dayjob 14:43
moritz jnthn: thanks 14:44
Woodi strange, after installtion I getting: Missing or wrong version of dependency 'src/gen/CORE.setting' (from ModuleLoader.pbc)? ... 15:13
moritz Woodi: probably you have an old installation, or old .pir files, which interfer with the new one
Woodi no, strace shows that it is accessing /*/star-2012.11/*/ModuleLoader.pbc... or something happend during compilation 15:15
moritz try export RAKUDO_MODULE_DEBUG=1 15:18
Woodi looks: use Config::INI; triggered this. so probably precompiled old modules... 15:31
Woodi ok, thanx moritz++ 15:38
Woodi so I think there is problem with NativeCall: while my $a = native_function( $sock, $structure, $kind-of-C-iterator-on-structure ) { ... } exploding with SEGFAULT... cannot find user error this time... 15:42
similiar while $b = native_without_C_iterator(...) { ... } works
timotimo t.h8.lv/0001-test-for-RT-71356-read...ribu.patch - does this look correct? i'll push it if it's deemed good. 15:45
timotimo oh, another question: niecza doesn't seem to implement is readonly. can i write the test so that instead of crashing(?) niecza would get a "not ok" for the class definition? 15:46
moritz timotimo: niecza probably doesn't run the test file if it crashes on the trait 15:48
timotimo hah! duh :)
bphillips (perl6 newb alert) does declaring an empty submethod BUILD {} in a class affect the initialization of an instance of that class? 15:49
moritz bphillips: yes 15:50
bphillips moritz: what are the requirements for the BUILD method? should it return something?
moritz bphillips: please see doc.perl6.org/language/objects#Obje...nstruction
bphillips mortiz++ thanks 15:51
timotimo i see there's lots of tests for advent2009, but none for 2010, 2011, 2012 in roast/integration. were the newer advent calendars not fit for their own tests because the test suite around them has already matured well enough in 2010? 15:54
moritz timotimo: I think nobody got around to make test out of the posts 15:55
timotimo is duplicating tests an issue?
hm, actually, integration tests are sufficiently different from the rest of the spec test suite, aren't they?
do you think making test cases for the rest of the advent calendars is a worthwile project for getting familiar and comfortable with perl6 and tests? 15:56
and would perl6 benefit?
moritz yes, and yes 15:58
timotimo cool :) 15:59
moritz though only do it for posts that are well-suited for tests
timotimo yes, certainly
jnthn decommute, bbiab &
GlitchMr glitchmr@feather ~/examples> /usr/bin/perl6 --version 16:03
This is perl6 version 2012.11-27-g53daeff
Up-to-date version of perl6 in /usr/bin. Surprised...
Anyway, I've problem. You see, Rakudo complains about my custom operator not iffy enough. 16:07
gist.github.com/4251501
How can I make it iffy enough?
[Coke] GlitchMr: if you make that a file rather than a shell session, you could have the evalbot run it from here. 16:10
r: gist.github.com/7c78460908e96476bf3e 16:11
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Confused␤at /tmp/thRDO6p6pb:1␤------> https⏏://gist.github.com/7c78460908e96476bf3e␤»
[Coke] ... or at least you used to be able to. :P 16:12
diakopter public gists only I think 16:13
GlitchMr r: gist.github.com/4251559
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Cannot negate in because it is not iffy enough␤at /tmp/39hJ6K2TVh:9␤------> say 'lol' !in⏏ 'face';␤»
GlitchMr n: gist.github.com/4251559
p6eval niecza v24-5-g599cbcb: OUTPUT«===SORRY!===␤␤Cannot negate in because additive operators are not iffy enough at /tmp/7TmJ67zdo1 line 9:␤------> say 'lol' !in⏏ 'face';␤␤Parse failed␤␤» 16:14
GlitchMr std: gist.github.com/4251559
p6eval std a8bc48f: OUTPUT«===SORRY!===␤Cannot negate in because additive operators are not iffy enough at /tmp/PAfiKpUwOT line 9:␤------> say 'lol' !in⏏ 'face';␤Parse failed␤FAILED 00:01 52m␤»
GlitchMr Huh?
How can I make actually iffy enough operator. I even have marked it returns boolean.
[Coke] ah. didn't realize I had made it private, whoops!
GlitchMr: in the grammar, you declare it iffy: 16:17
Perl6::Grammar.O(':prec<m=>, :assoc<left>, :iffy<1>, :pasttype<chain>', '%chaining');
I have no idea how to mark it iffy outside the grammar, though.
it's not introspecting the signature for a boolish return, though. 16:19
GlitchMr Well, specification says "You may negate only those operators that return a Bool".
It doesn't depend on any internal "iffy" property.
[Coke] GlitchMr: I'm just telling you what's in rakudo src. 16:20
I don't see any examples in roast that test for adding new iffy operators, just for testing that + isn't iffy enough.
your request seems reasonable to me. no clue how hard it would be to update the iffy test to check the signature as opposed to the iffy flag. 16:21
(or to update the iffy flag based on the sig for new items.) 16:22
[Coke] std: sub infix:<in>(Str $a, Str $b --> Bool) { True } ; say "a" in "b" 16:26
p6eval std a8bc48f: OUTPUT«Potential difficulties:␤ $b is declared but not used at /tmp/W4frjONWe5 line 1:␤------> sub infix:<in>(Str $a, Str ⏏$b --> Bool) { True } ; say "a" in "b"␤ $a is declared but not used at /tmp/W4frjONWe5 line 1:␤------> sub infix:<in>(Str [3…
[Coke] std: sub infix:<in>(Str $a, Str $b --> Bool) { $a, $b; True } ; say "a" in "b"
p6eval std a8bc48f: OUTPUT«ok 00:00 47m␤»
[Coke] std: sub infix:<in>(Str $a, Str $b --> Bool) { $a, $b; True } ; say "a" !in "b"
p6eval std a8bc48f: OUTPUT«===SORRY!===␤Cannot negate in because additive operators are not iffy enough at /tmp/U6VgRNhrym line 1:␤------> --> Bool) { $a, $b; True } ; say "a" !in⏏ "b"␤Parse failed␤FAILED 00:00 47m␤»
GlitchMr Iffy flag looks like hack to me 16:27
[Coke] std: sub infix:<asdfasdf>(Str $a, Str $b --> Bool) { $a, $b; True } ; say "a" !asdfasdf "b"
p6eval std a8bc48f: OUTPUT«===SORRY!===␤Cannot negate asdfasdf because additive operators are not iffy enough at /tmp/O1ljUoRF0S line 1:␤------> ol) { $a, $b; True } ; say "a" !asdfasdf⏏ "b"␤Parse failed␤FAILED 00:00 47m␤»
GlitchMr Of course, I could make infix:<!in> operator, but that's hax.
[Coke] probably your quickest way to working code, and leave a comment that it shouldn't be needed. 16:28
looks like std doesn't allow it yet, either.
GlitchMr I wonder if infix:<not in> operator, just like in Python would work
GlitchMr Seems to work 16:29
Even if I put space between "not" and "in". Impressive. 16:30
put more than one space*
jnthn If you put it at the same precedence level as a relational operator, it should get the iffy-ness of that. 16:39
GlitchMr That's... hacky 16:44
What precedence would have with iffy-ness.
jnthn GlitchMr: It's exactly what STD does. 16:45
jnthn GlitchMr: The precedence level relational operators have, as I told you. 16:46
is equiv(&infix:<==>) for example
[Coke] r: sub infix:<in> is equiv(&infix:<==>) (Str $a, Str $b --> Bool) { $a, $b; True } ; say "a" !in "b" 16:57
p6eval rakudo 53daef: OUTPUT«===SORRY!===␤Missing block␤at /tmp/qEBaxfAzxf:1␤------> sub infix:<in> is equiv(&infix:<==>) ⏏(Str $a, Str $b --> Bool) { $a, $b; True␤»
[Coke] r: sub infix:<in> (Str $a, Str $b --> Bool) is equiv(&infix:<==>) { $a, $b; True } ; say "a" !in "b"
p6eval rakudo 53daef: OUTPUT«False␤»
japhb jnthn: Did you see the Rakudo performance issues with 'for ^100 X ^100' and with push/join in the backlog? 17:00
diakopter, Regarding the parrot/nqp cloning issue: Since perl6-bench makes a LOT of clones of everything, it starts out by making one --mirror clone of each major component, and then doing local (very fast) clones as needed; in particular, before building Rakudo (or NQP), it starts by local-cloning the NQP and Parrot into place inside the Rakudo checkout, and then --gen-parrot recognizes those are there and just builds. 17:02
diakopter, if you change machines a lot, but are only in one or two locations, you might get a win by mirroring the repos to a single machine in each location, and cloning from that as needed. 17:03
japhb (Just make sure to 'git fetch -t' and 'git fetch -u' starting at the mirror when you want to update -- or run a cronjob on the mirror to do that.) 17:05
jnthn japhb: Yes it's already in RT.
japhb jnthn, ah, sorry, my bad
jnthn japhb: np
japhb: I didn't get to the bottom of why last time I looked at it.
japhb As I spend more time with perl6-bench, I'm starting to get a feel for when something is out of whack in the sense that a performance problem goes way past the general slowdown of Parrot + several layers of abstraction. Sometimes just seeing a really large difference between NQP and Rakudo on a test raises that flag. 17:07
japhb And sometimes it's a matter of niecza and Rakudo scaling very differently -- regardless of which one was faster for the "small" case. 17:08
jnthn Yeah, it's good to look at those ones. 17:09
jnthn I'm curious what difference the sink changes will make 17:11
japhb ditto that.
jnthn (They keep for loops in sink context from keeping all the results.)
Well, from building up a result list.
japhb It's now easy in perl6-bench to compare builds from different branches, so we can even compare before the merge if we like.
(I figured I'd do that anyway once more of the bugs were shaken out.) 17:12
japhb Oh, that reminds me: I'm thinking perl6-bench really belongs under the perl6 org; it should be a community thing, so I was thinking of forking my repo into the perl6 one on github and declaring the fork "official". Anyone disagree and think that's a bad idea? If so, why? 17:14
moritz japhb: go ahead 17:19
japhb moritz, Thank you. I'll wait for a bit to see if anyone has any objections, just in case. 17:20
Also, I'm assuming that code I wrote should be officially placed under Artistic 2, and code derived from RosettaCode should be explicitly marked Gnu FDL, correct? 17:21
jnthn moritz: So, should all CATCH blocks be sunk? 17:22
moritz: Same with CONTROL? 17:23
jnthn moritz: I'm a bit surprised things aren't already considered in sink context there. 17:27
moritz: Because of the rethrow added at the end.
oh, wait, I see it... 17:28
FROGGS is there a spec that says something about module search paths? 17:29
jnthn r: try { die 'omg'; CATCH { for 1..10 { .say } } } 17:30
p6eval rakudo 53daef: OUTPUT«1␤2␤3␤4␤5␤6␤7␤8␤9␤10␤omg␤ in block at /tmp/jXeQmLYA01:1␤␤»
TimToady jnthn: typo in "by using the ident method on strings," 17:34
jnthn uh, indent, yes :) 17:35
fixed, thanks
jnthn moritz: Got a fix. 17:36
dalek kudo/qast-sink-1: 5886931 | jnthn++ | src/Perl6/Actions.pm:
Sink in CACTH and CONTROL blocks.
17:41
felher ... I had to read TimToady's line four times to see the typo. Two times even after I realized it was in i[n]dent. And I did only realize that becaue jnthn said so :) 17:46
FROGGS I've got a problem, I've got a string like 'Dog:auth({ .substr(0,5) eq "cpan:"})' and I've got a token like { 'Dog:auth({' .+ '})' } 17:47
my problem is that .+ even matches the last }) of my string, so the token itself wont match in the end
how do I prevent it from matching the enclosing braces?
flussence /.+?/ maybe 17:48
FROGGS tries
flussence: hmm, no, doesnt work 17:49
same result
ohh wait
it works somehow
flussence: thanks! 17:50
flussence I guess you could also use the ~ operator in that case since it's two delimiters... 17:51
TimToady nr: sub postfix:<-> ($x) is equiv(&prefix:<->) { -$x }; say 2**3- 18:15
p6eval rakudo 53daef, niecza v24-5-g599cbcb: OUTPUT«0.125␤» 18:16
TimToady this is perhaps a clearer example of the postfix prec bu
*bug
looks like a STD bug
jnthn If you can fix it in STD, I can take a look at transliterating the fix into Rakudo's EXPR 18:17
jnthn r: class A { method Str() { 'a' } }; my @a = A.new xx 10; say @a.uniq.elems 18:21
p6eval rakudo 53daef: OUTPUT«1␤»
jnthn Got a fix for that one locally
diakopter learns that TimToady mentally pronounces STD as standard 18:27
TimToady how do you pronounce 'stdin'? 18:28
besides, S.T.D. means something gross :) 18:29
rindolf TimToady: I call it standard-in.
rurban me too
rindolf Or maybe S.T.D.in. 18:30
rjbs stuh-DIN 18:31
diakopter ^
flussence stiddin'
rjbs and stuh-DOUT and stuh-DAIR
I used to say "standard in" until confound converted me.
skids If you are adequately antisocial, you never have to worry about such verbal pronunciations. 18:32
Also no hazard of STDs.
TimToady well, there are antisocial behaviors that can lead to STDs... 18:33
[Coke] I read stdin in my head as "stand in" 18:34
www.quickmeme.com/meme/3qm3f8/ 18:36
jnthn [Coke]: And to make something appear on the terminal, your program has to "stand out"? :P 18:38
dalek kudo/nom: 8e02c1e | jnthn++ | src/core/List.pm:
Give uniq === semantics, not eq.

Also sink the for that is being gathered. Once the sink branch lands, this should decrease memory usage also.
18:39
GlitchMr 0, [\+] 2 ** 15 xx 2 ** 15 # hash keys needed to make hash collision attack on PHP 18:40
[Coke] jnthn: eh. it doesn't mean that, it's just how it's pronounced. :) 18:41
jnthn :) 18:42
dalek rl6-roast-data: d345408 | coke++ | / (3 files):
today (automated commit)
18:44
[Coke] github.com/coke/perl6-roast-data/b....out#L1857 - 2 todo PASSED
GlitchMr "unknon" 18:45
This is really proffesional
diakopter ...
GlitchMr (I know, professional is written with one f and two s)
[Coke] GlitchMr: do you have commit access to roast? 18:46
GlitchMr Yes
[Coke] You know what you have to do. :)
GlitchMr ok, I'm going to find "unknon"
jnthn Typos happen :) 18:47
darn! I meant to typo that to make a joke then got it right
[Coke] mmmhehehe. 18:48
dalek ast: a18f56f | GlitchMr++ | integration/99problems-11-to-20.t:
Unknown, not unknon.
[Coke] if you could track down the 2 passing TODOs while you're in there, that would be awesome. 18:48
GlitchMr Sure 18:51
[Coke] \o/ 18:53
GlitchMr Both of those TODO tests pass. But they pass just by accident. 18:54
oh wait, they don't
I was confused by two similar tests
They don't pass. No idea why they pass for you. 18:55
dalek kudo/nom: a1eff00 | jnthn++ | docs/ChangeLog:
Update ChangeLog.
GlitchMr github.com/perl6/roast/blob/a18f56...-20.t#L136 18:56
It's this test.
But...
not ok 5 - .. or a n-ary list with always same element
GlitchMr Oh wait, it's "unknown", not "unknon" 18:57
dalek ast: b8d4388 | GlitchMr++ | integration/99problems-11-to-20.t:
Passing TODOs :-).
18:58
GlitchMr [Coke]: Fixed. 18:59
timotimo so there was an advent calendar post on quoting, but there was no mention of quoting shell commands? 19:16
jnthn timotimo: It missed out quote words and various other things too. :) 19:17
jnthn It wasn't meant to be exhaustive. 'cus otherwise it woulda been exhausting to write :P 19:18
timotimo mhm
timotimo er, what do i have to search in the synopses to find what quote word starts a shell execution quote? :| 19:20
jnthn execute? :) 19:21
In S02
timotimo ah, indeed. 19:22
timotimo that part didn't show up in the search results sadly 19:22
bphillips moritz: what does the "\c" part of the method (\c) { ... } indicate in your message from earlier? 19:24
(or if someone else knows, please feel free to chime in) 19:25
[Coke] GlitchMr++ 19:26
jnthn bphillips: It means "take an argument and don't contextualize it in any way" 19:28
It can be referred to as just "c" within the method
jnthn moritz: Turns out my CATCH sink patch earlier wasn't enough, and didn't handle the default inside the CATCH needing sinking 19:28
timotimo what do i have to do to get a perl6 binary with line history and in-line-editing? 19:30
jnthn timotimo: Thinks that needs having a libreadline (or perhaps the dev for it) installed at the time you build Parrot. 19:31
timotimo ah, at parrot build time
that's the key
so with :x i get the stdout and with run/shell i get the exit code. any way to get both at the same time without executing something twice? 19:38
TimToady timotimo: well, there's always redirecting to a file and then reading that 19:43
timotimo well, since you're already the parent process, why not give pipes as stdout and stderr and read their contents to a buffer? 19:44
TimToady or a named fifo, on Unix
well, it's certainly possible to teach perl6 how to do such things; I was just suggesting a workaround 19:45
rindolf Hi all. Are there any open Rakudo / Niezca / Perlito Junior Jobs? 19:52
[Coke] tasks or actual paying jobs? 19:54
dalek kudo/qast-sink-1: f1b8fed | jnthn++ | src/Perl6/Actions.pm:
Sink when/default in CATCH/CONTROL also.
20:03
jnthn moritz: With that last patch, spectest in qast-sink-1 looks quite good now (though not got the ICU tests running, so maybe we've some leftovers in there). 20:04
dalek kudo/nom: 24e882f | jnthn++ | docs/ROADMAP:
Give estimates for a couple of tasks.
20:05
timotimo is there a forecast yet for when fork and wait might go into rakudo or niecza? 20:10
masak ahoj, #perl6 20:30
hoelzro o/ masak 20:31
TimToady ajoi <- Californian
jnthn hola, señor masak 20:35
masak takes the ~ from the n and uses it as a funny 'stache 20:38
masak TimToady: should the indentation from an interpolated variable figure in the de-indentation of a heredoc? 20:41
jnthn++ # Matryoshka dolls for Christmas! \o/
<jnthn> Typos happen :) 20:43
<jnthn> darn! I meant to typo that to make a joke then got it right
what's even more scary, I *read* it as containing a typo! o.O 20:44
and only then discovered that it didn't, to my great surprise.
masak even now that I know that it doesn't contain a typo, just glancing at it, my brain expects one to be there. 20:44
I think I'm finally turning into an autopun. 20:45
timotimo: [backlog] so... essentially, you are wait-ing for a fork-ast... :P 20:46
bphillips I'm certain I must be doing something wrong, but can I expect $foo ~~ s/$search/$replace/ to return a boolean indicating that the search/replace was actually done? 20:51
bphillips I'm looping over a list of substitutions and once one matches, the ~~ s/// operation always seems to return true 20:52
timotimo masak: *snrk* :D
bphillips (the relevant gist: gist.github.com/4253309) 20:53
masak bphillips: what s/// should return is a discussion that was never fully resolved.
at one point, Niecza and Rakudo returned different things. 20:54
rn: $_ = "foo"; say s/foo/bar/
p6eval rakudo 24e882: OUTPUT«bar␤» 20:54
..niecza v24-5-g599cbcb: OUTPUT«True␤»
masak oh, they still do.
:/
bphillips regardless of the actual return value, if the subject of the search isn't matched, shouldn't it return something False-ish? 20:55
bphillips or, should I do this differently? (I'm <24 into my perl6 adventure, my mind is primarily filled with p5 equivalents) 20:55
masak :) 20:57
moritz is the resident expert on smartmatching, I believe. he may have a good answer for you, once he rezzes.
bphillips if I explicitly set $/ to False before doing the s///, that seems to "work" (although that seems like the worst way to go about this) 21:00
FROGGS k, my Grammar for parsing "use" statements is set up and correctly matches 'auth', I got donuts, coffee and star trek is playing... life can be good 21:02
dalek kudo/stdier: b9b110b | jnthn++ | src/Perl6/World.pm:
Good error for unexpected closing bracket.
21:07
masak \o/ 21:15
anything is better than "Confused" :) 21:16
timotimo i like that branch name 21:25
tadzik standardier
sergot hi o/ ! 21:26
timotimo t.h8.lv/0001-test-for-RT-71356-read...ribu.patch - does this patch look good btw? i forgot to push it, so i just thought i'd ask before i do
sergot There something wrong with p6's libs on feather. :(
jnthn timotimo: did you forget to bump the plan? 21:28
[Coke] where is p6 installed on feather?
timotimo oh, yes i did. thanks!
[Coke] finds /usr/bin/perl6, which looks surprisingly recent. 21:29
masak tadziku, sergocie! \o/
tadzik o/ 21:30
timotimo can i have push permission to perl6/roast? i'm timo on github 21:35
[Coke] +1
sergot masaku ! o/ 21:36
masak vocative++ 21:37
dalek p/highexpect: e6ea357 | jnthn++ | src/QRegex/Cursor.nqp:
Lookaheads should not change highexpect.
p/highexpect: 45ecaf8 | jnthn++ | src/QRegex/Cursor.nqp:
Provide a way to manipulate highexpect.
kudo/stdier: 53e70fb | jnthn++ | src/Perl6/Grammar.pm:
Fresh highexpect in ws, as per STD.
21:38
grondilu rn: say .[0] for [[<foo bar>], [^10]];
p6eval rakudo 24e882, niecza v24-5-g599cbcb: OUTPUT«foo bar␤»
[Coke] hurm. looks like timo is already a member of perl6.
grondilu was expecting "foon0"
jnthn rn: say .[0] for ([<foo bar>], [^10]); 21:39
p6eval rakudo 24e882, niecza v24-5-g599cbcb: OUTPUT«foo␤0␤»
jnthn [...] is an item
[Coke] but it looks like I'm not an admin. I think. So hopefully someone else can sort you out.
grondilu rn: say .[0] for [[<foo bar>], [^10]].list;
p6eval rakudo 24e882, niecza v24-5-g599cbcb: OUTPUT«foo␤0␤»
grondilu jnthn: thanks 21:40
jnthn timotimo: done
sergot "Could not find JSON::Tiny in any of:" I need JSON::Tiny on feather. :) 21:42
jnthn bah, somehow implemetning highexpect busts...1 macros test? o.O
masak O.o
jnthn oh...that's unfortuante
...and easily fixed
masak .oO( nobody expects the macro inquisition! )
jnthn nah, just that I put the highexpect things into an @.expected in X::Comp 21:43
jnthn And when that got mixed in to a type check exception, hid the expected type. 21:44
dalek ast: 1fa9ddf | (Timo Paulssen)++ | S06-traits/is-readonly.t:
test for RT #71356: readonly trait for private attributes
[Coke] timotimo++ jnthn++ 21:45
dalek kudo/stdier: 324cb25 | jnthn++ | src/ (2 files):
Rename to avoid a conflict.
21:48
jnthn does another spectest
If this passes, I'll merge the next round of error reporting improvements :)
timotimo jnthn++ sounds great! 21:49
popl I'd like to help with Perl 6 but I suck. Is there anything I could do (documentation, sweeping up, etc.)? 21:50
masak anything that stirs the pot is a good help. 21:51
masak I started my activity here on #perl6 basically trying out the spec, piece by piece. 21:52
dragged up a few things :)
FROGGS popl: if you wanna learn Perl 6 while helping, you could skim through the bugtrackers and check for already solved things, add tests or try to solve something on your own
thats what I did to get a feeling for the internals
popl Ok. 21:53
FROGGS masak: is version comparision implemented yet?
dalek p: b30fb7a | jnthn++ | src/Q (2 files):
Keep :dba(...) values for a bit longer.

This will allow them to make it unti NFA construction time.
popl I will look into it. 21:53
Thanks FROGGS.
FROGGS popl: you're welcome 21:53
masak FROGGS: try it and see. 21:54
FROGGS how?
masak rn: say v3 > v2
p6eval rakudo 24e882: OUTPUT«Cannot call 'Real'; none of these signatures match:␤:(Mu:U \v: Mu *%_)␤␤ in method Real at src/gen/CORE.setting:804␤ in sub infix:<>> at src/gen/CORE.setting:2822␤ in block at /tmp/QCXQ6GlTvf:1␤␤»
..niecza v24-5-g599cbcb: OUTPUT«===SORRY!===␤␤Action method value:version not yet implemented at /tmp/sJy3iCqPQK line 1:␤------> say v3⏏ > v2␤␤Action method value:version not yet implemented at /tmp/sJy3iCqPQK line 1 (EOF):␤------> say v3 > v2[33…
masak rn: say v3 after v2
FROGGS r: say so 1.2.3 > 3.2.0
p6eval niecza v24-5-g599cbcb: OUTPUT«===SORRY!===␤␤Action method value:version not yet implemented at /tmp/moSDYyJ9Sz line 1:␤------> say v3⏏ after v2␤␤Action method value:version not yet implemented at /tmp/moSDYyJ9Sz line 1 (EOF):␤------> say v3 afte…
..rakudo 24e882: OUTPUT«True␤»
rakudo 24e882: OUTPUT«===SORRY!===␤Confused␤at /tmp/ES0xIx9I7E:1␤------> say so 1.2.⏏3 > 3.2.0␤»
dalek kudo/nom: 4068131 | jnthn++ | src/ (2 files):
Try reporting what was expected at high watermark.
21:55
kudo/nom: 0118e3b | jnthn++ | src/Perl6/Grammar.pm:
Add a bunch of missing :dba(...)s.

Remove completed highwater task.
FROGGS okay, NYI 21:55
masak r: say v4.beta after v4
p6eval rakudo 24e882: OUTPUT«No such method 'beta' for invocant of type 'Version'␤ in block at /tmp/MEEZIeeGaq:1␤␤»
masak r: say v4beta after v4
p6eval rakudo 24e882: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&after' called (line 1)␤Undefined routine '&v4beta' called (line 1)␤»
masak r: say v4 after v4
p6eval rakudo 24e882: OUTPUT«False␤»
masak hm. I should read up on version number syntax. 21:55
FROGGS r: say v5 after v4
p6eval rakudo 24e882: OUTPUT«True␤»
jnthn OK, it's merged :) 21:56
FROGGS masak: let me read ;o) 21:56
[Coke] jnthn++ 21:57
timotimo is "highwater" an established term/concept? what do i have to look for to find more about how it works without digging into code? 22:00
cognominal__ masak: "Everywhere I look, I see people falling prey to confirmation bias. Just as I suspected." 22:01
jnthn timotimo: Not really sure what to point you at. But I can explain it... 22:02
masak cognominal__: oh, it's a variant of "Is confirmation bias prevalent? Yes, I see it everywhere!" # autopun
jnthn One of the reasons Rakudo has given dodgy location information at times is because certain kinds of errors make the parser try a bunch of alternatives, and in doing so it might jump back quite a long way in order to do so. 22:03
This means at the point it finally gives up, it may be quite a long way from where the real problem was.
timotimo OK, that seems plausible - if frustrating 22:04
jnthn The highwater mark just records the furthest place we got to.
timotimo ah, and that's the point that gets reported as having the error?
jnthn The highexpect is a kind of "black box recorder" of the parse that keeps track of what we were looking for at the time.
Yes.
jnthn And that's basically it :) 22:05
timotimo seems reasonable. and if it works, that's great, too :)
jnthn The only other bit to mention is that analyzing the contents of highexpect and the stuff immediately after the highwater is the way we manage to re-write some "Confused" messages into something a bit smarter. 22:06
masak that raises a question for me. why all the backtracking? I thought Perl 6 syntax mostly didn't involve backtracking.
jnthn masak: It's not backtracking in the sense of quantifier backtracking. 22:07
If you do
timotimo maybe it's got something to do with longest expression matching?
jnthn [ <foo_that_matches_lots_then_fails> || <bar_that_does_less> || <.panic: 'Confused'> ]
masak oh, troo. 22:08
jnthn Then you can end up a long way back.
masak it's just resetting to a cursor that lets you retry something.
jnthn Well, just returning up the callstack really
We don't reset cursors, just throw away ones that didn't work out.
timotimo i wonder if it makes any sense to autothread grammars, if they can be reset anyway? 22:09
jnthn To give an example of highexpect, if I do:
perl6 -e "42.\ "
Then the error location also now has some info on what it wanted:
------> 42.<HERE>\
expecting any of:
dotty method or postfix
timotimo: That may create issues with various other bits of parse state kept around in contextuals. Cursors aren't the only thing going on. 22:11
timotimo feared as much :( 22:12
jnthn I don't think it'd be a huge win anyway, fwiw 22:13
The LTM-er often guesses right first time.
timotimo cool 22:14
jnthn Thus the overhead of actually syncing up the various threaded runs (if you meant using multiple threads) would risk dominating any wins.
timotimo i was meaning multiple threads, yes. 22:14
jnthn When I put in the LTM stuff I had a load of traces running to help me debug it, and I noticed it was guesing quite well. 22:15
timotimo that's pretty amazing actually. i have no clue how it does that :| 22:16
sorear I think a more promising approach would be to scrape your code for "use" statements using a simple regex, and then start background precompilation of modules 22:17
jnthn sorear: mmm...yes :)
(separate compilation)++ 22:18
masak 'night, #perl6 22:21
FROGGS gnight 22:23
timotimo night masak
grondilu rn: say ^(3/2+1) 22:42
p6eval niecza v24-5-g599cbcb: OUTPUT«0..^<5/2>␤» 22:43
..rakudo 41a658: OUTPUT«0..^5/2␤»
grondilu rn: say eager ^(3/2+1) 22:43
p6eval rakudo 41a658: OUTPUT«0 1 2␤»
..niecza v24-5-g599cbcb: OUTPUT«===SORRY!===␤␤Undeclared routine:␤ 'eager' used at line 1␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.setting line 1443 (die @ 5) ␤ at /home/p6eval/niecza/src/STD.pm6 line 1147 (P6.comp_unit @ 37) ␤ at /hom…
grondilu rn: say my @ = ^(3/2) 22:44
p6eval rakudo 41a658, niecza v24-5-g599cbcb: OUTPUT«0 1␤»
grondilu rn: say my @ = ^(<3/2>.floor)
p6eval rakudo 41a658, niecza v24-5-g599cbcb: OUTPUT«0␤»
grondilu So I guess prefix:<^> doesn't use floor to convert to Int. 22:45
timotimo hm. should integration tests for the older perl6advent posts be there to point out inconsistencies between claims and implementation so that if spec changes, the advent post can be updated as well? 22:48
jnthn r: say 18.333 / 0.62 22:59
p6eval rakudo 41a658: OUTPUT«29.569355␤»
dalek kudo/nom: 8fb8bc1 | jnthn++ | src/core/Junction.pm:
Optimize the junction auto-threader.

This makes the benchmark:
   for 1..10 { say so 9999 == any(1..2000) }
Complete somewhere around 30 times faster.
23:04
kudo/nom: a308f34 | jnthn++ | docs/ChangeLog:
Update ChangeLog.
23:06
timotimo what, auto-threading is in rakudo already?
jnthn timotimo: Auto-threading of junctions doesn't have anything to do with threads. 23:07
I mean, it potentially could
It just means that an operation threads through the junction.
timotimo oh, so it goes faster not because it actually threads
but because the code that does it is just more efficient
jnthn Right.
timotimo 30 times, though. wow!
jnthn Quite a lot more efficient. :)
Yeah, now I know why people kept telling me auto-threading was slow. It really was! 23:08
timotimo i ran into that once, too ... 23:08
and i have absolutely no clue why your code changes improve performance
jnthn Well, this should make it hurt a bit less :)
[Coke] timotimo: if the old advent posts are wrong, it is awesome to update the tests to say "here's how that actually works these days". 23:15
I don't think we have to update the old post itself.
timotimo well, there are no tests yet for most of the advent posts 23:16
timotimo hm. can c++ libraries like SFML be wrapped using zavolaj? 23:22
i fear they can't :(
jnthn japhb: Think I may have found a clue to the X issue, but out of hacking time for now. Will see if I can have a go at it tomorrow... 23:25
timotimo: I think C++ libs are tricky because of the name mangling etc.
dalek blets: dd5acfd | (Herbert Breunung)++ | docs/appendix-a-index.txt:
add spurt to A
23:26
jnthn sleep; night o/ 23:27
timotimo night jnthn 23:29
if i have a role with has @!foo and a class that does that role, will it have access to it? or would that have to be has @.foo instead? 23:31
timotimo ah, i see. 23:35
timotimo r: say $result if my $result = 5 + 6; 23:46
p6eval rakudo a308f3: OUTPUT«===SORRY!===␤Variable $result is not declared␤at /tmp/7Y88nJVFHa:1␤------> say $result⏏ if my $result = 5 + 6;␤»
timotimo std: say $result if my $result = 5 + 6;
p6eval std a8bc48f: OUTPUT«===SORRY!===␤Variable $result is not predeclared at /tmp/S8Wo7FYaP5 line 1:␤------> say ⏏$result if my $result = 5 + 6;␤Check failed␤FAILED 00:00 43m␤»
timotimo right.
diakopter r: say my $result if $result = 5 + 6; 23:47
p6eval rakudo a308f3: OUTPUT«11␤»
timotimo oh, that's simple
i'm doing some wicked necromancy 23:48
a bit of software that used to require the "alpha" branch of rakudo :)
not saying what it is until i manage to actually make it run
why would $foo ~~ $.bar ever giev me "sorry: virtual call $.bar may not be used on partially constructed objects" inside a submethod? 23:50
oh, interestign 23:51
diakopter if it's called from a constructor?
timotimo turning it from a submethod into a method makes the error go away
so basically submethods might be called from the objects own constructor before it's constructed completely? or something?
diakopter :? 23:52
dalek blets: e91970d | (Herbert Breunung)++ | docs/appendix-a-index.txt:
added some see also
timotimo well, there must be some limitation to methods that are not limitations of submethods 23:53
lichtkind hai guys
lichtkind is there still a byte smethod but not in Str? 23:57
benabik Buf.bytes, perhaps? (guessing)
lichtkind benabik: thanks i thought so buts where can i look this up? 23:59