perl6-projects.org/ | nopaste: sial.org/pbot/perl6 | evalbot: 'perl6: say 3;' | irclog: irc.pugscode.org/
Set by mncharity on 25 March 2009.
00:00 payload2 joined, payload left 00:01 payload1 left 00:03 DemoPhreak is now known as DemoFreak, bacek left 00:07 meppl joined 00:16 Entonian joined
jnthn my word, I can't believe the YAPC::EU schedule is out already. 00:19
00:24 jhuni left 00:34 eternaleye left
meppl good night 00:36
00:38 meppl left 00:40 DemoFreak left 00:50 dukeleto left 00:52 dukeleto joined 01:04 yary joined
yary hello all- I was trying to search the rakudo tracker, but I get a 500 server error 01:04
is it down, or is it me?
can't get to rt.perl.org/rt3/Public
01:05 dukeleto left
yary ... a web search turned up the bug I hit so don't need to get to the tracker at the moment, still someone ought to poke it. 01:12
01:16 sri_kraih_ left 01:25 eternaleye joined
pugs_svn r26610 | lwall++ | [camelia] some smoothing and de-linefication 01:29
r26611 | lwall++ | [p6proj] update camelia 01:36
02:08 hercynium joined 02:11 dukeleto joined 02:12 PhatEddy left 02:17 Kisu left, Kisu joined 02:23 nihiliad joined 02:27 dukeleto left 02:30 japhb left 02:35 Whiteknight left 02:47 bacek joined
TimToady /e 02:49
02:49 les_ joined 02:51 les left, les_ is now known as les 02:53 Limbic_Region left 02:55 M_o_C left
pugs_svn r26612 | lwall++ | [camelia] add pdf version 03:03
03:07 Casan left 03:08 dukeleto joined 03:12 justatheory left, dukeleto left 03:18 dukeleto joined 03:19 jhuni joined 03:32 hcchien left, clkao left, Entonian_ joined 03:34 Entonian left
diakopter pictures an onion-camel cocooning in a chrysalis 03:37
03:37 orafu left, orafu joined
s1n isn't there a perl social room? i thought it was like #perlsoc or some such 03:42
03:44 japhb joined 03:49 dukeleto left 03:55 clkao joined 04:11 mikehh_ joined 04:17 km2_ left
pugs_svn r26613 | lwall++ | [p6proj] smaller top wings on camelia 04:18
04:19 yary left
pugs_svn r26614 | lwall++ | [camelia] squarified to match favicon aspect better and enhance face 04:20
04:27 mikehh left
pugs_svn r26615 | lwall++ | [t] deduping, \c[1,2,3] tests 04:33
r26615 | lwall++ | [p6-proj] make p6-proj link to pdf instead of svg
r26615 | lwall++ | [STD] improvements to enum parsing/faking
04:38 alester joined 04:52 Infinoid joined, dalek left, dalek joined 04:56 dukeleto joined 04:59 hercynium left
diakopter a bipedal insect 05:01
skids some meany pulled off her other legs
diakopter ouch
now that she doesn't have legs on which to land, she'll be forced to fly forever. 05:02
05:12 mikehh_ is now known as mikehh 05:14 dukeleto left
pugs_svn r26616 | lwall++ | [p6proj] debug the right margin 05:16
TimToady they're there, but behind the front legs
you realize this means that Perl 6 can never be fully debugged... 05:18
05:21 frodwith_ joined 05:23 xinming_ joined 05:30 frodwith left
skids didn't want to be the one to draw that association :-) 05:31
05:33 Kisu left
TimToady Perl 6 will be beautiful, but not perfect. :) 05:33
05:33 Kisu joined 05:36 frodwith_ left 05:39 xinming left
Infinoid thus guaranteeing job security :) 05:39
05:58 jhuni left
skids median runstats for INITIAL_BUCKETS settings in hash.c (on my system YMMV) 06:04
16 19.21user 0.16system 0:21.25elapsed 91%CPU 28342minor pagefaults (default)
8 18.94user 0.16system 0:21.06elapsed 90%CPU 27677minor pagefaults 06:05
4 18.86user 0.16system 0:20.87elapsed 91%CPU 27285minor pagefaults
but setting it to 4 exposes a race condition
(this for a script that does little hashing perl side, so mostly backend hash use) 06:06
06:25 cbk joined 06:26 nihiliad left
cbk how can i get user input from the keyboard in perl6? "= =$*IN" doesn't seem to work for me...? 06:27
06:30 skids left 06:32 dukeleto joined 06:37 Entonian_ left
eternaleye cbk: the '=' prefix operator is dead, use $*IN.get 06:37
cbk: Also, there's the 'prompt' function. It takes a string argument, puts it on the console, and returns a line of user input. 06:38
pugs_svn r26617 | lwall++ | [t] warning suppression
cbk @eternaleye Thanks I will try that, In the future, where can I go to look this type of info up on my own? 06:43
lambdabot Unknown command, try @list
TimToady it's buried down in perlcabal.org/syn/S32/IO.html, but mentioned elsewhere in the synopses 06:51
perlcabal.org/syn is the overview of the specs
they live in pugs/docs/Perl6/Spec, so if you have the repo, you can grep it
but this particular thing only changed a couple weeks ago, so is still non-obvious 06:53
06:53 japhb left 06:54 japhb joined
Matt-W jnthn++ - hurrah for better enums 06:54
06:55 xinming_ left 06:58 xinming joined
cbk @TimToday: Thanks for the links. 06:58
lambdabot Unknown command, try @list
TimToady don't need the @, it just confuses lambdabot 07:01
cbk ok
TimToady and also suppresses irssi hilighting, as it happens 07:02
the @ just marks channel ops
07:04 alester left
cbk if prompt is a function, then could I do this (and have it work!) $input.prompt 07:05
TimToady there's no failover from methods to functions, or vice versa 07:06
if that's what you're asking...
wrt prompt, generally there's only one sensible place to prompt anyway... 07:08
I suspect that's why there's only the function
cbk well all I want to do is have a user type in there name and assign it to my $input var! the $*IN did not work? 07:11
TimToady my $input = prompt("name: ") 07:12
or print 'name: '; my $input = $*IN.get; 07:14
cbk COOL! thanks TimToday! My faith in Per6 has been restored! 07:19
night
TimToady good night
07:19 cbk left
TimToady zzz & 07:23
08:16 orafu left, orafu joined 08:35 DemoFreak joined, meppl joined 09:06 iblechbot joined 09:10 bacek_ joined 09:12 bacek left 09:29 c9s_ joined 09:30 c9s left 09:36 meteorjay joined 09:39 M_o_C joined 09:43 c9s_ is now known as c9s 09:53 payload joined, payload2 left 09:58 sri_kraih joined 10:00 cognominal left 10:04 cognominal joined 10:05 payload left, payload1 joined 10:11 kane_ left 10:12 kane_ joined 10:14 kane_ left 11:00 jan_ left 11:03 jan_ joined 11:25 meppl left 11:37 IRSeekBot joined 11:38 rblasch joined 11:46 kane_ joined 11:59 Whiteknight joined 12:16 masak joined
masak hi #perl6, you wonderful channel you. 12:17
masak is on a bus
12:19 payload1 left
sbp yo masak 12:19
masak sbp: \o 12:20
I don't see anything wrong with [perl #65272] submitted by Arne Skjærholt.
specifically, I'm not sure what a 'static method call' would mean in Perl 6. there might be some confustion as to what the supplied code should do. 12:21
12:22 payload joined 12:47 M_o_C left 12:48 payload left
masak rakudo: multi sub foo(Int $n where 1) { say "OH HAI" }; sub foo(Int $n) { say "CHEEZBURGER" }; foo(1) 12:56
p6eval rakudo ec69e2: OUTPUT«CHEEZBURGER␤»
masak something like "Rakudo wrongly allows declaration of a multi and an only sub in the same scope".
anyone know if that's in RT already?
jnthn That should be an error unless there is a proto in scope. 13:09
masak right.
jnthn (which in this case there wasn't)
masak jnthn: does that mean that the presence of a proto makes 'multi' implicit on all sub declarations in the same scope? 13:10
jnthn masak: Yes.
masak understands a bit more of the 'proto' semantics 13:11
jnthn rakudo: proto foo() { }; sub foo(Int $x} { 1 }; sub foo(Str $x) { 2 }; say foo(1); say foo("a");
p6eval rakudo ec69e2: OUTPUT«Unable to parse multisig; couldn't find final ')' at line 1, near "} { 1 }; s"␤␤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:86)␤»
masak bug?
jnthn rakudo: proto foo() { }; sub foo(Int $x) { 1 }; sub foo(Str $x) { 2 }; say foo(1); say foo("a");
p6eval rakudo ec69e2: OUTPUT«1␤2␤» 13:12
jnthn masak: I typed a } where I shoulda typed a ).
masak ah.
masak sees now
jnthn Anyway, it works.
Yeah, took me a moment too.
masak jnthn: aye, but the CHEEZBURGER one shouldn't work.
jnthn aye, we should complain loudly about that one. 13:13
masak makes a quick trip through RT before submitting
jnthn fwiw I don't recall seeing an RT about that.
masak kthx.
对了, submitting. 13:14
jnthn ooh, tentative YAPC::Asia dates are out. :-) 13:16
masak Asia++
jnthn never went to Japan before, so is pondering taking his chance.
jnthn confirms his accepted YAPC::EU talk 13:18
The schedule looks pretty good. :-)
13:20 nihiliad joined
TimToady it was not the original intent that a proto allow unmarked subs to default to multi rather than only 13:20
though that is more like what proto does on variables, I suppose 13:21
jnthn TimToady: It seem to recall it said somewhere in the spec that it did cause that... 13:22
*I
TimToady: I think part of the motivation is in role composition too.
masak cool, so now Web.pm has a deadline, of sorts.
apart from the end of the grant, I mean.
jnthn Where you resolve the conflict by putting a proto method in which forces multi-ness on the non-multi conflicters.
TimToady but that's the other way around, scopewise 13:23
jnthn That bit is certainly in S1[24]
Other way around in what sense?
In that the ones from the roles are being brought into that scope?
TimToady or more to the point, timewise, causewise, something like that 13:24
the two roles are written before the class that integrates them
masak rakudo: multi method perl(Object $self where /foo/:) { "OH HAI" }; say "foo".perl
p6eval rakudo ec69e2: OUTPUT«"foo"␤»
TimToady whereas the proto is written before, and the calls put later
jnthn TimToady: It's right at the top of S06.
A C<proto>
also adds an implicit C<multi> to all routines of the same short
name within its scope, unless they have an explicit modifier.
TimToady before temporally, I mean
well, I probably decided that and forgot :) 13:25
jnthn :-)
I do tend to look at the spec and implement whatever it was you forgot. ;-)
TimToady one tends to slip back to one's original conceptions
13:26 amoc^ joined, Casan joined
jnthn OK, if you change your mind, please update the spec, and I'll get Rakudo to follow along. 13:26
TimToady btw, is there really a need to expose a Multi type?
13:26 jhorwitz joined
TimToady there isn't one specced... 13:26
jnthn It's handy for introspection.
TimToady but there's a test for it
jnthn But also consider
multi foo($x) { }; multi foo() { }; # what is the type of &foo 13:27
It can't be Sub.
Because that's the singular. And also we may have others that were exported methods.
TimToady ($x)|(), which is a multisig
jnthn Or exported SubMethods 13:28
TimToady std: sub foo ($x) | () {...}
jnthn A signature is something a sub has, not is.
p6eval std 26617: OUTPUT«ok 00:02 36m␤»
jnthn OK, sure you can have that, but it doesn't hold when you have multiple bodies. 13:29
TimToady I don't follow your other arg
doesn't hold how so?
jnthn OK, imagine I had written 13:30
TimToady is still in a pre-caffiene state...
jnthn multi foo($x) { 1 }; multi foo() { 2 };
There are two different implemenations there, not just two different signatures.
I can see &foo.signature returning a junction of signatures. That's fine. 13:31
But &foo.WHAT I'd seen as handing back some Multi type.
Which provides, say, &foo.candidates
For introspective purposes.
TimToady why shouldn't any &foo be able to hand back a list of candidates, where only subs have only one candidate? 13:32
jnthn I guess we could try and make it that way, but I'd always seen an only sub as singular. 13:33
TimToady wrapping turns a singuler into a plural in place
jnthn And a multi as "a collection of code objects"
TimToady if wrapping is going to respond to callnext like other dispatchers
jnthn That can happen without confusing single and multiple dispatch. 13:34
13:34 ZuLuuuuuu joined
masak key codes for slightly special keys, like the up arrow or the function keys, will they be covered by some part of the spec, or is that too platform-dependent? 13:35
TimToady well, wrapped routines have their own subdispatcher in either case, I expect
since all the candidates present the same interface, presumably
13:35 skids joined
TimToady masak: this seems like something that belongs in the definition of event handling, not the language itself, offhand 13:37
masak TimToady: ok.
but event handling will be part of the spec, to some degree, no?
TimToady except, of course, to the extent that event handling *is* part of the language :)
masak right.
jnthn TimToady: Yeah, I'd taken in that the wrap mechanism and the next candidate mechanism all want to hang off the same thing. 13:38
I think I know how to cleanly implement that.
13:39 PhatEddy joined
TimToady but if you do that, then &foo acquires more than one candidate 13:39
when you wrap
jnthn But I hadn't seen the distinction between one sub and a bunch of them going away.
TimToady so a singular/plural unification seems in order there
jnthn We still will need a way of talking about an individual candidate.
Sub, Method, etc had all to me seemed very much singular. 13:40
TimToady &foo is just a callable abstraction, and how it handles the call is probably best encapsulated
like any object, they're singular on the outside, but potentially plural inside
jnthn I consider "this is wrapped" and "this is a multi" being different kinds of plurality. 13:41
TimToady that's because you're implementing them, not calling them :)
jnthn I still don't see how we can really do away with a Multi type though. 13:42
This is one place where smop and Rakudo seem to have gone down the same road, fwiw. 13:43
TimToady I don't think &foo should change its outside type just because someone implemented differently
masak rakudo: my $i = 0; do * until $i++ > 5; say "alive" # I've been missing the 'nothing' keyword, but this is not too bad either.
p6eval rakudo ec69e2: OUTPUT«alive␤»
jnthn If you want to do that, you need to specify what that type is.
masak rakudo: my $i = 0; do Whatever until $i++ > 5; say "alive"
p6eval rakudo ec69e2: OUTPUT«alive␤» 13:44
jnthn And given you might have multi variants that come from exported methods, and others that are subs, etc, I'm not sure how you can just say "it's a Sub" and so on...
masak ♥ Perl 6
TimToady &foo is just the name of whatever foo does in the current namespace 13:45
jnthn So what does &foo.WHAT give?
TimToady Code, I think 13:46
masak rakudo: *
p6eval rakudo ec69e2: ( no output )
TimToady let me think about it some more; maybe I can persuade myself not to care 13:47
jnthn :-)
TimToady: While you're on it, also ponder whether it's valid to wrap a bunch of multis wholesale or only one of the candidates. :-) 13:48
PhatEddy naive question - someone was asked to use "my $in = $*IN.get;" to get a line of input yesterday. Why not just "my $in = get;" ? 13:50
TimToady jnthn: it just feels like a leaky abstraction if that matters to the user
masak PhatEddy: because there's no sub 'get'...? :)
PhatEddy should there be one? 13:51
TimToady yes
to go with lines()
masak PhatEddy: patches welcome.
jnthn TimToady: They are different things.
TimToady to the implementor
jnthn No, to the user too.
Do I want to wrap the multi as a whole, and the callnext or whatever will do a multi-dispatch.
Or do I want to find a single candidate that I care about and wrap just that one. 13:52
13:52 amoc^ left
TimToady I would think the Perl way would be to allow either, if you can name them 13:52
PhatEddy RT #65120 was going to add lines() and slurp() - maybe I'll add get to it too ...
TimToady if I &foo.wrap, it uses the current namespaces idea of &foo
's 13:53
masak PhatEddy: sounds good.
jnthn Right, agree.
I just think that while you should always be able to get at &foo and call it or wrap it and not care, there are times when people will care. 13:54
And want to know if the thingy they have is going to go off and do a single dispatch or a multiple dispatch.
TimToady and then they can say &SomeModule::foo:(Int,Str).wrap instead to be more specifi
why would they want to know that?
jnthn Introspection? 13:55
TimToady I would think they want to *not* know that most of the time
jnthn I don't see how we can't have both.
TimToady and when they do want to know it, they can introspect &foo via some method
jnthn &foo() whether it's of type Code or Sub or Multi is going to look just the same if you invoke it, wrap it, unwrap it, and so on. 13:56
Anybody who starts asking exactly what sort of thing it is is already at the point of introspection. 13:57
And thus below the "don't have to care" level. 13:58
TimToady okay, here's the thing that bothers me. I don't mind if &foo does Multi, but the spec test is testing to see if it isa Multi, and I think that's over-orthogonalizing the space in a classish way
at the end of t//spec/S06-multi/syntax.t 13:59
jnthn I'm quite open to the idea that .isa is too strong a promise.
TimToady I thought you'd be :)
that's why I mentioned it...
jnthn If your mainly wanting to see that test become .does(Multi)
Or even the hand-wavey &foo ~~ Multi
That doesn't bother me at all.
TimToady though I think the marked case should actually be Only, from an optmization point of view 14:00
well, even Only can become plural through wrapping 14:01
jnthn Sure, but you still know fairly well where the dispatch is going.
TimToady maybe the optimizer wants Inlineable instead. :)
well, I still see wrapping and multiple dispatch as basically the same thing 14:02
and the point of is inline is to disable wrapping, mostly 14:03
masak
.oO( do not wrap )
jnthn I'm not convinced inlining of multis is always impossible. 14:04
TimToady though there's something going on here like closing and finalizing classes, from a pessimization point of view
jnthn If we statically know all of the candidates in a given scope and we statically know the types of the parameters, for example...
On the other hand, inlining of something that can get wrapped probably always is. 14:05
TimToady sure, just trying to make the possible common, to the extent possible :)
jnthn And I guess that's part of why I would rather not see multi dispatch and wraping *so* closely entangled.
Even if both do operate through the same kind of candidate list-ish mechanism.
TimToady well, but making a hard type distinction is another form of entanglement, which is what I'm carping about 14:06
but we can let it go for now, if we s/isa/does 14:07
jnthn Sure, and I agree that .isa is too strong a check.
Are you thinking of adding a check that .isa is false too, though? I'd rather leave that as a "not the way to check it, implemenation specific" kidna thing if we can. 14:08
rakudo: multi foo() { }; say &foo ~~ Multi; say &foo.does(Multi); 14:09
p6eval rakudo ec69e2: OUTPUT«1␤1␤»
pugs_svn r26618 | lwall++ | [syntax.t] relax isa Multi to ~~ Multi 14:10
jnthn
.oO( phew )
pugs_svn r26619 | lwall++ | [CORE] suppress Multi undef error 14:13
14:30 dalek left, dalek joined
Matt-W hurrah 14:33
form works again
although I think I've made a mistake in the semantics
masak Matt-W: anything pullable?
Matt-W Damian's module counts a field spec of {<} as having width 3, my module counts it as width 1
so I think I need to fix that
masak: yes I just pushed it
masak: verbatim line and block fields now exist 14:34
masak pulls
Matt-W Although I'm having some doubts about whether their behaviour is correct
I'll have to run a bunch of comparisons against Perl6::Form at some point
masak Matt-W: what if I wanted a left-justified field of width 2?
Matt-W masak: I don't know
That's why I just assumed the {} don't count 14:35
masak Matt-W: you should make Perl6::Form and your module pass the same suite. :)
Matt-W although if they do, it's nice for the layout of your picture strings
TimToady the whole point of formats was to keep the picture consistent on columns, so {<} is 3 by that reckoning
Matt-W but anything less than 3 is a problem 14:36
TimToady wasn't a problem for p5 formats :)
since we had @ and @< and @>
masak Matt-W: what does '*@args is Scalar' do that '*@args' doesn't? 14:37
TimToady if you want your columns to not line up, that's what sprintf is for :)
Matt-W masak: I can't remember
TimToady I don't think "is Scalar" means anything anymore 14:38
Matt-W masak: probably something to do with passing arrays in
masak I've never seen 'is Scalar' in working code before.
Matt-W if it doesn't do anything, rakudo probably shouldn't accept it
TimToady the idea was to evaluate each argument in scalar context
masak Matt-W: I'll run the test suite, remove it, and run it again.
Matt-W TimToady: right so you could say form("some string", @data, "Picture"); 14:39
Which would be nice
(and have @data not interpolate into the arguments) 14:40
TimToady we'll have to think about how that notion fits into the world of Captures
masak I thought @data already didn't interpolate into the arguments. 14:41
rakudo: sub foo(@data, $bar) { say $bar }; my @data = 1,2,3; foo(@data, 'OH HAI') 14:42
p6eval rakudo ec69e2: OUTPUT«OH HAI␤»
TimToady it's possible this is simply binding to *@@ these days
but maybe not
probably not, or slices will break when you say @x[1, @data, 3] 14:43
masak Matt-W: removing 'is Scalar' doesn't make any tests fail. 14:44
Matt-W masak: that's because none of them rely on it doing anything
masak Matt-W: well, given that 'is Scalar' wasn't needed to make @data not interpolate in the parameter list, why keep it? 14:45
Matt-W because I've not tested it 14:46
it's from the original spec for that sub
masak ah, ok. 14:47
Matt-W rakudo: sub foo(*@args) { say @args.elems; }; my @d = 1,2,3; foo(@d, 'a');
p6eval rakudo ec69e2: OUTPUT«4␤»
Matt-W see also ^
masak oh.
right, the splat thing might actually affect matters. 14:48
rakudo: sub foo(*@data, $bar) { say $bar }; my @data = 1,2,3; foo(@data, 'OH HAI')
p6eval rakudo ec69e2: OUTPUT«1 2 3␤»
masak huh. 14:49
I'd expect the splat to be more greedy than that.
diakopter 02:23 <@TimToady> zzz & .... 08:20 <@TimToady> it was ... 14:51
TimToady I'm in two TZ at once :) 14:52
std: sub foo(*@data, $bar) { say $bar }; my @data = 1,2,3; foo(@data, 'OH HAI')
p6eval std 26619: OUTPUT«##### PARSE FAILED #####␤Can't put required parameter after variadic parameters at /tmp/spEF6EpDfd line 1:␤------> sub foo(*@data, $bar) { say $bar }; my @data = 1,2,3; foo(@d␤ expecting any of:␤ parameter␤ post_constraint␤ trait␤ whitespace␤FAILED 00:02
..36m␤»
TimToady masak: see ^
14:52 nbrown joined
TimToady rakudo is being overly accepting here 14:53
Matt-W bug!!!
masak submits!!!
Matt-W gone for a bit & 14:54
TimToady will likely be put off till STD runs on rakudo :)
14:57 nbrown_ joined
TimToady rakudo: say Int.defined; say Int::.defined 14:57
p6eval rakudo ec69e2: OUTPUT«0␤0␤»
TimToady should be 0 1 if :: gets to the package for Int 14:58
trying to figure out how to write tests like UNIT::OUTER:: === CORE:: and such
but I need to know how to get the identity of a lexical symbol table from a typename 14:59
pugs_svn r26620 | masak++ | [u4x/TODO] added a lot of terms for parameters 15:04
r26621 | masak++ | [u4x/TODO] {result -> abstract} object
pmichaud good *, #perl6 15:09
TimToady yo 15:11
masak H H 15:12
O AI
TimToady お愛 15:14
pmichaud (reading scrollback)
TimToady the mutable/immutable distinction is close to the mystery of time; we can only perceive the immutable scrollback, not the future mutable scrollforward 15:19
jnthn oh hai
masak the best way to predict the scrollforward is to create it. 15:20
jnthn ponders what to eat/cook for dinner
TimToady masak: I knew you were going to say that :P
15:21 nbrown left, nbrown_ is now known as nbrown
masak :) 15:21
rakudo: my @a = <foo bar baz>; .=uc for @a; say @a.perl 15:22
p6eval rakudo ec69e2: OUTPUT«Syntax error at line 1, near ".=uc for @"␤␤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:86)␤» 15:23
TimToady std: my @a = <foo bar baz>; .=uc for @a; say @a.perl
pmichaud we still don't support .= flip
p6eval std 26621: OUTPUT«ok 00:02 36m␤»
pmichaud er, .=flip
(as a term)
(.=uc being analogous here.) 15:24
std: my @a = <foo bar baz>; .= uc for @a; say @a.perl;
jnthn rakudo: my @a = <foo bar baz>; .= uc for @a; say @a.perl
p6eval std 26621: OUTPUT«##### PARSE FAILED #####␤Can't understand next input--giving up at /tmp/70EAuNVzdi line 1:␤------> my @a = <foo bar baz>; .= uc for @a; say @a.perl;␤ expecting dotty method or postfix␤FAILED 00:02 36m␤»
rakudo ec69e2: OUTPUT«Syntax error at line 1, near ".= uc for "␤␤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:86)␤»
TimToady I don't feel any great need to support that form... 15:25
pmichaud TimToady: but the version without the space is supported?
std: my @a = <foo bar baz>; .=uc for @a; say @a.perl;
p6eval std 26621: OUTPUT«ok 00:02 36m␤»
TimToady already did that one above
pmichaud right
just asking for confirmation
TimToady 'yes' xx * 15:26
pmichaud thanks
jnthn
.oO( why on earth are single flights more expensive than return ones )
pmichaud: Do you know anything more about the plans for a Parrot Developer Summit around YAPC::EU? 15:27
pmichaud jnthn: no details, no.
jnthn pmichaud: OK. Am pondering trying to sort out flights/hotel etc soonish...
pmichaud maybe a message to last year's attendees
yes, I will need to do the same.
15:28 fridim_ joined
jnthn I'm happy to see the Perl 6 is a bit more spread out in the schedule this year, rather than all bunched on one day. 15:28
pmichaud: Ah, we're speaking one after the other, it appears. 15:30
15:31 M_o_C joined
jnthn 40 minutes for the talk you gave in IIRC 90 in Oslo will be interesting. 15:31
PhatEddy I had trouble getting get() working through setting but found it fairly easy in PIR with the following 5 line pir patch: dpaste.com/40312/ . 15:33
how badly is it needed in setting?
jnthn did multi get() { $*IN.get() } not do it? 15:34
PhatEddy no it didn't 15:35
jnthn Hmm. What went wrong?
PhatEddy get iss defined in classes/IO.pir without multi to begin with
jnthn Sure, but you're defining a sub that calls the method. shouldn't be a conflict, afaict. 15:36
PhatEddy I think I got: Null PMC access in find_method()
jnthn Ugh. OK.
I'd like to try and track down why we got that. It points to a bug of some kind. 15:37
PhatEddy the setting code i used was something like 'multi sub get() { return $*IN.get; }'
jnthn Yeah, that doesn't look wrong. 15:38
15:38 Kisu left, xinming left 15:39 xinming joined
PhatEddy the pir looks easy enough though ... should I file a rakudobug ? 15:40
jnthn PhatEddy: Please file a ticket about that not working; it'd be good to fix the underlying bug rather than ignore it by writing stuff in PIR that we really should be able to write in Perl 6.
15:42 payload joined
PhatEddy ok 15:43
15:43 masak left 15:45 masak joined
jnthn -> shop 15:45
masak bus wifi a bit flaky. got thrown off the Interwebz. 15:46
15:46 meppl joined
masak I had a patch going for .=flip at one point; sometime around the post-NPW hackathon. but I must have lost it. 15:48
pmichaud (90 minutes talk in 40 minutes) shouldn't be too much of a problem; it's an accordian talk where there are lots of things that can be added/removed 15:49
PhatEddy: did you put the multi sub inside the IO class or outside of it? 15:50
PhatEddy outside - all the way at the bottom
pmichaud hmmm.
I wonder if there's something else called 'get' somewhere. 15:51
PhatEddy It's exported from src/classes/IO.pir
masak rakudo: sub get() { $*IN.get }; say get; say "alive" 15:54
p6eval rakudo ec69e2: OUTPUT«␤alive␤»
masak still no Austrian national anthem... :/
PhatEddy: it works outside of the setting, it seems.
pmichaud perl6: say 'ışığa'.uc; 15:55
p6eval elf 26621, pugs, rakudo ec69e2: OUTPUT«IŞIĞA␤»
pmichaud \o/ 15:56
masak pmichaud: wohoo! what changed?
pmichaud I fixed $*IN, $*OUT, $*ERR to use utf8 encoding by default.
masak excellent.
15:57 Psyche^ joined
PhatEddy rakudo: multi sub get () { $*IN.get } ; say get; say "alive" 16:06
p6eval rakudo ec69e2: OUTPUT«push_pmc() not implemented in class 'Sub'␤current instr.: 'parrot;PCT;HLLCompiler;evalpmc' pc 306668 ((unknown file):-1)␤»
PhatEddy should that have worked?
masak thinks so
PhatEddy: would you like to submit a rakudobug? 16:07
PhatEddy still working on this ...
masak submits it, then 16:08
PhatEddy I just replicated the error message from putting the definition in setting/IO.pm (got the error message wrong) 16:10
error message is (still): too few arguments passed (0) - 1 params expected 16:11
it's like it doesn't seem to find it from the setting.
16:13 Patterner left, Psyche^ is now known as Patterner
pmichaud generally that means it either thinks it's a method instead of a sub, or there's something wrong with the outer contexts. 16:18
22:34 <jnthn> pmichaud: If you know how, or are able to, giving PhatEddy an RT bit could be a good idea. 16:21
I think I offered one previously, but it was declined.
The offer remains, however. :-)
16:30 justatheory joined
diakopter bouncing faether svn/apache2 16:34
16:36 masak left, ejs left 16:42 justatheory left 16:48 ejs joined 16:50 nacho_ left
pugs_svn r26622 | pmichaud++ | [t/spec]: Standardize a couple of plan declarations. 16:50
16:52 amoc joined 16:53 amoc is now known as amoc^, amoc^ left 16:54 amoc joined, amoc is now known as Guest26623 16:55 Guest26623 left, M_o_C left 17:16 amoc^ joined 17:17 rblasch left 17:20 meteorjay left 17:23 justatheory joined 17:28 finanalyst joined
skids wonders if anyone experiences an occasional spurious segv building rakudo. 17:31
finanalyst perl6: my %x = %(<a b c d> X []); %x<a>[3]=2;%x.perl.say 17:32
lambdabot finanalyst: You have 1 new message. '/msg lambdabot @messages' to read it.
p6eval pugs: OUTPUT«\(\("a", \(undef, undef, undef, 2)),)␤»
..rakudo ec69e2: OUTPUT«{"a" => [undef, undef, undef, 2], "b" => [undef, undef, undef, 2], "c" => [undef, undef, undef, 2], "d" => [undef, undef, undef, 2]}␤»
..elf 26622: OUTPUT«Undefined subroutine &GLOBAL::infix_X called at (eval 129) line 3.␤ at ./elf_h line 5881␤»
17:32 nbrown_ joined
skids well, that's pretty weird. 17:34
finanalyst can anyone tell me whether the rakudo response is the expected one? I was expecting to get different arrays for each member of the hash 17:35
instead one array is allocated and the others are aliases (I think)
17:35 justatheory left
finanalyst more like the pugs output, but pugs leaves out the c & d members 17:37
skids Hrm, [] is an anonymous array, so I think it's correct, because you are assigning the same anon array to each index.
But it is weird, because IIRC binding to array/hash is currently broken.
17:38 c9s_ joined
finanalyst why should it be the same anonymous array? 17:38
or what should be the syntax to generate new arrays? 17:39
TimToady [] is supposed to generate a new array
but X doesn't guarantee to re-eval
finanalyst so is rakudo wrong? 17:40
or how do I get a re-eval?
skids my $a; my %x = %(<a b c d> X $a); %x<a>=2;%x.perl.say 17:41
rakudo: my $a; my %x = %(<a b c d> X $a); %x<a>=2;%x.perl.say
X doesn't eval it's rhs multiple times.
p6eval rakudo ec69e2: OUTPUT«{"a" => 2, "b" => undef, "c" => undef, "d" => undef}␤»
skids (is why)
finanalyst rakudo: my %x=<a b c d> Z ([], [], [], []);%x<b>[2]=3;%x.perl.say
skids wonders if he just inflooped evalbot
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤Cannot reduce() empty list␤Cannot reduce() empty list␤{"a" => [], "b" => [undef, undef, 3], "c" => [], "d" => []}␤»
finanalyst rakudo: my %x=%(<a b c d> Z ([], [], [], []));%x<b>[2]=3;%x.perl.say 17:42
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤Cannot reduce() empty list␤Cannot reduce() empty list␤{"a" => [], "b" => [undef, undef, 3], "c" => [], "d" => []}␤»
finanalyst using Z with a list of [] gets what I want, but suppose I dont know how many items there are in the "key name" array 17:43
skids rakudo: my $a; my %x = %(<a b c d> X [234]); %x<a>=2;%x.perl.say 17:44
p6eval rakudo ec69e2: OUTPUT«{"a" => 2, "b" => [234], "c" => [234], "d" => [234]}␤»
TimToady rakudo: my %x = map { $_, [], }, <a b c d>; %x<a> = 2; %x.perl.say 17:45
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤Cannot reduce() empty list␤Cannot reduce() empty list␤{"a" => 2, "b" => [], "c" => [], "d" => []}␤»
skids seems inconsistent, unless [] is special somehow.
TimToady rakudo: my %x = map { $_, [,], }, <a b c d>; %x<a> = 2; %x.perl.say
p6eval rakudo ec69e2: OUTPUT«Statement not terminated properly at line 1, near ", [,], }, "␤␤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:86)␤»
TimToady rakudo: my %x = map { $_, [ ], }, <a b c d>; %x<a> = 2; %x.perl.say
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤Cannot reduce() empty list␤Cannot reduce() empty list␤{"a" => 2, "b" => [], "c" => [], "d" => []}␤»
TimToady it should not be parsing that as a reduce 17:46
rakudo: my %x = map { $_, [()], }, <a b c d>; %x<a> = 2; %x.perl.say
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤Cannot reduce() empty list␤Cannot reduce() empty list␤{"a" => 2, "b" => [], "c" => [], "d" => []}␤»
TimToady rakudo: my %x = map { $_, [ () ], }, <a b c d>; %x<a> = 2; %x.perl.say
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤Cannot reduce() empty list␤Cannot reduce() empty list␤{"a" => 2, "b" => [], "c" => [], "d" => []}␤»
TimToady actually, it seems like something in .perl
jnthn I struggle to see that it's mistaking it as a reduce, since we parse those as full tokens. 17:47
At the moment.
finanalyst rakudo: my %x = %(map { $_, [ () ], }, <a b c d>); %x<a> = 2; %x.perl.say
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤Cannot reduce() empty list␤Cannot reduce() empty list␤{"a" => 2, "b" => [], "c" => [], "d" => []}␤»
TimToady rakudo: my %x = map { $_, [ () ], }, <a b c d>; %x<a> = 2; %x.say
skids The reduce is from trying to say an empty list
p6eval rakudo ec69e2: OUTPUT«a 2b c d ␤»
jnthn rakudo: my %x = %(map { $_, [ () ], }, <a b c d>);
p6eval rakudo ec69e2: ( no output )
TimToady rakudo: my %x = map { $_, [], }, <a b c d>; %x<a> = 2; %x.say 17:48
jnthn Heh, yeah, something in .perl
p6eval rakudo ec69e2: OUTPUT«a 2b c d ␤»
TimToady rakudo: say [] 17:49
p6eval rakudo ec69e2: OUTPUT«␤»
TimToady rakudo: say [[]] 17:50
p6eval rakudo ec69e2: OUTPUT«␤»
17:50 nbrown left
TimToady rakudo: say [[]].perl 17:50
17:50 nbrown_ is now known as nbrown
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤[[]]␤» 17:50
TimToady there you go
pmichaud rakudo: say [].perl;
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤[]␤»
TimToady in both cases there's only one empty list 17:51
rakudo: say ().perl
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤[]␤»
jnthn fail.
TimToady rakudo: say Nil.perl
pmichaud I can't even find where .perl is defined now. It's been moved :-|
p6eval rakudo ec69e2: OUTPUT«Nil␤»
jnthn method perl() {
return '[' ~ self.map({ .perl }).join(", ") ~ ']';
}
That's the one in List... 17:52
pmichaud okay, that's it.
so, .map is complaining about an empty list.
jnthn o rly?
rakudo: [].map(* * 2)
pmichaud say ().map({ $_ * 2 });
p6eval rakudo ec69e2: ( no output )
pmichaud rakudo: say ().map({ $_ * 2 });
TimToady rakudo: map {42}, ()
p6eval rakudo ec69e2: OUTPUT«␤» 17:53
rakudo ec69e2: ( no output )
TimToady rakudo: say map {42}, ()
p6eval rakudo ec69e2: OUTPUT«␤»
jnthn rakudo: say ().join
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤␤»
pmichaud rakudo: say [].map({ .perl });
17:53 c9s left
p6eval rakudo ec69e2: OUTPUT«␤» 17:53
jnthn rakudo: say [].join
p6eval rakudo ec69e2: OUTPUT«Cannot reduce() empty list␤␤»
jnthn I think it's join.
17:53 lumi left
skids rakudo: my $a; my %x = %(<a b c d> X [234]); %x<a>[2]=2;%x.perl.say 17:53
pmichaud our Str multi method join(Str $separator = '') {
@.list.reduce({ $^a ~ $separator ~ $^b })
}
TimToady say [~]()
p6eval rakudo ec69e2: OUTPUT«{"a" => [234, undef, 2], "b" => [234, undef, 2], "c" => [234, undef, 2], "d" => [234, undef, 2]}␤»
TimToady rakudo say [~]()
skids my bad, not inconsistent, forgot the second subscript 17:54
TimToady rakudo: say [~]()
p6eval rakudo ec69e2: OUTPUT«␤»
TimToady rakudo: say ().reduce(&infix:<~>)
p6eval rakudo ec69e2: OUTPUT«Statement not terminated properly at line 1, near "(&infix:<~"␤␤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:86)␤»
pmichaud growl. There's another one of those constraints on the builtin parameter.... :-(
TimToady rakudo: say ().reduce(&[~]) 17:55
jnthn Aye, people are being a tad overzelous with the constraints. :-(
p6eval rakudo ec69e2: OUTPUT«Statement not terminated properly at line 1, near "(&[~])"␤␤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:86)␤»
jnthn TimToady: We don't parse the operator syntax yet. :-(
pmichaud anyway, the definition for .join looks wrong to me.
jnthn Aye, relying on reduce function is probably a bad idea.
pmichaud and I think I might just prefer the PIR version anyway.
jnthn Well, given Parrot has a built-in join... 17:56
pmichaud fixing.
skids Well, some of the constraint problems are coming from the protos taken from S32 and other docs.
TimToady why use reduce when you can use recursive lambdas :)
jnthn May as well make use of the thigns Parrot does give us. ;-)
pmichaud I should go through and eliminate the constrants from S32
fixing join.
jnthn TimToady: Because we didn't implement &?ROUTINE yet. ;-)
erm
&?BLOCK
TimToady well, there's always *named* lambdas... 17:57
or even my $x = { ... $x()... } 17:58
jnthn True.
skids so now that everyone who builds frequently is awake, anyone ever notice a spurios segfault during rakudo build steps (parrot invocations?)
jnthn I always think "anonymous" when I see "lambda"
skids Becuase if so, I know how to agrravate the problem.
TimToady you're putting me to sleep ...
pmichaud skids: I haven't noticed one, no.
17:59 rblasch joined
jnthn Computer science degree has gotta be good for something. ;-) 17:59
TimToady yeah, I should get me one of those some day...
jnthn skids: I didn't notice that...only very occasional things when a realclean was needed or something.
TimToady meanwhile, it's off to Fry's & 18:00
skids Well, setting parrot/src/hash.c INITIAL_BUCKETS to 4 exposes a race quite nicely, FWIW. 18:01
jnthn As in race condition? 18:02
skids If I am masochistic enough this weekend I may even manage to track down why.
Yeah, segfaults on some runs, not others.
jnthn Uff.
skids Probably just a missing write barrier, there's a couple in there.
jnthn Did you think setting it to 4 would get us a small performance win? 18:03
skids Setting to 8 gives a 1% speed gain and seems pretty stable.
4 was about 2%. Stats are in the backlog
Matt-W has not had a build segfault for ages
skids But it probably depends highly on your cache.
might be more for 64bit 18:04
jnthn We use hashes extensively for named lookup, so profiling/optimizing Parrots hashes (without introducing segfaults ;-)) is perhaps a good place to look for performance improvements. 18:05
skids Yeah I've been looking at that a bit.
phone
skids hates cell phone spam, someone needs to arrest those people. 18:06
Parrot code seems to have been optimized by someone who overvalues CPU cycles. 18:07
jnthn Indeed.
skids And doesn't grok the impact of present/future 8 byte pointers.
Stats on hash accesses by the way, from earlier: 18:08
'1.say' hash number of elements % operations (0 to 8, then 63+)
reads: 0.28 64.50 13.50 3.51 0.46 0.20 0.19 0.37, 12.72 18:09
dalek kudo: cacc976 | pmichaud++ | src/setting/Any-list.pm:
Rewrite Any.join() to avoid the "Cannot reduce() empty list" error.
skids writes: 14.23 9.03 6.18 4.40 3.58 2.96 2.39 2.18, 29.80
So having a very efficient 1 and 2 element hash would be key.
jnthn Certainly biased towards the lower end.
Is that compiling 1.say or just running it? 18:10
skids Well, except for the const_string hash.
running it.
pmichaud we also end up with a ton of 0-element hashes, because of :named :slurpy 18:11
jnthn Aye. 18:12
skids But we seem to only write them out and then forget about them.
So I was thinking maybe making hash keep the buckets in its own PMC as a union with the bs/bi and other elements, then autoenlarge to a alloced store after. 18:14
literal std: &foo
skids Also no real reason to use real pointers in the bs, offsets would do and not need relocation. We can afford the math.
p6eval std 26622: OUTPUT«ok 00:03 47m␤»
jnthn We'd get better cache locality with that? 18:15
skids With the mini hashes yes, the pointer thing no, but it would cheapen realloc CPU-wise 18:16
And if the offsets could be made a smaller datatype for small chunks, yes
jnthn Sounds worth exploring/benchmarking.
skids But once you get that far might as well consider an entirely different hash structure. 18:17
It's the sort of think I like to do, and will if I can clear my head of $REAL_WORLD and $DAYJOB often enough.
18:18 lumi joined
skids But I'm still kinda fuzzy on GC stuff so that leaves me with some unknowns. 18:18
Oh, other stats, but may not be from 1.say: inserts: 18:20
28.01 13.69 4.43 3.36 2.76 2.62 1.84 1.67
6.13% for 63 elements plus
which is probably all const_string 18:21
dalek kudo: 06f0ae8 | pmichaud++ | :
Merge branch 'master' of [email@hidden.address]
18:37
kudo: d4a0b3b | pmichaud++ | docs/spectest-progress.csv:
spectest-progress.csv update: 378 files, 10991 passing, 0 failing
18:38 kingdong joined 18:53 kingdong left 18:55 rindolf joined 18:57 payload left 19:32 justatheory joined 19:33 finanalyst left, rindolf left
PhatEddy @tell jnthn if I recode the pir get in classes/IO.pir pretty much like pop in classes/Array.pir and export with to_p6_multi the "get" setting problem goes away/works. 19:35
lambdabot Consider it noted.
19:41 payload joined 19:46 M_o_C joined 19:48 renormalist joined
s1n rakudo: sub test($a, %b) { say "oh hai"; }; test('foo', <bar baz>); 19:56
p6eval rakudo d4a0b3: OUTPUT«Parameter type check failed; expected something matching but got something of type List() for %b in call to test␤current instr.: 'die' pc 16538 (src/builtins/control.pir:225)␤»
19:56 payload left, payload1 joined
s1n does <> mean list? i thought i could assign key/value pairs that way 19:57
19:57 dukeleto left
s1n doh, i think S02 says <a b> is ('a', 'b') and not {'a', 'b'} 19:58
19:59 dukeleto joined, dukeleto left 20:01 payload joined, payload1 left 20:03 olaf_ joined 20:04 ZuLuuuuuu left 20:19 meteorjay joined
jnthn s1n: Maybe you wanted :a<b> 20:25
lambdabot jnthn: You have 1 new message. '/msg lambdabot @messages' to read it.
jnthn @tell PhatEddy ah, sounds like a conflict between Parrot multis and Perl 6 multis then... 20:26
lambdabot Consider it noted.
20:27 amoc^ left 20:28 amoc joined
PhatEddy jnthn: should I still do a rakudobug? 20:29
lambdabot PhatEddy: You have 1 new message. '/msg lambdabot @messages' to read it.
20:33 ingy left 20:34 ingy joined 20:37 kane_ left, kane_ joined 20:38 s1n left
meppl good night 20:43
20:44 meppl left 20:48 Whiteknight left, Whiteknight joined 21:09 dukeleto joined 21:12 ZuLuuuuuu joined 21:19 PacoLinux left 21:20 PacoLinux joined 21:21 DemoPhreak joined 21:28 payload left, payload1 joined 21:30 olaf_ left 21:32 dduncan joined 21:34 jhuni joined, DemoFreak left, DemoPhreak is now known as DemoFreak 21:52 s1n joined 21:56 payload1 left, payload joined 22:02 rehall joined 22:04 rehall left 22:07 ingy left 22:09 M_o_C left 22:15 iblechbot left, Kisu joined 22:16 nbrown_ joined 22:17 ingy joined 22:18 nbrown_ left, nbrown_ joined, nbrown left, nbrown_ is now known as nbrown 22:20 rblasch left 22:28 wormphlegm joined 22:35 justatheory left
spx2 can I do a negative offset seek on SEEK_END ? 22:41
23:03 renormalist left 23:20 wormphlegm left 23:24 ZuLuuuuuu left, justatheory joined 23:25 PhatEddy left 23:31 justatheory left 23:32 MariachiElf joined
MariachiElf rakudo: say 'hi' 23:33
p6eval rakudo d4a0b3: OUTPUT«hi␤»
23:39 Limbic_Region joined
eternaleye I just had an interesting idea for chaining comparisons on junctions. 23:40
Currently, my $a = 1|4|7; my $b = 2|5|8; my $c = 3|6|9; if( a < b < c ) { say ($a, $b, $c).join(' : ') } doesn't dwim. A simple way to make it dwim might be to make the chained comparison autothread like a block, such that $a < $b < c would become 1 < $b < $c, 2 < $b < $c, and 3 < $b < $c. The it would autothread on $b, $c, etc. 23:44
*Then 23:45
Hm, that if should havce sigils, and shouldn't have parens
23:46 dukeleto left
eternaleye Then we could make it so that branches taken based on the chained comparison use the autothreaded value, instead of the full junction 23:48
23:53 amoc left 23:56 dukeleto joined, cognominal left