»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
timotimo do you want to dive into the CORE.setting? :) 00:00
psch uhm, sure? 00:01
i mean, how much worse than the optimizer can it be?
timotimo well, it's mostly pure-perl6
but with the occasional nqp op
maybe you can come up with an interesting module
psch i did have a look at the perl6-most-wanted, but there wasn't really anything i'd consider myself well capable of 00:04
timotimo well, then optimize for fun :) 00:05
i made the ADT module for fun, for example 00:07
i don't think anybody uses it, though
vendethiel timotimo: just linked it to some of my friends. That + subsets are changing what they think of perl6 :p 00:10
timotimo oh god what have i done =o
psch oh no! timotimo++ is indirectly promoting use of perl6! 00:11
what's gonna happen to the validity of uneducated_{f,p}oo's criticism?
that aside, i had been looking at RT #92826 recently, and i remember having partly solved it but not getting it quite to spec 00:12
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=92826
psch which is probably because i don't really grok the grammar at all
timotimo unspace are cool to have
but apparently not so easy to have in the grammar :P
psch m: "5"\ .\ say 00:13
camelia rakudo-moar 257e61: OUTPUT«===SORRY!=== Error while compiling /tmp/KStfdHmjNC␤Confused␤at /tmp/KStfdHmjNC:1␤------> "5"\ .\ ⏏say␤ expecting any of:␤ unspace␤ horizontal whitespace␤»
psch iirc i had that case working
timotimo hah, "expecting any of: unspace" 00:14
psch but there was another case that didn't work; i forgot the details and i probably trashed what i had
yeah that's another RT ticket
timotimo i wonder why it does that
psch it expects an unspace after the unspace, curiously
timotimo but i'm not sure i want to dive in
do you have a line number for me?
psch note the $eject it's before the say
timotimo ah, indeed 00:14
that's pretty bad :)
timotimo is that inside token methodop? 00:16
psch i *think* adding a non-capturing optional unsp before the non-capturing group in token methodop (line 4289) solved that case
timotimo do you know how to trace the grammar yet? 00:16
psch no 00:17
i hardly know anything haha :)
i'm mostly blindly stumbling through and trying things
i do know about --ll-exception
timotimo usually it should be enough to --rxtrace
but that only traces into compunit and then a different grammar class takes over
so you'll need to put a Perl6::Grammar.trace-on(Perl6::Grammar) somewhere before the parse happens 00:18
psch oh, ok 00:20
what does that actually mean?
timotimo er, i forgot to put the .HOW in between
github.com/perl6/nqp/blob/master/s...W.nqp#L805 that's where it leads 00:21
TimToady std: "5"\ .\ say 00:25
camelia std 09dda5b: OUTPUT«ok 00:01 121m␤»
timotimo in nqp, can a knowhow not get native attributes? 00:25
nqp: knowhow foobar { has int $!bar } 00:27
camelia ( no output )
timotimo nqp: class foobar { has int $!bar }
camelia ( no output )
timotimo that's weird o_O
turning some of the attributes of NQPClassHow into native attributes gives a parsefail 00:28
oh well. can't fix all the things :\ 00:29
psch timotimo: i don't understand how to use your information wrt trace-on 00:35
timotimo you could slap it into Perl6/Compiler.nqp
psch okay. the .HOW goes before trace-on? i.e. Perl6::Grammar.HOW.trace-on(Perl6::Grammar) 00:36
timotimo i think so 00:37
psch add i just add that somewhere in command_eval?
timotimo command_eval may be too late
i think you can put it in the outermost scope
where it adds the stages and such
i'm leaving now. good luck! 00:38
psch thanks and bye 00:39
psch i don't think i'll get anywhere with this information today though... timotimo++ # things to revise tomorrow 00:41
psch & 00:42
colomon "When pre-compiling a module, its dependencies must be pre-compiled first." 01:06
TimToady rosettacode.org/wiki/Casting_out_nines#Perl_6 01:49
colomon pandabrew not working for me today? 01:51
Cannot call 'postcircumfix:<{ }>'; none of these signatures match:
in any at gen/parrot/BOOTSTRAP.nqp:1219
colomon hmmm, $p.name is Miu 02:11
Mu
smls TimToady: Why do you use those ghastly naked backslash-variables so much... 02:18
smls :) 02:24
TimToady to indicate that they're "constant" over the life of the block 02:26
TimToady and so that the compiler can do SSA optimization more easily 02:27
raydiak am I the only one who gets warm fuzzy feelings from memories of childhood BASIC adventures when looking at those? 02:29
smls raydiak: nope :) 02:30
TimToady (which is, by the way, the main reason the = is required) 02:32
(or an argument/default in the case of a parameter)
lue colomon: I get the same thing with just panda. 03:09
colomon: look anything like this? gist.github.com/lue/1029c4d379bb8143b8f3
colomon yeah, I got basically all that.
lue Glad to see I'm not the only one after all :) 03:10
colomon lue: absolutely is panda for me too, pandabrew is calling it. 03:11
lue I figured that's what it was.
r: my $a = Hash[Mu,Int].new(1,2); say $a{1}; 03:17
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«2␤»
lue r: my $a = Hash[Mu,Int].new(1,2); say $a{Mu}; 03:17
camelia rakudo-moar dc42ad: OUTPUT«Cannot call 'postcircumfix:<{ }>'; none of these signatures match:␤:(Any \SELF, Any $key)␤:(Any \SELF, Any $key, :BIND($BIND)!)␤:(Any \SELF, Any $key, Any :SINK($SINK)!, *%other)␤:(Any \SELF, Any $key, Any :delete($delete)!, *%other)␤:(Any \SELF,…»
..rakudo-parrot dc42ad: OUTPUT«Cannot call 'postcircumfix:<{ }>'; none of these signatures match:␤:(Any \SELF, Any $key)␤:(Any \SELF, Any $key, :BIND($BIND)!)␤:(Any \SELF, Any $key, Any :SINK($SINK)!, *%other)␤:(Any \SELF, Any $key, Any :delete($delete)!, *%other)␤:(Any \SEL…»
..rakudo-jvm dc42ad: OUTPUT«Cannot call 'postcircumfix:<{ }>'; none of these signatures match:␤:(Any \SELF, Any $key)␤:(Any \SELF, Any $key, :BIND($BIND)!)␤:(Any \SELF, Any $key, Any :SINK($SINK)!, *%other)␤:(Any \SELF, Any $key, Any :delete($delete)!, *%other)␤:(Any \SELF, …»
[Coke] I just saw 6gvts.wordpress.com/2014/01/24/janu...much-more/ ... mmmhehehehe 05:30
atroxaper What is that?! 05:32
[Coke] I have no idea, but it's hilarious. :) 05:33
atroxaper If you has haters - you are best! :) 05:34
[Coke] "submitted by educated_poo". that sounds familiar. 05:36
[Coke] ~~ zzz 05:39
nwc10 moritz: yes, "tomorrow" is starting at 23:00 07:56
replace MySQL with a real database?
FROGGS_ MySQL is not that bad... I am working about 10 years with MySQL and there was never an issue that could not be solved 07:59
and this issue sounds rather solvable
diakopter I'm pretty sure it's using pg 08:07
moritz nwc10: oh noez 08:50
moritz ilbot support pg now, but I don't have a migration script that can clean up the character encoding mess that's in mysql right now 08:50
moritz *supports 08:51
diakopter sounds like a smopp 08:53
moritz depends on the quality of the result that I try to achieve 08:54
moritz doesn't help that there are 8.6mio rows to migrate 08:59
timotimo o/ from over here 09:04
moritz \o from there 09:05
raydiak within a redefinition of postcircumfix:<[ ]>, how do I call the un-overloaded version of [] instead of recursively calling the routine I'm inside of? 09:54
(or otherwise index into the object without [] )
moritz raydiak: are you sure you actually need to overload postcircumfix:<[ ]> ?
moritz raydiak: the usual method to overload indexing is by providing a method at_pos, which is called by .[] 09:55
*is to
raydiak moritz: absolutely not sure, but that's as a good a reason to try it out as to not, if you ask me :)
moritz m: class A { method at_pos($idx) { 5 * $idx } }; say A.new[12]
camelia rakudo-moar dc42ad: OUTPUT«60␤» 09:56
moritz m: class A { method at_pos($idx) { 5 * $idx } }; say A.new[12..14]
camelia rakudo-moar dc42ad: OUTPUT«60 65 70␤»
moritz raydiak: that might be a much nicer interface for you; the .[] already resolves slices and all, and at_pos only needs to providing indexing for a single integer
raydiak that'd be great for most cases of my question...but I specifically wanted to return a slice from a single index in this case 09:57
timotimo you can still return a slice from at_pos :P 09:58
kind of like an array of arrays
raydiak oh, okay, great then
moritz m: class A { method at_pos($idx) { $idx..($idx + 3) } }; say A.new[12]
camelia rakudo-moar dc42ad: OUTPUT«12..15␤»
moritz m: class A { method at_pos($idx) { ($idx..($idx + 3)).list } }; say A.new[12] 09:58
camelia rakudo-moar dc42ad: OUTPUT«12 13 14 15␤»
raydiak great, thanks as always moritz++ 09:59
moritz if you do want to overload .[] (which I don't recommend, if you can avoid it) you can use $array.at_pos to get low-level access to the array
raydiak: you're welcome
timotimo we do have some syntax specced to get at individual candidates, don't we? 10:00
the difficult thing is that values rather than just types can determine what candidates gets the job
raydiak I'm just messing around, but got it in my head to try a 2D matrix class as a single array 10:01
timotimo that's sensible 10:02
personally, i'd back that with a nqp::list_n bound to a private var for a bit less overhead
but i'm an internals hacker :P
raydiak nqp is rakudo-only and entirely outside of the spec, correct? 10:03
moritz yes
timotimo yes
there still needs to be a nice mechanism for plopping in backend-specific and backend-agnostic implementations 10:04
raydiak it's certainly a thought when it's closer to working and ready to worry about working faster 10:05
timotimo yeah, fair enough
raydiak \o/ it works...so the generator I wrote for vector operations might be easily reusable to write the matrix operations 10:12
if this things gets much more flexible, it's going to be another new module, too 10:13
FROGGS masak: when do we want to do our RT hackathon? next weekend? 10:16
timotimo something a little similar to NumPy for perl6 will be very important in the long run
but we really, really need native arrays
raydiak yes, I spent days trying to figure out how to fit like 0.5 megapixels in under 2 gigs :) 10:18
timotimo yeah :(
with low-level operations on nqp::list_* you can get pretty close to a sensible memory usage 10:19
but that's no replacement for a correct implementation of native arrays
raydiak jnthn++ mentioned it was high up on his list when he takes a break from moar 10:22
timotimo yes 10:22
i'm glad that the same thing will also cause native variables work better as lvalues
as in my int $foo; $foo++ 10:23
r: my int $foo = 10; $foo++; say $foo;
camelia rakudo-jvm dc42ad: OUTPUT«Cannot modify an immutable value␤ in sub postfix:<++> at gen/jvm/CORE.setting:4349␤ in sub postfix:<++> at gen/jvm/CORE.setting:1763␤ in block at /tmp/tmpfile:1␤␤»
..rakudo-parrot dc42ad: OUTPUT«Cannot modify an immutable value␤ in sub postfix:<++> at gen/parrot/CORE.setting:4353␤ in sub postfix:<++> at gen/parrot/CORE.setting:1767␤ in block at /tmp/tmpfile:1␤␤»
..rakudo-moar dc42ad: OUTPUT«No such method 'STORE' for invocant of type 'Int'␤ in sub postfix:<++> at src/gen/m-CORE.setting:4349␤ in sub postfix:<++> at src/gen/m-CORE.setting:1763␤ in block at /tmp/tmpfile:1␤␤»
moritz regarding ilbot mysql -> pg conversion, there are 120 lines of non-UTF8 in the mysql database that need to be manually fixed up
diakopter wat
timotimo manually? o_O
diakopter wat to moar above
timotimo er 10:24
how does it have an Int in there?
diakopter wat
m: my int \foo = 4; foo++ 10:25
camelia rakudo-moar dc42ad: OUTPUT«Type check failed in binding; expected 'Int' but got 'int'␤ in any bind_error at src/vm/moar/Perl6/Ops.nqp:216␤ in block at /tmp/QSnoXuRm9M:1␤␤»
timotimo is that about Want not working?
diakopter *shrug
timotimo if our QAST::Want won't create natives, there's quite a bit of performance to be had
moritz it seems like does create natives 10:26
it just doesn't box correctly
FROGGS - QAST::Want 4 - QAST::WVal(Int) - Ii - QAST::IVal(4)
- QAST::WVal(int)
timotimo hm, okay
... WVal(int) is a thing? 10:27
diakopter m: my int \::foo = 4; foo++ 10:29
camelia rakudo-moar dc42ad: OUTPUT«===SORRY!===␤Type 'int' is not declared. Did you mean 'Int'?␤at /tmp/Dm4g0Udr90:1␤------> my int ⏏\::foo = 4; foo++␤Malformed my␤at /tmp/Dm4g0Udr90:1␤------> my int ⏏\::foo = 4; foo++…»
diakopter o_O
FROGGS std: my int \::foo = 4; foo++ 10:30
camelia std 09dda5b: OUTPUT«===SORRY!===␤Multiple prefix constraints not yet supported at /tmp/Z3Uaf2EI3a line 1:␤------> my int ⏏\::foo = 4; foo++␤Malformed my at /tmp/Z3Uaf2EI3a line 1:␤------> my int ⏏\::foo = 4; foo++…»
raydiak \o night all 10:37
timotimo gnite raydiak!
moritz moritz.faui2k3.org/tmp/broken-utf8.log those are the lines with non-UTF-8 encoding 10:39
timotimo hah 10:40
one of the early lines is about encoding breakage actually
that amuses me
masak antenoon, #perl6
moritz I wonder if I should just decode them all as ISO-8859-15
moritz -> afk
masak tadzik++ # star 10:41
nwc10 moritz: well, the first line appears to be Swedish in MacRoman :-) 10:44
I can't work out what the Ât an ÂL are, but the latter I think is trying to be a pound sign 10:45
sergot o/ 10:51
tadzik o/ 11:02
FROGGS o/ 11:08
FROGGS question: to open a pipe we do open( ..., :p ), right? 11:27
why don't I find a single test about that?
colomon module smoke test blew up last night because panda is broken. :( 12:31
vendethiel are there splats in perl6? sub second-to-last(*@ [*@, $value, $]) { $value } 12:44
(I know [*@, $a] works but I'm looking for more "advanced" features) 12:45
vendethiel I can understand why multiple variadics aren't allowed, but `sub some-vals(*@ [$fst, *@, $lst]) { $fst ~ $lst }` seems like a nice feature to have 12:47
psch hi #perl6 12:52
timotimo hi psch
vendethiel: where does "splat" come from?
psch "splat" is an old berkley name for * isn't it 12:53
should be in esr's jargon file somewhere i think
vendethiel timotimo: ES6 / ruby 12:54
timotimo ah
psch timotimo: i added the .trace-on in main.nqp, which is where the stages are added and the compiler gets build 13:01
unfortunate side-effect: stage parse went up to ~1800 seconds
...but it's for debugging so that's ok-ish, except it takes long :)
it did kill one of my terminals though... 13:02
timotimo wow 13:03
psch about 18 times slower for me, i'm usually at around 100 seconds for jvm and moar each 13:04
colomon vendethiel: I believe the pattern matching you're looking for is available, but you've got the format wrong. but then, I can never remember exactly how to do it. 13:06
timotimo psch: it turns off the method cache, so that could explain it :P 13:07
no, wait
i think it replaces all methods returned with a wrapped method that also prints a little bit 13:08
psch timotimo: the later sounds likely
there was much output
colomon m: sub first-and-last([$first, *@, $last]) { $fst ~ $lst }; say first-and-last(1 … 10); 13:19
camelia rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/Hh8K3jtNYg␤Cannot put required parameter $last after variadic parameters␤at /tmp/Hh8K3jtNYg:1␤------> sub first-and-last([$first, *@, $last⏏]) { $fst ~ $lst }; say first-and-l…»
colomon p: sub first-and-last([$first, *@, $last]) { $fst ~ $lst }; say first-and-last(1 … 10); 13:20
camelia rakudo-parrot dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/4zEgsLKjMi␤Cannot put required parameter $last after variadic parameters␤at /tmp/4zEgsLKjMi:1␤------> sub first-and-last([$first, *@, $last⏏]) { $fst ~ $lst }; say first-and…»
colomon m: sub first-and-last([$first, *@]) { $first }; say first-and-last(1 … 10); 13:23
camelia rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/RgjmGYmFMI␤Unable to parse expression in argument list; couldn't find final ')' ␤at /tmp/RgjmGYmFMI:1␤------> *@]) { $first }; say first-and-last(1 ⏏… 10);␤ expec…»
colomon m: sub first-and-last([$first, *@rest]) { $first }; say first-and-last(1 … 10); 13:24
camelia rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/nxCS32olCh␤Unable to parse expression in argument list; couldn't find final ')' ␤at /tmp/nxCS32olCh:1␤------> est]) { $first }; say first-and-last(1 ⏏… 10);␤ expec…»
colomon m: sub first-and-last([$first, *@rest]) { $first }; say first-and-last(1…10); 13:25
camelia rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/rKh2Z2jMxy␤Unable to parse expression in argument list; couldn't find final ')' ␤at /tmp/rKh2Z2jMxy:1␤------> @rest]) { $first }; say first-and-last(1⏏…10);␤ expect…»
colomon p: sub first-and-last([$first, *@rest]) { $first }; say first-and-last(1…10);
camelia rakudo-parrot dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/WapcSw9t2V␤Unable to parse expression in argument list; couldn't find final ')' ␤at /tmp/WapcSw9t2V:1␤------> @rest]) { $first }; say first-and-last(1⏏…10);␤ expe…»
psch EELLIPSIS
colomon oh, idiot IRC client
p: sub first-and-last([$first, *@rest]) { $first }; say first-and-last(<a b c>); 13:26
camelia rakudo-parrot dc42ad: OUTPUT«a␤»
psch hrm, my ~40 minute build blew up, turns out moar can't handle .trace-on 13:27
at least that's what i take from this 13:28
gist.github.com/peschwa/8752353
(that's not the build of course, but it's the same error)
updated the gist with the actual build error 13:29
oh i found something else i gisted a few days back 13:30
r: True.foo 13:31
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«No such method 'foo' for invocant of type 'Bool'␤ in block at /tmp/tmpfile:1␤␤»
psch that did blow up in the REPL for moar as well
gist.github.com/peschwa/8697850 # as per here
colomon gist.github.com/colomon/8752778 # the panda error 14:05
tadzik: ^^
tadzik: sorry I don't have time to debug it here at the moment.
tadzik colomon: yeah, looking into it
colomon tadzik++
vendethiel p: sub fst([$fst, *@]) { $fst }; say fst <a b c>; 14:12
camelia rakudo-parrot dc42ad: OUTPUT«a␤»
vendethiel p: sub fst([$fst, $snd, *@]) { $snd }; say fst <a b c>; 14:13
camelia rakudo-parrot dc42ad: OUTPUT«b␤»
vendethiel p: sub fst([$, $snd, *@]) { $snd }; say fst <a b c>;
camelia rakudo-parrot dc42ad: OUTPUT«b␤»
vendethiel p: sub fst([$, $snd, *@, $lst]) { $snd ~ $lst }; say fst <a b c d e>;
camelia rakudo-parrot dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/lEZnK856ve␤Cannot put required parameter $lst after variadic parameters␤at /tmp/lEZnK856ve:1␤------> sub fst([$, $snd, *@, $lst⏏]) { $snd ~ $lst }; say fst <a b c d e>;…»
vendethiel ^ colomon: that's why I'd like to do
psch m: sub fst([$fst, *@tail]) { $fst ~ @tail[*-1] }; say fst <a b c>; # have to deal with @tail directly 14:15
camelia rakudo-moar dc42ad: OUTPUT«ac␤»
tadzik ok, json in somewhat broken on moarvm 14:21
gist.github.com/tadzik/8753025 14:24
gives different results for the panda bootstrap file on parrot and on moar
vendethiel psch: yeah, I guess, not that big of a deal. Is there a reason for that, though ? Some languages implement it 14:25
tadzik moritz: ^^
psch vendethiel: as for reasons, i'm afraid i'm definitely the wrong person to ask; i'd imagine it comes down to optimization concerns 14:26
FROGGS tadzik: is it possible that the version differs for perl6-p and perl6-m? 14:29
because the latest .ast/make changes could explain the difference
I'd guess you have to itemize hashes (json objects) or so 14:30
tadzik FROGGS: oh! 14:33
FROGGS: yeah, I don't update rakudo-parrot that often
tadzik FROGGS: hm, but, how do I itemize them, if list repots 18 elements? 15:07
FROGGS I think a "make $( ... )" would do 15:08
tadzik ohh, in JSON code>
I mean, JSON-Tiny's code
FROGGS in the json actions
tadzik so it _is_ brokeN :)
FROGGS hey, I am just guessing :o)
tadzik :P
moritz tadzik: are rakudo-m and rakudo-p on the same revision? to me it looks like before vs. after 8128f6a5 (rakudo commmit) 15:12
tadzik: also updating to newest json in panda should help
tadzik moritz: oh, indeed, that helped 15:15
tadzik (stupid submodules grumble grumble) 15:15
I have to commit the
* them between pulling and bootstrap.pl, cos bootstrap.pl will reset them to the commited state
(stupid bootstrap.pl grumble) 15:16
moritz :-)
dalek nda: f80ec50 | tadzik++ | ext/JSON__Tiny:
Update JSON::Tiny
15:18
dalek nda: ae6eab5 | (Tobias Leich)++ | lib/Panda/Fetcher.pm:
cleanup path to pass use it in substr

