»ö« 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 moritz on 3 May 2013.
flussence seems like doing those 16 .substr calls per iteration is taking up 25% of the execution time, which is unfortunate. 00:01
colomon flussence: can you show me the code?
flussence gist.github.com/flussence/5732972
colomon thanks 00:03
timotimo i fixed it! 00:05
colomon looking at it, it seems to me that the argumentless comb is a pretty good candidate to be recoded at a lower level. 00:06
btw, that's more than 16 substr calls 00:07
r: say 0xFF - 0xA1
camelia rakudo b2072f: OUTPUT«94␤»
colomon it's 94 of them
flussence it's 16 when I do that manual method a few lines above
colomon oh, yes, I see 00:09
flussence: so the point of this test is just that is pure does cause Rakudo to hoist the calls out of the loop? 00:11
flussence that's what I was looking at, seems it did nothing though 00:12
colomon flussence: did you have reason to suspect it would work? I haven't heard anything about is pure optimizations, though I would be delighted if some of them were in there... 00:13
flussence nah, was just curious
timotimo tadzik: i made it work. turns out i have to be more careful where i replace .IO.copy with .dir.path.copy or with .Str.path.copy 00:19
timotimo tadzik: i was able to make it work, apparently 00:36
dalek ast: e4ed324 | (Solomon Foster)++ | S02-types/keybag.t:
Added basic .KeyBag tests.
00:40
colomon jnthn++ # just found a use for git add -p 00:43
dalek ecza: eaf57ce | (Solomon Foster)++ | lib/CORE.setting:
Add .Set, .KeySet, .Bag, and .KeyBag.
00:44
tadzik timotimo: awesome :) 00:47
colomon tadzik: what's the current status of panda? 00:48
`patch` howdy *! how would one translate this? require "Acme/$name.pm"; my $func = \&{"Acme::${name}::func"}; $func->(); 02:28
colomon First bit is require ::("Acme/$name.pm"); 02:34
(I think)
flussence star: my $name = 'Tiny'; require ::("lib/JSON/$name"); # assuming it's in this path... 02:36
camelia star 2013.02: OUTPUT«Could not find lib/JSON/Tiny in any of: /home/p6eval/star/lib/parrot/4.10.0/languages/perl6/site/lib, /home/p6eval/star/lib/parrot/4.10.0/languages/perl6/vendor/lib, /home/p6eval/star/lib/parrot/4.10.0/languages/perl6/lib, /home/p6eval/.perl6/2013.02.1/lib␤ in any …
flussence star: use JSON::Tiny; my $func = &(JSON::Tiny::to-json); say $func.perl; 02:37
camelia star 2013.02: OUTPUT«Could not find symbol '&to-json'␤ in method <anon> at src/gen/CORE.setting:10522␤ in at src/gen/Metamodel.pm:2488␤ in any find_method_fallback at src/gen/Metamodel.pm:2476␤ in any find_method at src/gen/Metamodel.pm:925␤ in at src/gen/BOOTSTRAP.pm:883␤ in an…
flussence star: use JSON::Tiny; my $func = &("JSON::Tiny::to-json"); say $func.perl; 02:38
camelia star 2013.02: OUTPUT«"JSON::Tiny::to-json"␤»
flussence star: use JSON::Tiny; my $func = &(JSON::Tiny::{"to-json"}); say $func.perl; 02:38
camelia star 2013.02: OUTPUT«Any␤»
flussence well at least that's not a syntax error...
star: use JSON::Tiny; my $func = &JSON::Tiny::{"to-json"}; say $func.perl; 02:39
camelia star 2013.02: OUTPUT«Any␤»
flussence star: use JSON::Tiny; my $func = JSON::Tiny::&{"to-json"}; say $func.perl;
camelia star 2013.02: OUTPUT«all({"Actions" => JSON::Tiny::Actions, "Grammar" => JSON::Tiny::Grammar, "EXPORT" => EXPORT}, Block.new())␤»
flussence star: use JSON::Tiny; say JSON::Tiny.^methods 02:40
camelia star 2013.02: OUTPUT«No such method 'methods' for invocant of type 'Perl6::Metamodel::ModuleHOW'␤ in block at /tmp/Ws5j3ZGC9P:1␤␤»
flussence star: use JSON::Tiny; say JSON::Tiny.perl
camelia star 2013.02: OUTPUT«JSON::Tiny␤»
flussence r: say Perl6::Metamodel.^methods # ...that's a new one :D 02:48
camelia rakudo b2072f: OUTPUT«Could not find symbol '&Metamodel'␤ in method <anon> at src/gen/CORE.setting:10166␤ in any at src/gen/Metamodel.nqp:2504␤ in any find_method_fallback at src/gen/Metamodel.nqp:2492␤ in any find_method at src/gen/Metamodel.nqp:939␤ in block at /tmp/w2akFsQf5N:…
flussence well that's weird, I got a completely different message in the repl
("Error while compiling block [...] Null PMC access in find_method('handle')") 02:49
`patch` colomon, flussence: i'm trying to dynamically load a module that includes the value of a variable in its name and export a function.
so it doesn't need to be a literal translation of the p5 example.
flussence yeah, I kinda understand what you're asking for, just not how to make it work :) 02:50
colomon `patch`: perlcabal.org/syn/S11.html#Runtime_Importation is the area in the spec you want to be looking, I think, but it's something I've never tried to do before. 02:51
`patch` thanks, i'll take a look. i imagine it's possible that this is not implemented, eh? 02:52
colomon `patch`: you can definitely dynamically load a module that includes the value of a variable in its name, but I don't know if you can also export a function or not. 02:53
lue flussence: have you tried that line in perl6 -e ? I get the same message as camelia. 02:57
(I'm still distrustful of the REPL because I've not seen talk of it being improved since I was warned of it) 02:58
sorear good * #perl6
flussence oh, does the same there 02:59
lue hello sorear o/
flussence maybe it's because I'd been poking at it for a few lines prior...
`patch` star: use JSON::Tiny; my $func ::= JSON::Tiny::<&to-json>; say $func.perl; 03:00
camelia star 2013.02: OUTPUT«Any␤»
sorear lueee 03:01
dalek : 2baf71d | (Tobias Leich)++ | / (2 files):
added is_miniperl { 0 }
03:03
: 0cda4dc | (Tobias Leich)++ | lib/Perl5/ (2 files):
added STDIN, STDOUT, STDERR
: b50fc7c | (Tobias Leich)++ | / (4 files):
sort of supporting indirect object syntax for barewords
sorear o/ FROGGS 03:07
diakopter o/ 03:09
FROGGS o/
japhb_ Sheesh. Hotel wifi is awful. I wonder if the $10/night price for upgraded Internet is to pay for it not dropping you .... 03:10
sorear It still has to drop you to make sure you're paying 03:11
japhb_ Yeah, but maybe not ever couple hours all day ... 03:12
*every
`patch` colomon, flussence: i could do something like this instead - github.com/perl6/DBIish/blob/maste...sh.pm6#L15 03:14
flussence eval - the solution|cause for a lot of hard problems... 03:15
`patch` as in perl 5! except i know better how to avoid eval there. 03:19
dalek c: eb14a4f | (Ben Tyler)++ | lib/operators.pod:
Fix 'X' operator example.
03:20
sorear so once we have JAST, we call .dump on it, parse it, disassemble the bytes into operations, and pass the operations to asm to be immediately reassembled? 03:28
FROGGS would this make sense? my $x = async heavy_operation(); do_something_while_it _computes(); say $x # which would wait until the thread finished... (like join) 03:48
so that async is some sort of prefix like eager
(or eval)
TimToady if not, it'd probably be easy to write it in terms of gather/take and async 03:48
flussence I'd rather call it "bg" :) 03:49
TimToady postfix:<&> :)_
FROGGS bubblegum? :o)
hehe
TimToady hmm, I seem to be drooling...
lue
.oO(&foo()&;)
03:50
eternaleye FROGGS: Or 'future' 03:53
FROGGS: That's *really* reminiscent of 'futures' in other languages.
FROGGS how does it get evaluated? lazy, eager, asynchronous... but not 'futures' 03:57
lue almost feels there should be a corresponding C<sync> word for symmetry. 03:58
FROGGS :o)
TimToady well, 'sync' is just 'do'
FROGGS lue: if there would be an 'is async' trait on a sub for example, the negation of it would make sense, ya 03:59
TimToady FROGGS: why do you always wear a clown nose in your smiley?
FROGGS but, 'do' gets the right meaning
has*
TimToady: it is just a normal (maybe a bit bigger) nose
TimToady but you don't have a really big nose in person, that I noticed... 04:00
FROGGS :) <-- I dont like having no nose
TimToady maybe we can find you a better nose in Unicode somewhere...
FROGGS hehe
some sort of middo
middot*
lue
.oO(Scavenger hunt!)
FROGGS .u nose 04:01
yoleaux U+2FD0 KANGXI RADICAL NOSE [So] (⿐)
U+1F43D PIG NOSE [So] (🐽)
U+1F443 NOSE [So] (👃)
shachaf themindi.blogspot.com/2007/02/chapt...-head.html
FROGGS :·)
lue :🐽) (I can't see the pig nose either)
FROGGS me neither 04:02
sorear I can
benabik can
TimToady :•)
shachaf :☺)
lue ... well. Time to find some more fonts.
FROGGS :˒)
TimToady :◃) 04:03
FROGGS :᚜) 04:05
hmmm, no
lue :∘)
FROGGS that is not bad
:ɔ) 04:06
:ᴖ) <--- I like that one
it has something 3dish 04:07
it has something 3d-ish
shachaf ꙮ) 04:09
FROGGS iiinterresting 04:10
sorear hmm. seems that JAST isn't currently making any attempt to scope locals narrower than the entire method?
FROGGS sorear: I cant help you there 04:11
TimToady well, Java doesn't really believe in anything except methods
sorear o/ lizmat 04:13
lizmat hi sorear!
just checking mail before going to bed :-)
TimToady lizmat: er, this isn't mail :) 04:14
lizmat ah, yes… but whenever I get a network connection, my IRC client logs in... 04:15
sorear spotted that, otherwise nobody would have known :-)
dalek ast: 513694b | (Elizabeth Mattijsen)++ | S32-hash/delete-adverb.t:
Fix comments on combined adverb tests and add whatever combined adverb tests
04:52
lizmat night #perl6! 04:53
dalek p: 4fa7d88 | sorear++ | src/vm/jvm/runtime/org/perl6/nqp/jast2bc/JASTToJVMBytecode.java:
Generate local variable annotations
05:11
sorear r: my $*BLOCK = "moof"; eval 2 05:26
camelia rakudo b2072f: OUTPUT«===SORRY!===␤CHECK FAILED:␤Calling 'eval' will never work with argument types (int) (lines 1, 1)␤ Expected any of:␤ :(Str $code, :lang(:$lang) = { ... }, PseudoStash :context(:$context))␤»
sorear r: my $*BLOCK = "moof"; eval "2"
camelia rakudo b2072f: ( no output )
eternaleye FROGGS: Sorry for taking so long, but futures and promises can be thought of as 'handles' to asynchronous computation. In C++, for instance, a future gives you a promise, which you get the value from like joining a thread, an the default implementation is done with a thread pool. 06:30
FROGGS: Examples: www.justsoftwaresolutions.co.uk/thr...mises.html 06:32
rough p6ification: Future[Int] answer = async do_foo(); other_stuff(); say answer.get() # Returns Int 06:33
I read this as "async do_foo will give me an Int in the Future. In the meantime, I'll do other_stuff, then wait until I get the answer" 06:35
eternaleye Actually, a parameterized Future role as the return value of async might work pretty well. 06:43
cognominal TimToady: thanks you about the explanation of "good tidings" 06:56
cognominal s/about/for/ 06:58
cognominal good|glad 06:59
timotimo good * #perl6 08:48
diakopter o/ 08:58
JimmyZ \0/ 08:59
tadzik cognominal: I didn't touch it since the yapc I think 09:00
timotimo tadzik: now you have the opportunity to do so, with some really nice patches :3 09:03
(i hope the old copy method has been introduced already in the current compiler release?)
star: "foo".path.copy
camelia star 2013.02: OUTPUT«No such method 'copy' for invocant of type 'IO::Path'␤ in block at /tmp/lVY26IP90S:1␤␤»
timotimo hm, that's unfortunate
cognominal takzik: ok 09:17
www.youtube.com/watch?feature=playe...BFk#t=936s what is the Perl 6 way to write an "historically correct pirate"? 09:18
"historically correct", this is giving short shrift to corsaires and the like. 09:19
cognominal one would need a given/when to write a really historically correct pirate 09:21
arnsholt o/ 09:55
moritz r: 'foo'.path.copy 10:20
camelia rakudo b2072f: OUTPUT«No such method 'copy' for invocant of type 'IO::Path'␤ in block at /tmp/tMAznmXlwy:1␤␤»
moritz r: 42.foo 11:38
camelia rakudo b2072f: OUTPUT«No such method 'foo' for invocant of type 'Int'␤ in block at /tmp/TUsKPERg8d:1␤␤»
moritz in java code for nqp-jvm, how do I get a class name as a string? 11:41
(for an error message)
sixmodelobject.st.HOW.name(sixmodelobject) # or so? 11:42
no, complains that it can't find method name 11:44
Chat2300 What's up? 11:54
timotimo moritz: could 'foo'.path be missing from the restricted setting? 12:00
moritz timotimo: it's not .path that's missing, but .copy 12:01
and yes, I thought about that too
and wanted to test it
timotimo ah
moritz and found that I only had a rakudo-on-jvm locally :-)
timotimo should i add it and give it an error message?
moritz and was annoyed by the error message I got from the jvm-based stuff 12:02
Method 'foo' not found
why didn't you find it? because it wasn't there. Why don't you tell me so?
timotimo: rather implement it :-)
timotimo the restricted setting should be capable of copying things around? what's the semantics it should have? 12:04
deny every source or destination that's not in /tmp?
moritz no, not the restricted setting
the normal one
or does that have .copy already?
timotimo it's already implemented in the regular setting
moritz oh, ok
then I misunderstood
then yes, an error in CORE.restricted wouldn't hurt
timotimo i even turned panda and File::Utils over from .IO.copy to .path.copy so that it wouldn't spit 50 deprecation errors per installed package 12:05
tadzik so, is .path.copy in the compiler release? 12:06
timotimo not in the 2013.05 one
that's what makes me unhappy about the panda patches 12:07
tadzik I think panda should target the compiler release
moritz then the patches have to wait 1.5 weeks
tadzik so I think I'll let the patches collect some dust for now
moritz that won't kill anybody
tadzik: maybe just comment on the pull request that you intend to wait 12:08
and why
tadzik yeah, I'll do that
I have some tickets and pull requests to take care of today
timotimo wonders if a robot finds kitten implementation in perl6 will be helpful to the community 12:13
timotimo i don't really feel like learning to do ansi escapes properly and portably, though. and i'd prefer not to write a ncurses binding 12:32
maybe i could write a semi-direct port of blessings, though 12:33
timotimo blessings is actually pretty darn cool 12:46
r: class Foo { method bark { say "woof" }; method meow { say "meow" } }; my $foo = Foo.new(); import $foo; bark; meow; 12:47
camelia rakudo b2072f: OUTPUT«===SORRY!===␤Undeclared routines:␤ bark used at line 1␤ import used at line 1␤ meow used at line 1␤␤»
timotimo hm.
FROGGS see you in a bit from another side of the ocean o/ 12:52
timotimo aaw, blessings uses curses :| 12:55
sdo hello 13:02
timotimo there already is an ncurses binding!
timotimo it was easy to miss, given that the name doesn't start in Term:: 13:03
wow, nativecall is severely broken on my machine 13:04
Error while compiling block : Error while compiling block (source text: "{\n has int $!setup;\n has native_callsite $!call is box_target;\n \n method postcircumf..."): Error while compiling block postcircumfix:<( )> (source text: "{\n unless $!setup {\n my Mu $arg_info := param_list_for($r.signature);\n ..."): Error while compiling op p6typecheckrv: Error while compiling op lexotic: Error while compiling op ...
... p6decontrv: Error while compiling op nativecall: Error while compiling op p6decont: No registered operation handler for 'p6decont'
JimmyZ timotimo: you're using moarvm? 13:05
timotimo no, this is parrot
i wouldn't expect moarvm to be able to do moarvm at all yet
timotimo could it be that p6decont has been replaced by p6decontrv or something? 13:09
hm, that just gives me Can not get attribute '$!list' declared in class 'Capture' with this object for each and every single test file :( 13:12
moritz that would explain why so many modules have broken dependencies on 71.10.146.50:3001/report 13:21
timotimo whoooaa, that's pretty 13:22
colomon moritz: maybe. But right now every error is reported as prerequisites failed because panda's error reporting is broken.
timotimo not just me, then. sounds good. 13:23
moritz colomon: oh :( 13:24
tadzik is on it
colomon I mean, it might explain why so many errors are happening ... I think we're still getting about fifteen more than we were a week ago.
colomon moritz: I debugged the issue (surprisingly tricky, then obvious), then reported to tadzik. 13:25
timotimo i'll try to install a Star on my machine.
tadzik colomon: I don't see any bug reported in panda though 13:27
I have to rebuild nom now, I was trying to bisect the nqp segfault before
colomon tadzik: thought I'd reported the issue to you on here. 13:28
flussence that page could use a separate thing for "no tests ran"... 13:28
tadzik colomon: I remember something about Failure, but that's sort of fixed in emmentaler now 13:29
colomon tadzik: the issue is that you deleted the custom "die" statements in several of the modules (building and testing at least, I think), meaning that panda is returning X::AdHoc. But there was a lot of information stored in X::Panda that's missing from that. 13:30
tadzik aah
of course
flussence
.oO( I wish there was a way in META.info to list native libraries as prereqs for nativecall )
colomon And I'm pretty sure panda internal only checks for X::Panda errors, so (last time I checked) it wasn't registering build or test stage errors. 13:31
My emmentaler patch just made it pay attention to any and all exceptions, reporting them as prereq failures. 13:33
One of the thing X::Panda does is say way stage the error happened in. 13:34
tadzik yes 13:35
I must've broke it with panda2
timotimo why are there no tests? ;)
tadzik heh 13:39
they don't cover that :) Patches welcome 13:40
flussence oh hey, at least this is reproducable... Compiling lib/NativeCall.pm6␤===SORRY!===␤Error while compiling block : Error while compiling block (source text: "{\n has int $!setup... 13:44
tadzik experiments with Go-style error checking in P6 13:45
tadzik not yet sure if want 13:46
flussence rakudo f19881b broke zavolaj 13:49
fortunately it seems to be a 2 char change in the module...
flussence (I hope) 13:50
tadzik uh, panda broke smoker in various ways :/ 13:54
tadzik oh, colomon, a question 14:00
you're probably aware of difftool
colomon .... aware of diff, anyway
tadzik you're also probably aware that it's pretty useless for a webpage, as webpages don't use ansi colour codes 14:01
oh, I mean difftool, from emmentaler
so I wondered, would it be helpful to have a module like Term::ANSIColor that also works for HTML colours if needed?
colomon tadzik: actually, never looked at difftool before!
tadzik oh. I think it's pretty awesome, but I'm biased :) 14:02
I have a dream where we can use difftool to poke people on irc directly
"hey, colomon, your ABC stopped building"
colomon tadzik: I was thinking we should add an e-mail contact field to META.info
tadzik that'd be useful too
moritz tadzik: or even send e-mails the old-fashioned way 14:03
moritz way too slow
colomon fundamentally the same idae
idae
idea
tadzik I think for now we can easily use the github username, as that usually indicates the module maintainer
colomon just typed idea wrong three times in a row. :(
dalek volaj: 693b705 | flussence++ | lib/NativeCall.pm6:
s/p6decont/decont/g

Fix for changes made in rakudo f19881b, gets all but 1 test passing again
flussence timotimo: there you go
colomon tadzik: I was just thinking it be polite to allow people to opt out. 14:04
tadzik that too
details, details :)
colomon for that matter, I wonder if we could just file an issue for the module on github?
tadzik that should be possible
colomon This thinking is probably a bit premature, so far we've had spurious errors on something like 5% of the smoke test runs. 14:05
getting false error reports would probably make people stop paying attention.
tadzik yeah
arnsholt flussence++ fixing NativeCall 14:06
colomon arnsholt: are you home? sorry I didn't properly say goodbye yesterday! thought you could use the sleep... 14:07
flussence arnsholt: I'm not sure if it's intentional, but t/01-argless.c doesn't flush the last line which causes it to fail 14:08
(though it looks like it's only meant to test that long func names work, so I may go ahead and put a fflush in there, if that's OK...) 14:10
flussence heh, there's an article on LWN about language design and a whole chunk of the comments is complaining about how $lang_they_use doesn't have an 0o prefix :) 14:14
moritz rnp: say 0o644 14:15
camelia rakudo b2072f, niecza v24-68-geaf57ce, pugs: OUTPUT«420␤»
moritz \o/
flussence there's an interesting thing about return values there - Go allows two function signatures, one for input and one for named return values, and "return;" implicitly returns those. 14:20
tadzik implicitly, only if you declare them named 14:21
like: func (foo int) (ret int) { return; } // ok
like: func (foo int) int { return; } // not ok 14:22
I think
flussence std: sub a(Int $foo, Str $bar --> Bool $cat, Set $dog) { ... }
camelia std b29e940: OUTPUT«===SORRY!===␤Unable to parse signature at /tmp/AnOPu_2nV5 line 1:␤------> sub a⏏(Int $foo, Str $bar --> Bool $cat, Set $␤Couldn't find final ')'; gave up at /tmp/AnOPu_2nV5 line 1:␤------> sub a(Int $foo, Str $bar --> Bool $c…
colomon tadzik++ # difftool
tadzik colomon: I can has your results.json? 14:24
I'll compare with my local smoker run, on fixed (hopefully) panda
colomon is there an easy way to pipe to a gist?
tadzik App::nopaste probably 14:25
and App::Nopaste::Service::Gist 14:26
colomon installing... 14:27
...taking a long time to install... 14:29
timotimo does gist ping people if they are @'ed in the comments of a gist? 14:30
flussence I believe so
unless they've turned off that part of email notifying 14:31
colomon tadzik: gist.github.com/colomon/5735341 # got impatient and uploaded by hand while installing Service::Gist
tadzik I just installed App:Nopaste too, and the only service I found working was Ubuntu :/
timotimo gaaah one-line json ;_; 14:32
tadzik :) 14:32
colomon tadzik: cpan keeps timing out for me.
flussence argh, I can't get zavolaj to pass that test even with the obvious change - gist.github.com/flussence/5735345 14:33
colomon tadzik: maybe I should set up my smoke test job to difftool the latest results versus the previous and e-mail them to a few of us? 14:54
tadzik colomon: or just put that on a website/rss 14:55
colomon: which brings me back to the colouring question
timotimo how inefficient is using FALLBACK? 14:55
FROGGS[airport] o/
timotimo hey froggs
census FROGGS[airport] leaving u.s. or arriving home? 14:56
FROGGS[airport] census: waiting for the departure to chicago, and then to berlin
census i hope you had lots of fun! 14:57
tadzik hmm. Significant time in smoker is spent in P::Ecosystem.flush-states 14:59
at the end it's at least 10 seconds to write those things to disk
for every modul
timotimo is json slow? 15:00
tadzik json too 15:01
but I think IO is generally slow
FROGGS[airport] census: I had 15:03
somehow it I'd like to stay another week, but I really miss wife and kids 15:04
colomon (wife and kids)++ 15:06
timotimo what's the sanest way to have a class that has lots and lots of methods, that you could computationally generate rather than type out
colomon timotimo: generate on the fly or generate once and have forever? 15:07
tadzik timotimo: look at Redis client in our module db
it uses such technique
timotimo colomon: i'm thinking; this is about porting python's blessings module, which has a class with lots and lots of methods like .on_green or .red or .invert or .move_to and they are autogenerated 15:09
i'm thinking about how i can generate them once, but still make them properly depend on the terminal that's currently in use
colomon timotimo: I guess I see three possible approaches. 15:10
1) My standard C++ approach: write a Perl script to generate the class definition(s)
2) Simple Perl 6 solution: class contains a hash from "method name" to &code block 15:11
flussence
.oO( macros )
timotimo i don't think macros are powerful enough yet
colomon 3) Fancy Perl 6 solution; Actually add the methods to the class at run time using meta-object protocol.
tadzik or in compile-time
the old Simple-Redis did that 15:12
I see it's gone now, for some reason
TimToady std: sub a(Int $foo, Str $bar --> (Bool $cat, Set $dog) ) { ... }
camelia std b29e940: OUTPUT«Potential difficulties:␤ $cat is declared but not used at /tmp/cocxmMbjFx line 1:␤------> sub a(Int $foo, Str $bar --> (Bool ⏏$cat, Set $dog) ) { ... }␤ $foo is declared but not used at /tmp/cocxmMbjFx line 1:␤------> sub a(Int ⏏$f…
tadzik github.com/slunski/perl6-simple-re...dis.pm#L31
timotimo how would i do it at compile-time, if it depends on the TERM environment variable?
tadzik timotimo: ^
TimToady flussence: ^^^ 15:12
flussence neat 15:13
TimToady maybe we could relax the return sig to allow commas
timotimo could probably create a cache that'll be filled at first-use-time; but i'm considering doing the whole work in FALLBACK 15:14
colomon timotimo: is FALLBACK actually implemented? 15:16
timotimo let me try 15:17
colomon redis solution looks pretty good to me...
timotimo r: class Dog { method FALLBACK($name, *@args) { say "$name, @args[]" } }; Dog.new.bark; 15:17
camelia rakudo b2072f: OUTPUT«No such method 'bark' for invocant of type 'Dog'␤ in block at /tmp/JX7EHfusWn:1␤␤»
timotimo aaw :(
timotimo how about ^find_method? 15:18
FROGGS[airport] timotimo: maybe use that? rakudo/src/core/Failure.pm:34: Failure.^add_fallback( 15:19
timotimo r: class Dog { method ^find-method($obj, $name) { -> *@args { say "$name, @args[]" } } }; Dog.new.bark;
camelia rakudo b2072f: OUTPUT«No such method 'bark' for invocant of type 'Dog'␤ in block at /tmp/95Xa_ccqT8:1␤␤»
timotimo r: class Dog { }; Dog.^add_fallback(method ($name, *@args) { say "$name, @args[]" }); Dog.new.bark; 15:20
camelia rakudo b2072f: OUTPUT«too few positional arguments: 3 passed, 4 (or more) expected␤ in any add_fallback at src/gen/Metamodel.nqp:2320␤ in block at /tmp/00xIZnSK8H:1␤␤»
benabik r: class Dog; Dog.^add_fallback( sub (*@args) { @args.perl.say }; Dog.bark
timotimo looks at the actual code
camelia rakudo b2072f: OUTPUT«===SORRY!===␤Unable to parse expression in argument list; couldn't find final ')'␤at /tmp/bzhSr4aeMn:1␤------> ub (*@args) { @args.perl.say }; Dog.bark⏏<EOL>␤ expecting any of:␤ method arguments␤»
benabik r: class Dog; Dog.^add_fallback( sub (*@args) { @args.perl.say }); Dog.bark
camelia rakudo b2072f: OUTPUT«too few positional arguments: 3 passed, 4 (or more) expected␤ in any add_fallback at src/gen/Metamodel.nqp:2320␤ in block at /tmp/6FluU6dr11:1␤␤»
tadzik yeah, it takes 40 seconds to flush-states at the end of smoker run 15:21
that sucks horribly
timotimo r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, method ($name, *@args) { say "$name, @args[]" }); Dog.new.bark;
camelia rakudo b2072f: OUTPUT«bark, ␤No such method 'postcircumfix:<( )>' for invocant of type 'Bool'␤ in block at /tmp/MMEkmbdICu:1␤␤»
timotimo not quite sure what i was doing there. 15:22
timotimo r: class Dog { }; Dog.^add_fallback(Dog, -> $, $ { True }, method ($name, *@args) { say "$name, @args[]" }); Dog.new.bark; 15:24
camelia rakudo b2072f: OUTPUT«too many positional arguments: 5 passed, 4 expected␤ in any add_fallback at src/gen/Metamodel.nqp:2320␤ in block at /tmp/e8jWHASBdK:1␤␤»
timotimo hum.
oh
r: class Dog { }; Dog.^add_fallback(Dog, -> $, $ { True }, method ($name, *@args) { -> { say "$name, @args[]" } }); Dog.new.bark; 15:25
camelia rakudo b2072f: OUTPUT«too many positional arguments: 5 passed, 4 expected␤ in any add_fallback at src/gen/Metamodel.nqp:2320␤ in block at /tmp/lxIfJELgnE:1␤␤»
timotimo r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, method ($name, *@args) { -> { say "$name, @args[]" } }); Dog.new.bark;
camelia rakudo b2072f: OUTPUT«Too many positional parameters passed; got 1 but expected 0␤ in block at /tmp/buV4unk793:1␤␤»
timotimo r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, -> $obj, $metname { -> $what { say "$metname, $what" } }); Dog.new.bark(1); 15:26
camelia rakudo b2072f: OUTPUT«Too many positional parameters passed; got 2 but expected 1␤ in block at /tmp/c46Rtp5Xvj:1␤␤»
timotimo r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, -> $obj, $metname { -> $what { say "$metname, $what" } }); Dog.new.bark;
camelia rakudo b2072f: OUTPUT«bark, Dog<-620200314>␤»
timotimo that's probably the invocant that gets passed
r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, -> $obj, $metname { method () { say "$metname $obj" } }); Dog.new.bark;
camelia rakudo b2072f: OUTPUT«bark Dog<-1991546878>␤»
FROGGS[airplan2] yes
timotimo great, that's totally workable
r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, -> $obj, $metname { say "calculating a $metname"; method () { say "$metname $obj" } }); Dog.new.bark; Dog.new.bark; 15:27
camelia rakudo b2072f: OUTPUT«calculating a bark␤bark Dog<2050174342>␤calculating a bark␤bark Dog<444953245>␤»
timotimo r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, -> $obj, $metname { say "calculating a $metname"; method () { say "$metname $obj" } }); my $dog = Dog.new; $dog.bark; $dog.bark;
camelia rakudo b2072f: OUTPUT«calculating a bark␤bark Dog<970911207>␤calculating a bark␤bark Dog<970911207>␤»
timotimo so not cached, mhhk
benabik You could call ^add_method in the fallback. 15:30
colomon perhaps I'm missing something, but it seems to be add_method would be just as easy if not easier, and more likely to be optimizable 15:31
timotimo benabik: can i do that without MONKEY_TYPING?
benabik timotimo: No idea.
timotimo r: class Dog { }; Dog.^add_fallback(-> $, $ { True }, -> $obj, $metname { say "calculating a $metname"; my Mu $meth = method () { say "$metname $obj" }; Dog.^add_method($metname, $meth); $meth }); my $dog = Dog.new; $dog.bark; $dog.bark;
camelia rakudo b2072f: OUTPUT«calculating a bark␤bark Dog<-1337613478>␤bark Dog<-1337613478>␤»
FROGGS[airplan2] you cant add a method to something that got already contrcucted
timotimo indeed! crazy crazy
rakudo disagrees, froggs :3 15:32
FROGGS[airplan2] hmmmm
okay, I think I tried that in nqp
I guess this method will only be available in your unit or so 15:33
colomon FROGGS[airplan2]: I would guess (without having tried either) that you need MONKEY_TYPING to do it via augments, but doing it via the MOP works anywhere. 15:34
sorear_ o/ 15:34
FROGGS[airplan2] colomon, I'll test that for Perl5::Terms 15:36
colomon \o 15:38
timotimo can i do something else than proto token foo {<...>} and then foo:sym<bar>? i mean does it have to be sym<mumble>? 15:39
sorear[airport] o/ colomon
dalek d: 6348f35 | larry++ | STD.pm6:
allow multiple return params
TimToady --> airport 15:55
std: sub a(Int $foo, Str $bar --> Bool $cat, Set $dog ) { ... }
camelia std b29e940: OUTPUT«===SORRY!===␤Unable to parse signature at /tmp/xnGqRCxTAh line 1:␤------> sub a⏏(Int $foo, Str $bar --> Bool $cat, Set $␤Couldn't find final ')'; gave up at /tmp/xnGqRCxTAh line 1:␤------> sub a(Int $foo, Str $bar --> Bool $c…
TimToady ENOTYET
TimToady afk & 15:56
sorear[airport] what does that even mean 16:00
flussence we haven't figured that part out exactly yet :)
timotimo can i put comments into a < ... > somehow? 16:02
flussence rn: say < #`nope` > 16:02
camelia rakudo b2072f, niecza v24-68-geaf57ce: OUTPUT«#`nope`␤»
timotimo rn: say << #`(nope) >>
camelia rakudo b2072f, niecza v24-68-geaf57ce: OUTPUT«#`(nope)␤» 16:03
flussence rn: say « {#`(maybe)} »
camelia niecza v24-68-geaf57ce: OUTPUT«Use of Nil as a string␤ at /home/p6eval/niecza/lib/CORE.setting line 1384 (warn @ 5) ␤ at /home/p6eval/niecza/lib/CORE.setting line 466 (Nil.Str @ 4) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /tmp/jYMpXdumQ9 line 1 (mainline @ 5) ␤ at /home/p6eval/…
..rakudo b2072f: OUTPUT«␤»
timotimo rn: sub comment($){}; say << comment("what the hell is going on") a b c >>
camelia niecza v24-68-geaf57ce: OUTPUT«Potential difficulties:␤ &comment is declared but not used at /tmp/hDsu9fuSgz line 1:␤------> sub comment⏏($){}; say << comment("what the hell is ␤␤comment("what the hell is going on") a b c␤»
..rakudo b2072f: OUTPUT«comment(what the hell is going on) a b c␤»
sorear[airport]_ nqp: sub foo(*@_, *%_) { }; foo(:a(say(2), say(1)) 16:04
camelia nqp: OUTPUT«Confused at line 2, near "foo(:a(say"␤current instr.: 'panic' pc 14721 (src/stage2/gen/NQPHLL.pir:5232) (src/stage2/gen/NQPHLL.nqp:279)␤»
sorear[airport]_ nqp: sub foo(*@_, *%_) { }; foo(:a(say(2)), say(1))
camelia nqp: OUTPUT«2␤1␤»
sorear[airport]_ nqp-jvm: sub foo(*@_, *%_) { }; foo(:a(say(2)), say(1))
camelia nqp-jvm: OUTPUT«1␤2␤»
sorear[airport]_ npr: sub foo(*@_, *%_) { }; foo(:a(say(2)), say(1)) 16:05
camelia rakudo b2072f, niecza v24-68-geaf57ce, pugs: OUTPUT«2␤1␤»
sorear[airport]_ niecza explicitly evaluates arguments in source order, nqp-jvm explicitly evaluates all positionals before all named, and I have no idea what {rakudo,nqp-parrot,pugs} are doing 16:06
timotimo tbh, i'd love a quoting adverb that allows comments inside strings 16:07
well, at least inside shellwords/quotewords
that may be the only place it makes sense, regarding whitespace around comments etc
sorear[airport]_ {"ignored";""} 16:08
timotimo sorear[airport]_: only as long as semicolon lists are NYI, no? 16:11
sorear[airport]_ timotimo: that's a block, it contains statements. not a semilist. 16:12
jnthn o/ from the airport 16:13
sorear[airport] o/ jnthn 16:14
timotimo oh, right
sorear[airport] come to gate 20 if you can. we have 3 p6people already.
timotimo hackairthon? 16:15
jnthn sorear[airport]: um, I'm at Dulles :)
sorear[airport] hackathon in a busy airport? WHY NOT.
jnthn: oh.
jnthn Got 5ish hour layover here
What was the aim of 4fa7d88e? 16:16
colomon airport hackathon! 16:17
jnthn (That is, I don't see it doing anything annotation related, unless I'm missing something...) 16:18
sorear[airport] Oh, was that one for me?
jnthn sorear[airport]: yes :)
sorry, forgot to foo: it 16:19
sorear[airport] "annotations" is used in the more general sense 16:20
that patch fixes the LocalVariables stuff so that jdb can actually find it
jnthn aha, ok
Then I'm fine with it. :)
sorear[airport] without that, the ++local locals were being generated with a 0..^0 ip range (hence ignored) and the ++arg locals weren't being annotated at all 16:21
timotimo d'oh, the NCurses module doesn't bind tigetstr >_> 16:36
diakopter hm, I don't see labster 16:40
tadzik me neither
jnthn diakopter: Hope your trip was fine :) 16:41
diakopter didn't fall asleep driving, all the way, anyway
jnthn That's a good thing. 16:42
Lot of queues, but I made the flight easily.
diakopter heading to real texmex 16:46
jnthn :)
lunch sounds like a good idea...
jnthn goes to find something
timotimo oh, wow, the terminfo format description format is almost universal, all it needs is a goto or loop m) 16:51
dalek rl6-roast-data: 0106f45 | coke++ | / (4 files):
today (automated commit)
17:37
colomon rn: say '/foo/bar.txt'.path
camelia rakudo b2072f: OUTPUT«IO::Path</foo/bar.txt>␤» 17:38
..niecza v24-68-geaf57ce: OUTPUT«Path</foo/bar.txt>␤»
colomon rn: say IO::Path.gist
camelia rakudo b2072f, niecza v24-68-geaf57ce: OUTPUT«(IO::Path)␤»
dalek kudo-star-daily: 37b5e9f | coke++ | log/ (5 files):
today (automated commit)
17:42
[Coke] make: *** [NQPP5QRegex.pbc] Segmentation fault 17:43
flussence uh oh, mono 2.10 -> 3 update. I hope my local niecza install survives this... 17:44
[Coke] I did a git clean of nqp, rebuilt, still segfaulting. (trying to rebuild rakudo) 17:50
(this on feather)
trying with master...
tadzik [Coke]: I got that too :( 17:54
and so did sorear, I think
RedditAnalytics o/ 17:59
colomon \o
RedditAnalytics my friend went to the Perl conference and I didn't even know it. Mike from Fark.com 18:00
tadzik star: '.'.path.WHAT
camelia star 2013.02: ( no output )
tadzik star: '.'.path.WHAT.say
camelia star 2013.02: OUTPUT«IO::Path()␤»
timotimo i don't see how to do variadic argument calls using zavolaj; is that possible? 18:03
arnsholt Depends on how variadic you need it to be 18:04
dalek ast: b293ce3 | (Solomon Foster)++ | S02-types/set.t:
Change .set calls to .Set.
arnsholt If you just need one (or a few) variants, you can use the is symbol trait to have several versions of the same function
But if client code of your lib needs to be able to pass more or less anything, it's not really possible ATM, I'm afraid 18:05
timotimo aaw
it's about the tparm function from ncurses. maybe it will only ever have up to 9 arguments 18:06
arnsholt It does say that portable programs should always use 9 arguments after the format, so you could do that, and make all the non-format parameters optional with a default of 0, or something 18:11
timotimo arnsholt: i could make a multi for that, yes?
oh, that sounds sensible; i hope it doesn't barf
benabik "Portable applications should provide 9 parameters after the format; zeroes are fine for this purpose" So it shouldn't barf. 18:13
timotimo oh, cool
[Coke] tadzik: had to do --gen-nqp=master --gen-parrot=master 18:14
arnsholt OTOH, that'll mean you can only pass ints, which may or may not be appropriate 18:16
timotimo how do i implement the "errret" part of int setupterm(char *term, int fildes, int *errret);? 18:22
timotimo arnsholt: thoughts? 18:28
arnsholt timotimo: CArray[int] 18:33
And pass in a single-element array
Ulti so I needed to reverse a string... I came up with "Matt".split('').reverse.join before bothering to discover its .flip instead :/ 20:05
tadzik .comb() is the news .split(''):) 20:08
Ulti tadzik I'd rather golf "Matt".split('').reverse.join down to "Matt".flip ;P is .comb implemented in a tighter way? 20:11
Ulti seriously though it would be nice if "".reverse kind of failed or gave you a warning 20:12
"did you really mean to reverse a single item string? maybe you mean .flip" 20:13
maybe something like use 5to6warnings
timotimo_ Calling 'internal_setupterm' will never work with argument types (Str, Int, CArray+{IntTypedCArray}) (lines 16, 16) Expected: :(Str $term, Int $fd, CArray+{IntTypedCArray} $error) 21:18
timotimo_ :( 21:19
[Coke] windows people - if I want to quote an argument to a command, is "" ok? 21:39
(preferred over '') ?
timotimo_ try q“foobar” 21:40
eternaleye .tell FROGGS Sorry for taking so long, but futures and promises can be thought of as 'handles' to asynchronous computation. In C++, for instance, a future is a container-ish-thing, which you get the value from like joining a thread, and the default implementation is done with a thread pool. 21:46
yoleaux eternaleye: I'll pass your message to FROGGS.
eternaleye .tell FROGGS Examples: www.justsoftwaresolutions.co.uk/thr...mises.html
yoleaux eternaleye: I'll pass your message to FROGGS.
eternaleye .tell FROGGS rough p6ification: Future[Int] answer = async do_foo(); other_stuff(); say answer.get() # Returns Int
yoleaux eternaleye: I'll pass your message to FROGGS.
eternaleye .tell FROGGS I read this as "async do_foo will give me an Int in the Future. In the meantime, I'll do other_stuff, then wait until I get the answer"
yoleaux eternaleye: I'll pass your message to FROGGS.
eternaleye .tell FROGGS Actually, a parameterized Future role as the return value of async might work pretty well. 21:47
yoleaux eternaleye: I'll pass your message to FROGGS.
[Coke] wonders why nqp is writing PIR code to dump parrot config values. 22:39
(rather than using parrot-config) 22:48
sorear o/ #perl6 22:53
dalek p: 8b2b048 | sorear++ | src/vm/jvm/runtime/org/perl6/nqp/runtime/CallFrame.java:
Fix a comment fossil
22:59
sorear .ask jnthn Would significant changes to ResumeState.java be acceptable? It *looks* currently unused... 23:16
yoleaux sorear: I'll pass your message to jnthn.
sorear o/ benabik
benabik o/ sorear 23:17
colomon \o sorear, you home? 23:18
sorear colomon: layover. PHX. 23:20
lizmat o/ sorear!
sorear with very good wifi
o/ lizmat!
sorear is a little disappointed by the above "commit flood"
lizmat we are trying to figure out how to fit all of our goodies in our bags
more commits from me coming :-) 23:21
colomon \o/
lizmat++
sorear lizmat: you two still in Austin? 23:22
lizmat sorear: yes, did some more shopping after dropping you folks off at Austin Airport 23:22
Waterloo records was too good a place to pass up on 23:23
colomon lizmat: get anything good? 23:25
lizmat about 120 cm of CD's 23:25
lizmat mostly 2nd hand, hard to find in Europe stuff 23:26
dalek kudo/nom: 215b1d8 | (Elizabeth Mattijsen)++ | src/core/Any.pm:
Added support for :exists with :kv:p:k
23:28
ast: 7280fe2 | (Elizabeth Mattijsen)++ | S32-hash/delete-adverb.t:
Some more :exists related tests and some unfudging
23:29
timotimo_ :kv:p:k isn't actually a combination that'll work, right? 23:31
lizmat "An implementation is free to silently ignore any other combinations or silently prefer one of the adverbs given above any other." 23:35
timotimo_ ouch 23:35
lizmat currently, :kv is implemented before :p and before :k, so that will just do :kv
timotimo_ that seems like a recipe for trouble :(
lizmat do you want illegal combinations to die ? 23:36
dinner&
timotimo_ haven't given it much thought yet, but i think that would be a good idea 23:37
timotimo_ or maybe if you give dumb combinations, you deserve to get dumb results on different implementations 23:37
eternaleye timotimo_: Better to tell the user they're being dumb, then have them rely on one variant of dumb behavior and spread dumb code elsewhere. 23:50
*than
colomon 's last really notable record store find was "Sing Along With Basie" (LP) back in 2007. 23:56