See irclog.perlgeek.de/perl6/2013-11-25#i_7914075
15:31
nda: c00f5cf | tadzik++ | lib/Panda/Fetcher.pm:
Merge pull request #62 from FROGGS/patch-1

cleanup path to pass use it in substr
tadzik yay, I went through all the pull requests 15:36
moritz tadzik++ 15:43
timotimo hm. fosdem is going on right now, isn't it? 15:56
moritz does a trial mysql -> pg transition for ilbot on his laptop 15:57
tadzik timotimo: aye 15:58
timotimo pages through the perl track 16:00
do i see correctly that there are no live streams?
dalek nda: adb7195 | tadzik++ | lib/Panda/App.pm:
Make "panda info" output nicer and more useful. Closes #49
16:05
psch timotimo: streaming.fosdem.org has a stream for "Stop Building Bridges to Nowhere: Build Bridges to MoarVM instead", but the sound seems broken 16:06
tadzik I only see a flower 16:09
psch i had video with audio static a moment ago, but it's gone now it seems 16:11
well, the talk is scheduled to be over now 16:12
spider-mario moritz : github.com/rakudo/star/commit/0a16...921d11R167 ← shouldn’t there be brackets? 16:20
(L. 167)
spider-mario this line results in the following warning: 16:21
Useless use of private hash in void context at Configure.pl line 167.
moritz spider-mario++ # good catch 16:22
moritz this whole thing will come crashing down eventually, I fear 16:23
dalek ar: a49cc41 | moritz++ | Configure.pl:
[Configure.pl] properly parentize.

This is not Perl 6 code. spider-mario++
moritz because parrot and moar have conflicit ideas of what CC, LDFLAGS etc. should be
moritz so merging it all into a single hash is headed for DOOM anyway 16:24
benabik "Stage parse: 66865.559", I think that's a new record. 16:36
(Personal record at least.)
moritz benabik: you ahven't seen paste.scsys.co.uk/297069 :-) 16:38
m: say 1144911.468 / 66865.559
camelia rakudo-moar dc42ad: OUTPUT«17.122588746␤»
moritz benabik: that's from nwc10++ who patched MoarVM locally to do a full GC run after each allocation, or something like that :-) 16:39
benabik moritz: What was that? Mine was just having my computer go to sleep mid-parse.
Ah, GC torture testing... That's slow.
vendethiel what's the bottom type in perl6 ? 17:18
psch r: "foo".^mro.say; 5.^mro.say 17:20
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«(Str) (Cool) (Any) (Mu)␤(Int) (Cool) (Any) (Mu)␤»
psch r: (1|2).^mro.say
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«(Junction) (Mu)␤»
psch ok, bottom type is not the same as object root 17:21
psch needs to learn more CS terminology
benabik Mu is something of the top type. Anything can be assigned to Mu. I don't know that there is a bottom that can be assigned to anything. (Unless you mean bottom in a different way than type lattices.)
diakopter psch: jnthn is streaming now
psch diakopter: thanks, i'll have a look
vendethiel: from the wikipedia page to bottom type i think Nil might be what you want 17:22
vendethiel psch: thanks
benabik Oooh, Nil. Lack of value, yes.
vendethiel psch: because it's gradually typed, variant type is at the bottom. 17:23
which means casting Nil to something else is an upcast
benabik There is also Failure, but I'm not sure how it interacts with typechecking.
psch m: my Mu $f = Failure.new; my Any $g = Failure.new; my Cool $h = Failure.new
camelia rakudo-moar dc42ad: OUTPUT«Not enough positional parameters passed; got 1 but expected 2␤ in method new at src/gen/m-CORE.setting:12181␤ in block at /tmp/wT8HayeF5o:1␤␤»
benabik m: my Mu $f = Failure.new('Mu'); my Any $g = Failure.new('Any'); my Cool $h = Failure.new('Cool') 17:27
camelia rakudo-moar dc42ad: OUTPUT«No such method 'throw' for invocant of type 'Str'␤ in method sink at src/gen/m-CORE.setting:12212␤ in method BUILDALL at src/gen/m-CORE.setting:923␤ in method bless at src/gen/m-CORE.setting:842␤ in method new at src/gen/m-CORE.setting:827␤ …»
colomon jnthn++ streaming? link?
benabik m: my Mu $f = fail('Mu'); my Any $g = fail('Any'); my Cool $h = fail('Cool') 17:28
camelia rakudo-moar dc42ad: OUTPUT«Unhandled exception: Mu␤ at src/gen/m-CORE.setting:10811 (/home/p6eval/rakudo-inst-2/languages/perl6/runtime/CORE.setting.moarvm:throw:129)␤ from src/gen/m-CORE.setting:12212 (/home/p6eval/rakudo-inst-2/languages/perl6/runtime/CORE.setting.moarvm:s…»
virtualsue there's a live stream of the perl devroom at fosdem: europe1.fosdem.sesse.net/ (room k3.201) if anyone is interested
benabik psch: I suppose it's less type checking failure and more the eagerness with which failure throws. :-/ 17:29
colomon I can hear jnthn! \o/
benabik ... Missed beginning. What's topic of talk? 17:31
colomon benabik: I have a vague memory it's a generic p6 talk? 17:32
virtualsue what you can do now with perl6
psch "What you can do today" i think
yeah, that
virtualsue snap
fosdem.org/2014/schedule/track/perl/ 17:33
benabik Yeah, the stream list said the room was empty so I was a bit confused.
virtualsue++ # Useful links 17:34
virtualsue no problem
i'm enjoying the talk in person :)
benabik Woo, perl6-m 17:35
psch m: try { my $x = X::AdHoc.new(:payload("foo")); my Mu $f = Failure.new($x); my Any $g = Failure.new.($x); my Cool $h = Failure.new($x); CATCH { when Any { say "Any"; .rethrow }; when Cool { say "Cool"; .rethrow }; when Mu { say "Mu"; } } } 17:36
camelia rakudo-moar dc42ad: OUTPUT«Any␤Not enough positional parameters passed; got 1 but expected 2␤ in method new at src/gen/m-CORE.setting:12181␤ in block at /tmp/wWjG9eXWrg:1␤␤»
psch right, the .rethrow didnt even work
m: try { my $x = X::AdHoc.new(:payload("foo")); my Mu $f = Failure.new($x); my Any $g = Failure.new.($x); my Cool $h = Failure.new($x); CATCH { when Any { say "Any"; }; when Cool { say "Cool"; }; when Mu { say "Mu"; } } }
camelia rakudo-moar dc42ad: OUTPUT«Any␤»
colomon ugh, static
raydiak ow fix teh mic :P
psch ...but that just shows that any Exception matches Any
benabik r: say Mu ~~ Failure, Any ~~ Failure, Cool ~~ Failure 17:37
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«FalseFalseFalse␤»
psch benabik: well they're all above Failure, ~~ against undefined lhs checks nqp::istype(rhs, lhs) 17:38
benabik Erm, did I do that backwards?
psch m: say Failure ~~ Mu
camelia rakudo-moar dc42ad: OUTPUT«True␤»
benabik r: say Failure ~~ Mu, Failure ~~ Any, Failure ~~ Cool
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«TrueTrueFalse␤»
psch r: Failure ~~ Exception # this surprised me just now 17:39
camelia ( no output )
psch r: say Failure ~~ Exception, Exception ~~ Failure
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«FalseFalse␤»
benabik Failure has-a Exception, not is-a 17:40
dalek osystem: 1220bd8 | sergot++ | META.list:
HTTP::Request added, Response and UA soon
17:41
raydiak turns off fosdem static 17:46
\o morning #perl6
benabik is going to wait for the slides rather than periodically getting deafened by static.
psch hi raydiak++ # turning off the static
TimToady obviously they're mixing together a wired and wireless mic feed, and he's using the wired, so the wireless mic is off, and we're picking up static instead 17:47
probably someone demoing their software radio :) 17:48
benabik Wouldn't be nearly as bad if the static was the same volume as jnthn, instead of significantly louder.
rindolf Hi all.
TimToady it comes and goes, I just run it down to make the static bearable, then I know when it's gone away again
then I run the volume back up
rindolf has CPANTS overload, but has already done most of the work.
colomon jnthn++ 18:02
Ulti ghv.artzub.com/#repo=rakudo&cli...ser=rakudo this is neat 18:21
TimToady why is the primary language of star 'Perl' 18:26
rakudo's is 'Perl 6'
well, Perl6, but yeah
raydiak I've heard that the perl 6 recognition on github still has its flaws 18:28
Ulti plus I guess historically everything was marked as Perl rather than Perl 6 18:29
raydiak amusing anecdote for the day: the g/f saw a mention of "hacking" on my screen and became concerned about the nature of my work 18:46
diakopter *giggle* 18:50
vendethiel :r say 0..1.perl; say 0...3.perl 19:04
vendethiel not sure what's the difference between .. and ... :o) 19:05
moritz r: say (0..1).^name 19:07
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«Range␤»
moritz r: say (0...1).^name
vendethiel oh, with three dots it's a list.
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«List␤»
moritz vendethiel: basically .. creates a Range object, and only supports "increment by one"
but it also supports range checking etc.
vendethiel moritz: what's the purpose of .. if it's more limited ? Lists are lazy too, ain't they ?
moritz but ... also supports smart increemnts
vendethiel: but you can do smart-match against a Range in O(1) 19:08
vendethiel moritz: smart-matching lists force them to be evaluated ?
oh okay, three dots is eager 19:09
moritz vendethiel: three dots aren't eager
vendethiel r: 0...Inf 19:10
camelia ( no output )
vendethiel uh, that coredumped for me
moritz vendethiel: but since lists aren't always monotonic, smart-matching has to iterate the whole list until it finds something
vendethiel maybe it was "fixed" recently
moritz vendethiel: well, if you run it in the REPL, it tries to print the value of the last expression 19:10
vendethiel: and to print it, it has to iterate it
vendethiel ah yes, thanks 19:11
moritz vendethiel: to prevent that, add a ; 1; at the end
vendethiel yeah that's what I did :). I know scala and some others languages just show `Stream(1, Stream(?))` or something
moritz that's something we could consider too 19:12
at least for .gist, not .Str
timotimo d'oh, i missed the streams 19:19
timotimo are there stream dumps anywhere? 19:19
raydiak r: say 1.5 ~~ (1..2); say 1.5 ~~ (1...2); 19:20
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«True␤False␤»
raydiak vendethiel: ^
vendethiel raydiak: yep thanks :)
vendethiel whereas a smartmatch on a list would only check its elements then 19:21
raydiak right, just like the 1...2 is doing
vendethiel yeah that's what I meant.
raydiak sounds like you got it figured out, then :) 19:22
vendethiel Yeah, 3 days of Perl6 and I can read many examples and just understand them/figure out what they do 19:23
psch unspace.t down to 12 skips from 18 \o/
there's at least one test that utterly confuses me though
vendethiel at first I was scared all these operators would take a long time to learn but really, it's just combinations
raydiak yep...most languages seem scary until you know them 19:24
I was scared of all the symbols that weren't on my keyboard 19:25
vendethiel oh, some languages are still scary after using them for almost 2 years :p.
psch unspace.t:83 doesn't make sense to me. what i see is that it calls postcircumfix:<( )> on a Str and the test is skipped (for niecza) with exactly that as a message and "parse failure" for rakudo...
but .("x") on a function that returns 'a' *should* complain about not finding postcircumfix:<( )>, right? :/ 19:26
timotimo er ... 19:27
timotimo you mean like sub foobar($arg) { return 'a' }; foobar.("x")? 19:27
timotimo looks up the actual test itself 19:28
psch timotimo: exactly like that, but unspaced of course 19:29
timotimo it'd seem like that's supposed to pass "x" to the version of foo that takes an argument and returns it 19:30
so sub foo($x) { $x }
psch but the method dot goes on the return value, not the function
which is consistent with say and whatelsehaveyou
vendethiel r: class A { sub one { 'a'; } submethod two { 'b' } method thr { 'c'} }; my A @a .= new; say @a.one~@a.two~@a.thr;
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Two terms in a row␤at /tmp/tmpfile:1␤------> class A { sub one { 'a'; } ⏏submethod two { 'b' } method thr { 'c'} ␤ ex…»
timotimo hmm.
vendethiel r: class A { sub one { 'a'; }; submethod two { 'b' }; method thr { 'c'} }; my A @a .= new; say @a.one~@a.two~@a.thr; 19:31
psch timotimo: i think the intention was somewhat like foo\ ("x")\ .\ lc or somesuch
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«No such method 'two' for invocant of type 'Array[A]'␤ in block at /tmp/tmpfile:1␤␤»
vendethiel r: class A { sub one { 'a'; }; submethod two { 'b' }; method thr { 'c'} }; my A @a .= new; say @a.one~@a.thr;
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«No such method 'thr' for invocant of type 'Array[A]'␤ in block at /tmp/tmpfile:1␤␤»
vendethiel whoops.
timotimo psch: no, i do think that ought to execute the sub foo with the argument "x"
vendethiel r: class A { sub one { 'a'; }; submethod two { 'b' }; method thr { 'c'} }; my A $a .= new; say $a.one~$a.two~$a.thr;
timotimo rather than call postcircumfix on the result
psch r: say.("foo")
camelia rakudo-jvm dc42ad: OUTPUT«one(A<1820025559>bc)␤»
..rakudo-parrot dc42ad: OUTPUT«one(A<-9014862644126962107>bc)␤»
..rakudo-moar dc42ad: OUTPUT«one(A<140363782481680>bc)␤»
rakudo-parrot dc42ad: OUTPUT«␤No such method 'postcircumfix:<( )>' for invocant of type 'Bool'␤ in any at gen/parrot/BOOTSTRAP.nqp:1692␤ in any at gen/parrot/BOOTSTRAP.nqp:1674␤ in block at /tmp/tmpfile:1␤␤»
..rakudo-jvm dc42ad: OUTPUT«␤No such method 'postcircumfix:<( )>' for invocant of type 'Bool'␤ in any at gen/jvm/BOOTSTRAP.nqp:1680␤ in any at gen/jvm/BOOTSTRAP.nqp:1663␤ in block at /tmp/tmpfile:1␤␤»
..rakudo-moar dc42ad: OUTPUT«␤Cannot find method 'postcircumfix:<( )>'␤ in block at /tmp/tmpfile:1␤␤» 19:32
timotimo oh, huh.
psch r: &say.("foo")
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«foo␤»
psch that might be it?
vendethiel what did I do ôÔ
timotimo &x may be bound to any object that does the Callable role, such as any Block or Routine. The Callable role implies the ability to support postcircumfix:<( )>.
vendethiel r: class A { sub one { return 'a'; }; submethod two { return 'b' }; method thr { return 'c'} }; my A $a .= new; say $a.one; say $a.two; say $a.thr; 19:34
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«one(A.new())␤b␤c␤»
timotimo vendethiel: the sub "one" ought to be called via A::one, i believe
ah, duh :)
vendethiel the "NL" seems messed ?
timotimo it's the one method on Any that's leaking through
it's like the "one" sub; it creates a junction
vendethiel r: class A { sub foobv { return 'a'; }; submethod two { return 'b' }; method thr { return 'c'} }; my A $a .= new; say $a.foobv; say $a.two; say $a.thr;
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«No such method 'foobv' for invocant of type 'A'␤ in block at /tmp/tmpfile:1␤␤»
vendethiel r: A::foobv().say 19:35
camelia rakudo-moar dc42ad: OUTPUT«===SORRY!===␤Could not find symbol '&foobv'␤»
..rakudo-jvm dc42ad: OUTPUT«Could not find symbol '&foobv'␤ in method <anon> at gen/jvm/CORE.setting:12211␤ in any at gen/jvm/Metamodel.nqp:2610␤ in any find_method_fallback at gen/jvm/Metamodel.nqp:2609␤ in any find_method at gen/jvm/Metamodel.nqp:947␤ in any at gen/…»
..rakudo-parrot dc42ad: OUTPUT«Could not find symbol '&foobv'␤ in method <anon> at gen/parrot/CORE.setting:12232␤ in any at gen/parrot/Metamodel.nqp:2693␤ in any find_method_fallback at gen/parrot/Metamodel.nqp:2681␤ in any find_method at gen/parrot/Metamodel.nqp:948␤ …»
psch class A { sub one { return 'a'; }; submethod two { return 'b' }; method thr { return 'c'} }; my A $a .= new; say $a.one; say $a.two; say $a.thr;
timotimo i think the sub also has to be declared "has"
psch ahgrh
copied the \n...
vendethiel r: class A { sub foobv { return 'a'; }; } say A::foobv
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Two terms in a row␤at /tmp/tmpfile:1␤------> class A { sub foobv { return 'a'; }; } ⏏say A::foobv␤ expecting any of:…»
vendethiel r: class A { sub foobv { return 'a'; }; }; say A::foobv();
camelia rakudo-moar dc42ad: OUTPUT«===SORRY!===␤Could not find symbol '&foobv'␤»
..rakudo-jvm dc42ad: OUTPUT«Could not find symbol '&foobv'␤ in method <anon> at gen/jvm/CORE.setting:12211␤ in any at gen/jvm/Metamodel.nqp:2610␤ in any find_method_fallback at gen/jvm/Metamodel.nqp:2609␤ in any find_method at gen/jvm/Metamodel.nqp:947␤ in any at gen/…»
..rakudo-parrot dc42ad: OUTPUT«Could not find symbol '&foobv'␤ in method <anon> at gen/parrot/CORE.setting:12232␤ in any at gen/parrot/Metamodel.nqp:2693␤ in any find_method_fallback at gen/parrot/Metamodel.nqp:2681␤ in any find_method at gen/parrot/Metamodel.nqp:948␤ …»
vendethiel It's lexically scoped :P. 19:36
I guess that at first. But then, there's no "visibility" of sorts ?
psch timotimo: so i add the & to realize the intention of the test? or is there something else i'm missing?
timotimo i'm not certain :( 19:37
moritz vendethiel: you can say 'our sub foobv', but the idiomatic thing is to export it instead 19:38
vendethiel r: class A { our sub foobv { return 'a'; }; }; say A::foobv();
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«a␤»
vendethiel class A { my method tryprivate { return 'a'; } }; say A.new.tryprivate() 19:39
r: class A { my method tryprivate { return 'a'; } }; say A.new.tryprivate()
whoops :)
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«No such method 'tryprivate' for invocant of type 'A'␤ in block at /tmp/tmpfile:1␤␤»
vendethiel yay, so that's how you <visibility> 19:40
timotimo not really
using method !private is more common
vendethiel r: class A { method tryprivate !private { return 'a'; } }; say A.new.tryprivate()
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Missing block␤at /tmp/tmpfile:1␤------> class A { method tryprivate ⏏!private { return 'a'; } }; say A.new.tr␤ expect…»
vendethiel or should that be unspaced?
moritz r: class A { method !tp { return 'a' } }; say A.new!tp 19:41
timotimo r: class A { method !tryprivate { return 'a'; } }; say A.new.tryprivate()
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Private method call to tp must be fully qualified with the package containing the method␤at /tmp/tmpfile:1␤------> ethod !tp { return 'a' …»
rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«No such method 'tryprivate' for invocant of type 'A'␤ in block at /tmp/tmpfile:1␤␤»
vendethiel r: class A { method !tp { return 'a' } }; say A::tp(A.new) 19:43
camelia rakudo-jvm dc42ad: OUTPUT«Could not find symbol '&tp'␤ in method <anon> at gen/jvm/CORE.setting:12211␤ in any at gen/jvm/Metamodel.nqp:2610␤ in any find_method_fallback at gen/jvm/Metamodel.nqp:2609␤ in any find_method at gen/jvm/Metamodel.nqp:947␤ in any at gen/jvm…»
..rakudo-moar dc42ad: OUTPUT«===SORRY!===␤Could not find symbol '&tp'␤»
..rakudo-parrot dc42ad: OUTPUT«Could not find symbol '&tp'␤ in method <anon> at gen/parrot/CORE.setting:12232␤ in any at gen/parrot/Metamodel.nqp:2693␤ in any find_method_fallback at gen/parrot/Metamodel.nqp:2681␤ in any find_method at gen/parrot/Metamodel.nqp:948␤ in …»
raydiak r: class A { trusts GLOBAL method !tp { return <a> } }; say A.new!A::tp 19:45
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Two terms in a row␤at /tmp/tmpfile:1␤------> class A { trusts GLOBAL ⏏method !tp { return <a> } }; say A.new!A␤ expec…»
raydiak r: class A { trusts GLOBAL; method !tp { return <a> } }; say A.new!A::tp
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«a␤»
vendethiel that seems dangerous.
trusts is like C++'s friend ?
kanishka is there any alternative for logstash or fluentd in perl ? 19:46
raydiak well calling a private method from outside the class requires some extra messing about...it is, after all, supposed to be private
idk C++
vendethiel yeah I like it better that way too =)
my only question left is WRT subtyping, so let's do it : 19:47
r: class A { my sub a { return 1 }; }; class B extends A { sub b { return $self->a() + 1 } }; say B.new.a() 19:48
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Unable to parse class definition␤at /tmp/tmpfile:1␤------> s A { my sub a { return 1 }; }; class B ⏏extends A { sub b { return…»
vendethiel r: class A { my sub a { return 1 }; }; class B does A { sub b { return $self->a() + 1 } }; say B.new.a()
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤A is not composable, so B cannot compose it␤at /tmp/tmpfile:1␤------> ␤»
vendethiel r: class A { my sub a { return 1 }; }; class B is A { sub b { return $self->a() + 1 } }; say B.new.a()
moritz vendethiel: inheritance is done with 'is'
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Unsupported use of -> as postfix; in Perl 6 please use either . to call a method, or whitespace to delimit a pointy block␤at /tmp/tmpfile:1␤---…»
vendethiel moritz: 2fast
r: class A { my sub a { return 1 }; }; class B is A { sub b { return $self.a() + 1 } }; say B.new.a() 19:49
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Variable '$self' is not declared␤at /tmp/tmpfile:1␤------> class B is A { sub b { return $self.a()⏏ + 1 } }; say B.new.a()[0…»
moritz vendethiel: and if you want to call stuff as methods, you have to declare them as methods
vendethiel moritz: so sub is lexically scoped
moritz yes
vendethiel and method isnt ?
moritz and methods live in the method table
vendethiel yeah
moritz and $self is spelled self
vendethiel so $self only when you explicitly set it to be a parameter? 19:50
moritz yes
vendethiel ie sub b($self:) {}
moritz correct
vendethiel I'll try it in my text editor cause it's a bit hard to see what's going on here 19:50
Is there a perl6 bundle for SublimeText/TextMate etc? 19:51
moritz r: class A { method a { 1 } }; class B is A { method b { $.a + 1 } }; say B.new.a; ay B.new.b 19:51
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Undeclared routine:␤ ay used at line 1␤␤»
moritz r: class A { method a { 1 } }; class B is A { method b { $.a + 1 } }; say B.new.a; say B.new.b
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«1␤2␤»
vendethiel moritz: can you inherit with a specific visibility ? 19:52
to make all methods of your superclass "private"
moritz I'm aware of p6 syntax hilighting for vim, emacs and pygments
vendethiel: no
if you want that, you are better off doing delegation 19:53
vendethiel so there's still a way to do it :P. 19:54
moritz well, it's not inheritance anymore :-) 19:54
vendethiel yeah, but that allows for more complicated things, like multiple inheritance if somebody wants that etc.
psch m: class A { method a { "a" } }; class B { method a { "b" } }; class C is A is B { }; C.new.a 19:57
camelia ( no output )
psch m: class A { method a { "a" } }; class B { method a { "b" } }; class C is A is B { }; C.new.a.say
camelia rakudo-moar dc42ad: OUTPUT«a␤»
psch m: class A { method a { "a" } }; class B { method a { "b" } }; class C is B is A { }; C.new.a.say
camelia rakudo-moar dc42ad: OUTPUT«b␤»
vendethiel oh, it does have that -- for better or worse
moritz: googling and getting on some of yours answers from 2010 on stackoverflow 19:58
moritz vendethiel: that kinda hard to avoid if you google for p6 stuff :-) 20:00
you end up on my or masak++'s blog, or slides from jnthn++, or stackoverflow or doc.perl6.org or perlmonks...
vendethiel haha yeah but those are already opened ;) 20:01
is there something like `super`/`superclass` ? `class A { our sub a { return 'a'; }; }; class B is A { method b { return superclass::a() ~ 'b'; } ` I can see why it could be a problem WRT multiple inheritance though
moritz there is the nextsame/nextwith/callsame/callwith group of redispatchers 20:02
and you can say self.A::a() 20:03
(ie fully qualify a method with the class name)
vendethiel moritz: just A would be enough, no need for self.A, is there ?
I guess it justs casts to an A
moritz there's no casting 20:05
and A::a would try to call a sub, not a method
psch with "our sub" you can call without self, yeah, but i don't think you inherit it either
vendethiel no it's not inherit it anymore, it's just fully qualified sub call
moritz we really do care about the sub/method distiction in Perl 6
vendethiel I can guess. `submethod` seems a bit confusing, not sure what's the use-case 20:09
raydiak non-inheritable method; e.g. a method that isn't functional or meaningful to a subclass 20:11
sergot r: my %h = <a a>; sub add(*%hash) { for %hash.kv -> $k, $v { %h{$k} = $v }; }; my $to_add = "a"; add($to_add => "b");
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«Too many positional parameters passed; got 1 but expected 0␤ in sub add at /tmp/tmpfile:1␤ in block at /tmp/tmpfile:1␤␤»
sergot how can i do this?
vendethiel wait, can you do `submethod !a` ? If so, it's cool
timotimo should work actually 20:12
moritz vendethiel: private methods are never inherited
vendethiel: so the 'submethod !' is really redundant
vendethiel moritz: oh yeah, I was mixing two things
sergot I mean, using variable in *%hash.
as a key
moritz sergot: add |($to_add => "b") 20:13
sergot moritz++ thanks! :)
moritz good news: I have an experimental mysql -> pg translation for ilbot 20:16
bad news: it takes about 1 hour to do the migration
on my rather beefy laptop
and on my rather slow vhost, it'll likely take half a day
timotimo do you have an idea what is to blame?
moritz timotimo: yes, encoding fu 20:17
timotimo aaw man :(
that's rough
do you think you can do it incrementally at all?
i think postgres full text search should be a bit helpful 20:18
moritz and it's 8.6 mio rows, so it's simply a non-trivial amount of data 20:18
timotimo that's fair
moritz though I'm a bit worried; the gzip'ed mysqldump is 425MB, the gzip'd pgdump is 215MB 20:19
that's... worrying
timotimo hmm
moritz gzip should fudge out most of the formatting differences 20:20
timotimo can you diff a part of it and see if it's just systematically more compact commands?
moritz not easily
timotimo mhm :(
ISTR postgres is good at storing data, but what you have there is the text file 20:21
hm, doesn't postgres have a special minimized format for data importing?
like heredocs?
moritz yes, I think so 20:22
oh, I think the answer is simply "data truncation during import" 20:23
timotimo ouch
moritz there are some pathologically blown-up lines in mysql table
due to UTF-8 not quite decoded as UTF-8 20:24
and I've simply truncated those
timotimo :(
moritz m: say (387575619 - 391371730) / 391371730
camelia rakudo-moar dc42ad: OUTPUT«-0.0096995023␤» 20:25
moritz but that's less than 1%
timotimo well, i guess that means the original data was b0rked anyway?
moritz so, not quite the answer
yes
moritz mkaing the import incremental is the next step 20:26
moritz timotimo: irclog.perlgeek.de/perl6/2014-01-15#i_8123929 example of such a line 20:28
timotimo ah! those :) 20:29
timotimo i remember those :D 20:29
nwc10 p: say q0/No escaping or anything, suspiciously like Q!/
camelia rakudo-parrot dc42ad: OUTPUT«␀␀␀[␀␀␀3␀␀␀1␀␀␀m␀␀␀=␀␀␀=␀␀␀=␀␀␀␀␀␀[␀␀␀0␀␀␀m␀␀␀S␀␀␀O␀␀␀R␀␀␀R␀␀␀Y␀␀␀!␀␀␀␀␀␀[␀␀␀3␀␀␀1␀␀␀m␀␀␀=␀␀␀=␀␀␀=␀…»
moritz usually if the IRC line length limit truncates UTF-8 continuation bytes 20:30
and thus the autodetector refuses to classify it as UTF-8
falls back to Latin-1
and produces lot and lots of mojibake
dalek osystem: 08ba60c | sergot++ | META.list:
HTTP::Headers added
20:38
dag_ moritz: Saw you're doing Postgres imports - you do know about COPY? It really is your friend. 20:39
dalek kudo/nom: fb5e3dc | (Pepe Schwarz)++ | src/Perl6/Grammar.nqp:
Adjusted Grammar.nqp to parse a few more unspace-related tests.
20:40
kudo/nom: 535d912 | (Matthew Wilson)++ | src/Perl6/Grammar.nqp:
Merge pull request #250 from peschwa/slightly_improved_unspace

Adjusted Grammar.nqp to parse a few more unspace-related tests.
diakopter psch++
dag_ moritz: COPY FREEZE was added in 9.3 - even faster.
dag_ has got to go again... 20:41
timotimo are there any slide pdfs of perl6-related talks yet? 20:42
diakopter from ever? :)
dalek ast: 9801c79 | (Pepe Schwarz)++ | S02-lexical-conventions/unspace.t:
Added test for RT #92826, RT #79340, RT #117465, un-skipped 6 tests.
20:43
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=92826
timotimo psch: lookin' good! :) 20:44
psch timotimo: i just left the one i was unsure about but added a similar one... 20:45
the &foo <> foo distinction isn't clear to me
at least in that context, which probably means i can't divine the intention of the original test
timotimo it does make sense the way you interpreted it
if you have &foo you refer to the sub, if you have only foo you refer to the result 20:46
i don't know why i didn't understand that before
diakopter well, the address-of or reference to a name of thing can be viewed as a deferral of the invocation of that thing
(invocation... and resolution!) 20:47
timotimo diakopter: is your talk about moarvm going to talk a lot about the perl5 interop of moarvm?
diakopter I didn't do it; I was feeling too poorly 20:48
timotimo fair enough
was it going to be about that? or did i misunderstand the abstract?
dalek osystem: 8cb43e4 | sergot++ | META.list:
HTTP::Message added
20:49
psch timotimo: so the test should probably go '&foo\ .\ ("x")' you say?
timotimo sounds sensible
diakopter I wanted to no
I mean
no
timotimo but i'd like an actual perl6 pro to confirm that
diakopter it's still foo.()
diakopter the unspace should be viewed as non-existent 20:50
timotimo right. and foo.() calls postcircumfix:<( )> on the result of foo
psch diakopter: but foo.("x") errors with 'cant find postcircumfix:<( )> for Str'
diakopter ah ok, yes.
psch which is the given reason for skipping the test
i wonder if i can unskip it for niecza too 20:51
n: sub foo($x) { $x }; &foo\ .\ ("x")
camelia ( no output )
psch n: sub foo($x) { $x }; &foo\ .\ ("x").say # ENOSAY
camelia niecza v24-109-g48a8de3: OUTPUT«x␤»
moritz the error for foo.() looks correct to me
it parses as foo().() 20:52
psch so everyone agrees that the test doesn't test what it's supposed to test? :)
moritz if /me is everybody, yes! :-)
timotimo well, me, too
dalek ast: 8752897 | (Pepe Schwarz)++ | S02-lexical-conventions/unspace.t:
Corrected und and skipped a test for Rakudo and Niecza
20:53
psch errr
that should've read "corrected and unskipped"... :)
fixing that involves push --force i gather? 20:54
timotimo it would 20:55
is it that important?
psch not really, i'd just say it's confusing if it's as-is
but then any confusion might be cleared by viewing the actual commit
i'm just a bit antsy not to do anything wrong is all heh 20:56
timotimo the philosophy of #perl6 is "-Ofun" and "easier to ask for forgiveness than permission"
so i'd say it's fine
psch r: /\ X/ # RT #77522 20:57
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=77522
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«===SORRY!=== Error while compiling /tmp/tmpfile␤Unspace not allowed in regex␤at /tmp/tmpfile:1␤------> /\ ⏏X/ # RT #77522␤»
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=77522
moritz std: /\ X/ 20:58
camelia std 09dda5b: OUTPUT«===SORRY!===␤No unspace allowed in regex; if you meant to match the literal character, please enclose in single quotes (' ') or use a backslashed form like \x20 at /tmp/et6ck2Pacv line 1:␤------> /\⏏ X/␤Parse failed␤…»
moritz looks correct to me
timotimo oh? i didn't know about this 20:58
psch r: try EVAL '/\ X/'; $!.perl.say
camelia rakudo-parrot dc42ad, rakudo-jvm dc42ad, rakudo-moar dc42ad: OUTPUT«X::Comp::AdHoc.new(filename => "eval_0", line => 1, column => Any, modules => Array.new(), is-compile-time => Bool::True, pre => "/\\ ", post => "X/", highexpect => Array.new(), payload => "Unspace not allowed in re…»
psch can't test that :/ 20:59
timotimo but it seems like a good call to force spaces to be quoted
psch there's an awful lot of bugs that need to have their X::AdHoc or X::Comp::AdHoc converted to something narrower typed 21:00
but i don't think doing it everywhere the same i did it in the optimizer is the right way; i'm already a bit uncomfortable with the amount of code duplication i introduced from World to the optimizer... 21:01
moritz psch: maybe there needs to be role that supplies code to both World and Optimizer 21:03
psch moritz: yes, a role for Exception-y stuff probably makes sense 21:06
and when it's in a role that role can also be bolted onto e.g. Metamodel/MultipleInheritance.nqp for e.g. RT #117165 i guess 21:12
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=117165
psch and all the others!
timotimo psch: inside the grammar it's much easier to make typed exceptions work 21:12
psch well, yes, finding the needed information probably is difficult if there's no cursor or anything around anymore 21:14
so blindly converting nqp::die calls into "build and throw a typed exception" isn't the best course, is it
timotimo since you have a cursor, you can actually use its typed exception helper method 21:15
moritz blindly doing software development is never a good course :-)
psch moritz: i'm afraid i'm pretty much missing the whole bigger picture; grokking the whole process from hitting enter to getting output is beyond me... :) 21:16
timotimo that process is surprisingly easy to grasp once you know where you have to look 21:17
are you interested in a little guided tour?
psch give me 5 minutes :)
timotimo actually, the RaNIW course material also covers this rather well, i believe
moritz psch: have you looked at the slides from the "Rakudo and NQP internals workshop"? 21:18
timotimo hm, does google docs multi-user stuff offer a good way to show someone slides and write comments all over the place?
that may be worth trying out
6guts.wordpress.com/2013/09/17/mate...ls-course/ 21:19
moritz also, docs/architecture.svg in rakudo 21:20
psch moritz: yes, i have, and it has helped, but it still lead me to misunderstandings like building a QAST::Statement that builds and throws an exception, instead of doing it how i sent the PR 21:21
in the optimizer that is, for my first PR which was solved much different
s/much/very/
timotimo docs.google.com/document/d/1yjduln...sp=sharing - check this out! :) 21:22
moritz psch: well, in the end only practise makes you familiar enough with the codebase to avoid that
timotimo this way we can look at the slides and see each others cursors and have in-line comments
unfortunately, the slides themselves are embedded as images rather than text
so copy/paste is not an option
er, actually, it's both slides *and* the text on the slides below it 21:23
that's acceptable
psch moritz: that's what i thought, which i why i frequently resort to asking questions 21:24
moritz psch: which is a good approach :-)
psch timotimo: alright, let's go through the slides together 21:25
timotimo can you click the "speech bubble" icon on the top right, so it'll show you as signed in? 21:26
psch oh, right
let me get the link out of the vm
timotimo a really big portion of the slides is ... gone 21:33
we need to do this differently i'm afraid 21:34
psch edumentab.github.io/rakudo-and-nqp-...ls-course/ these is what i looked at a few times
timotimo that's the right one, aye 21:35
the first thing we may want to discuss is the "compile-time and runtime blur" on slide 12
since you mentioned a misunderstanding you had about creating a QAST tree to do error output 21:36
psch right
well, it worked-ish in the optimizer, since optimize returns an ast itself 21:37
timotimo normally, you do QAST composition to compile something to your VM's native code to be executed later
psch but obviously "replace the whole tree with a shorter one that throws an exception" isn't really how optimizing works
timotimo no :)
there is a legitimate use case for that exact thing, though
timotimo when we in-line blocks into their caller's tree, we can't just say "this block has disappeared", since the serialization context keeps a reference to it and if we just delete it, at compile time it'll complain that the block has gone 21:38
so we replace it with a block that nqp::die's with "optimized-out code being run! something went terribly wrong!"
anyway
psch okay 21:38
timotimo in the case you were having, you wanted the compilation process to abort with an error, so that's why you throw an exception 21:39
interestingly, if you're doing an "eval", the exception is thrown from NQP code and lands in perl6-level code
well, it's not really an amazing thing, it's necessary even; you call lots of nqp-implemented stuff from perl6 code at some point and the exceptions should be able to freely pass the barrier between nqp-land and perl6-land 21:40
the big difference between nqp and perl6 at the QAST level really is just what subs and operators you call
psch right 21:41
diakopter well args are bundled and unbundled differently
timotimo do you have an overview over what slide 14 shows?
timotimo diakopter: that's right, but that's just calling into a different binder :P 21:41
psch i'm really not seeing how "eval" is special in the above example, because in the end the optimizer also build an exception in nqp code, which can be caught... oh but it can only be caught if it's in an eval because otherwise compilation doesnt finish 21:42
sergot How to call inherited new() and then assign values to not inherited fields?
timotimo er ..
psch timotimo: "passing to perl6-land" means "can be interacted with in perl6 code", right?
timotimo yeah 21:43
psch timotimo: and the optimizer build a perl6 exception with nqp code, with find_symbol and whatnot
psch so what makes eval special in the example is letting us put the whole compilation process into the runtime 21:43
which lets much (everything?) nqp be handles on a perl6 level 21:44
*handled
timotimo i ... guess?
psch should this have been obvious or is it a weird way of looking at it..? 21:45
diakopter well have you used eval before in other languages?
timotimo well, really the special thing about the perl6 exception is that the code you're writing is NQP and you're instantiating a perl6 class 21:46
psch diakopter: of course, but i have never looked at any other languages internals, or actually thought about how the translation happens
diakopter oh
timotimo which is why you have to do the find_symbol thing; you're traversing the "world" of the program you've been compiling (or the context of the stuff you're compiling in, in case of a run-time eval) 21:46
it also means that you can lexically override exception classes that the compiler will create at compile-time, which is pretty crazy/scary 21:47
diakopter bo
no
timotimo it does not?
diakopter only js has lexical eval and nobody uses it because its so pessimizing 21:48
psch intuitively i'd think there's a difference between "looking through world" and "changing world"
timotimo diakopter: i think you may have misunderstood what i meant
moritz hey, hey, I changed the World today...
timotimo i mean class X::AdHoc { ... some crazy stuff ... }; eval 'some code that creates an X::AdHoc';
diakopter yeah 21:49
timotimo i shouldn't say "create". i should have said "instantiates"
diakopter r: class A { BEGIN EVAL 'say A' } 21:51
camelia rakudo-moar 535d91: OUTPUT«===SORRY!===␤Cannot invoke null object␤»
..rakudo-parrot 535d91, rakudo-jvm 535d91: OUTPUT«===SORRY!===␤No such method 'gist' for invocant of type 'A'␤»
diakopter r: class A { BEGIN EVAL 'print A' } 21:51
camelia rakudo-parrot 535d91: OUTPUT«===SORRY!===␤Nominal type check failed for parameter '$got'; expected Any but got A instead␤»
..rakudo-moar 535d91: OUTPUT«===SORRY!===␤Cannot invoke null object␤»
..rakudo-jvm 535d91: OUTPUT«===SORRY!===␤Nominal type check failed for parameter '$got'␤»
diakopter O_O 21:52
diakopter r: class A { EVAL 'print A' } 21:52
camelia rakudo-parrot 535d91: OUTPUT«use of uninitialized value of type A in string context in block at eval_0:1␤␤»
..rakudo-jvm 535d91, rakudo-moar 535d91: OUTPUT«use of uninitialized value of type A in string context␤»
diakopter r: class A {}; EVAL 'print A' 21:53
camelia rakudo-parrot 535d91: OUTPUT«use of uninitialized value of type A in string context in block at eval_0:1␤␤»
..rakudo-jvm 535d91, rakudo-moar 535d91: OUTPUT«use of uninitialized value of type A in string context␤»
diakopter r: class A {}; BEGIN EVAL 'print A' 21:54
camelia rakudo-parrot 535d91: OUTPUT«use of uninitialized value of type A in string context in block at eval_0:1␤␤»
..rakudo-jvm 535d91, rakudo-moar 535d91: OUTPUT«use of uninitialized value of type A in string context␤»
diakopter *shrug*
timotimo that makes sense, though, doesn't it? 21:55
r: class A {}; BEGIN EVAL 'print A.new'
camelia rakudo-moar 535d91: OUTPUT«A<140001956467000>»
..rakudo-jvm 535d91: OUTPUT«A<851990465>»
..rakudo-parrot 535d91: OUTPUT«A<5562644992239816926>»
diakopter hahahhahahahahhahahahahahahahahaha
timotimo 21:56
diakopter I mean..
no the surprising one is the first try above 21:58
timotimo you mean the null object invocation? 21:59
diakopter yeah
timotimo ah well. 22:00
diakopter also "expected Any but got A instead"
timotimo perl6 isn't ready for production yet, obviously.
i suppose it got executed before it was composed
psch timotimo: my understanding of the items on slide 14 goes about as far as they are described there. as in, they're pretty black-boxy concepts 22:05
to be honest i'd rather postpone this though, i'm getting rather tired 22:06
lue Heh, I'm trying to do rosettacode.org/wiki/I_before_E_except_after_C, and I just discovered why some of my numbers are off: the given wordlist has meier and weierstrass :) 22:07
diakopter heh perl. www.windytan.com/2014/02/mystery-si...opter.html
timotimo psch: no worries :) 22:12
psch i'm off then, g'night #perl6 o/ 22:13
timotimo gnite! 22:14
raydiak good night
timotimo i just had my hand off one key on the right side and wrote fride instead m)
friede sei mit dir, mein freund!
dalek kudo-star-daily: a5a9a18 | coke++ | log/ (5 files):
today (automated commit)
22:32
rl6-roast-data: a21f187 | coke++ | / (6 files):
today (automated commit)
[Coke] all R* tests passed. \o/ 22:48
lue \o/ 22:51
timotimo \o/ 22:52
dalek ast: 8ade4d7 | timo++ | S14-roles/parameterized-type.t:
bump the plan for S14-roles/parameterized-type.t
22:55