pugscode.org/ planetsix.perl.org/ | nopaste: sial.org/pbot/perl6 | evalbot: perl6: say 3; (or rakudo:, pugs:, elf:, etc) | irclog: irc.pugscode.org/ | ~315 days 'til Xmas
Set by mncharity on 8 February 2009.
blackxxxer is anyone active in here? 00:56
alester evening all 02:01
Tomorrow starts The Great Rakudo.org Overhaul
mikehh and pray tell what does that do? 02:03
alester Gives us a new rakudo.org 02:06
mikehh Ah? 02:07
frew perl6: sub foo($bar) { $bar } 04:35
p6eval pugs: No output (you need to produce output to STDOUT)
..rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
..elf 25313: RESULT«undef␤»
frew perl6: sub foo($bar) { say $bar }; foo('bar') 04:36
p6eval pugs: No output (you need to produce output to STDOUT)
..rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
..elf 25313: OUTPUT«bar␤»
frew perl6: sub foo (Scalar $bar) { say $bar }; foo('bar')
p6eval pugs: No output (you need to produce output to STDOUT)
..rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
..elf 25313: OUTPUT«bar␤»
frew anyone here know of a good resource to learn about how to do stuff with method attributes in perl5? 04:38
I am trying to read the source of CAP::AutoRunMode, but it's got a lot of deep magic...
c9s_mv perl6: sub foo ( Scalar $bar ) { say $bar }; foo('bar'); 07:24
p6eval pugs: No output (you need to produce output to STDOUT)
..rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
..elf 25313: OUTPUT«bar␤»
riffraff hi 08:43
moritz_ hi riffraff 08:44
bacek hi there 08:55
moritz_ rakudo: 1629 / 60 08:57
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
moritz_ elf: 1629 / 60
p6eval elf 25313: RESULT«27.15␤»
bacek ouch. 08:58
jnthn morning all! 10:25
Rakudo day it is.
moritz_ good morning jnthn
that's good news 10:26
jnthn Aye, I didn't have one last week since I had someone visiting, plus was partly in Bulgaria. So, two this week. :-)
Matt-W hurrah for Rakudo Day 10:29
I've just got Day of Three Meetings
But I should ask here as there are clever people who might know - Can anybody recommend any theoretical work on multithreaded programming? 10:30
moritz_ multithreaded, or concurrent in general? 10:31
Matt-W well general might be useful, but I'm particularly focussed on the kind of thing you can do with POSIX or Windows threads (this is for work) 10:32
moritz_ sorry, can't help you with that
Matt-W no problem, I'm sure I can find something 10:33
jnthn Most of what I know - but it's not really detailed stuff in terms of implementation, but rather best practices - I put in a talk I gave a while ago...
Matt-W jnthn: that could still be useful
Anything that can help me avoid making more thread soup 10:34
jnthn The best thing about the talk is that the first slide contains pictures of yaks.
Ah, here: www.jnthn.net/papers/2007-fpw-paral...slides.pdf
Matt-W If pictures of yaks are your highlight, does that really recommend it? 10:36
jnthn It's a really good photo. 10:38
;-)
Matt-W heh it is nice 10:39
jnthn Tibet FTW.
jeremiah Yaks FTW 10:40
"Parallel New World" <- Good title.
Matt-W yaks ftw indeed 10:44
thread soup ftl
you try to eat it, but it keeps blocking on a guy in a restaurant in New Zealand's use of the pepper grinder 10:45
jeremiah Mmmm soup. 10:48
jnthn Mmmm. I haz Ukrainian train tickets ordered. :-) 10:49
Gangl Hi, how can i do in Perl6 like that in Perl 5: "perl -ne 'print if (/^1[0-9]+ +K/)' list.txt"? 10:53
jnthn For now I don't think - at least in Rakudo anyway - we have a -n or equivalent. 10:55
moritz_ Gangl: do you mean today in rakudo, or in general in Perl 6 once it's finished?
Gangl in Rakudo 10:56
moritz_ I fear you have to open the file manually 10:57
some something along these lines:
for @*ARGV -> $f { my $h = open $f; for =$h { .say if m/1\d+ " "+K/ }} 10:58
Gangl thanks 11:00
moritz_ note that spaces aren't significant in Perl 6 regexes, so /\d+ +/ won't work 11:01
jnthn for use lines function?
moritz_ so you either have to quote the space, or use \s or something 11:02
jnthn for @*ARGV -> $f { for lines($f) { ... } }
moritz_ rakudo: say lines('README')
p6eval rakudo b2e7ac: OUTPUT«./parrot: error while loading shared libraries: libparrot.so.0.9.0: cannot open shared object file: No such file or directory␤»
moritz_ sighs
such demonstrations are much more impressive when they work :/ 11:03
moritz_ rakudo: say lines('README') 11:07
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
moritz_ anybody want to take over maintainance of p6eval? :/ 11:11
jnthn In the smartmatch table we have: 11:57
Any .foo method truth ?X i.e. ?.foo
If we do $x ~~ .foo, is that basically like ?$x.foo or ?$_.foo ? 11:58
jnthn The top of the table reads 11:59
$_ X Type of Match Implied Match if (given $_)
Which leads me to think that we take $_ to be the LHS of the smartmatch
Rather than whatever $_ is.
And ignoring the LHS, which would seem odd.
Thoughts?
Matt-W I've never quite understood that smartmatch table
and surely we can't be ignoring the LHS, if it implies that then I really really hope it's wrong 12:00
jnthn (Masak seemed to think we would "irrelavent" ~~ .foo would not call .foo on "irrelavent" but whatever was in $_.)
Matt-W hmm
jnthn But I'm thinking...huh...why'd we do that...
Matt-W I would immediately suspect that it calls $_.foo and smartmatches the result of that against the LHS of ~~
jnthn In a given...when then $_ *is* the LHS.
Matt-W but in a given...when, you'd want when .foo { } to be $_.foo == true and do { } 12:01
jnthn If it did that it wouldn't be a special syntactic form.
Matt-W hmmmm 12:02
jnthn I think the spec must mean $x ~~ .meth is the same as ?$x.meth
Matt-W that would be consistent
jnthn It seems strange spec'ing a construct that ignores the LHS!
Matt-W yes
what I suggested would be horrible, in hindsight 12:03
jnthn Of course, in a when .meth { } then you *would* get a call on $_ thanks to the when
Matt-W well, maybe
yes but that's only because when is like if ($_ ~~ <blah>) { }
so no special tricks
jnthn Yes.
Matt-W I do sometimes get confused as to what saying ".meth" will do in any given place 12:04
jnthn That implies maybe that when has to be aware of the special syntactic forms, though? 12:05
Matt-W hmm 12:06
jnthn rakudo: given 42 { when .sign { say "yes" } }
p6eval rakudo b2e7ac: OUTPUT«./parrot: error while loading shared libraries: libparrot.so.0.9.0: cannot open shared object file: No such file or directory␤»
Matt-W damn
that's really inconvenient
jnthn Like, I suspect 12:07
given "hai" { when .chars { say "yes" } }
That should say "yes"
Because $_.chars is 3, which is true in boolean context
Matt-W because "hai".chars is true
jnthn But in Rakudo at the moment, it doesn't.
Matt-W that is exactly what I'd expect to happen
what does it do?
jnthn Invokes .chars and then smart-matches 3 against the string "hai" ("hai" as the LHS)! 12:08
Which is what I mean by, when having to know about these things too.
Matt-W ouch
see I'm still sort of thinking that $x ~~ .chars should do $_.chars and smartmatch the result against $x 12:09
jnthn Well, that's what it's doing there.
Matt-W but as you say, when you apply that to given...when it looks wrong
I hate these things you can argue either way
jnthn Right. My first reading of the smart-match table was that it should do $x.chars rather than $_.chars.ACCEPTS($x)
Well, ?$x.chars 12:10
Where $x here is the LHS.
Matt-W but if it behaves like that, you can't use given...when to do quick checks against predicate methods on an object 12:11
jnthn You can, because the LHS of ~~ is $_ 12:12
given "hai" { when .chars { say "yes" } }
Here, when .chars will do ?$_.chars and if it's true run the block.
I think this is what's intended - so you *can* do predicate checks. 12:13
Matt-W mmm
it makes sense there
what if you say $_ = "hai"; say "yes" if $_ ~~ .chars; 12:14
jnthn It would call $_.chars 12:15
Aha
Matt-W so $_.chars.ACCEPTS($_)
jnthn You must be able to do predicate tests with when like that because S03 explicitly gives an example.
given $boolean {
when .true {...}
when .not {...}
}
There we clearly want the block to run if ?$_.ture rather than if $_ ~~ $_.true 12:16
Matt-W so do we have a difference in behaviour between when and ~~
jnthn No 12:16
I'm just saying when needs to know that the .foo form is special too.
Ah, here's the trouble-causer who filed the initial ticket. ;-)
Matt-W I'm confused 12:17
masak jnthn: good day. :) 12:18
lambdabot masak: You have 1 new message. '/msg lambdabot @messages' to read it.
masak @massage
lambdabot moritz_ said 13h 42m 23s ago: I've changed the evalbot setup a bit; parrot and rakudo are built in ~/parrot and is rsync'ed to ~/built-parrot if successful
jnthn masak: We're discussing rt.perl.org/rt3/Public/Bug/Display.html?id=60258
masak oh, nice.
jnthn masak: Yes, but I think your expectations in the ticket are wrong.
(But Rakudo at present is *also* wrong.) 12:19
masak :)
jnthn class A { method alwaystrue { return 1 } }; given A.new {
say "irrelevant" ~~ .alwaystrue }
masak my expectations were based on S03, it seems.
are you saying I read S03 wrong? or that S03 is wrong?
jnthn I think we understand S03 differently. ;-)
masak ah.
the intricacies of interpretation. :)
Matt-W I've lost track of what jnthn is advocating to be correct 12:20
jnthn So the result Rakudo gives is certainly wrong.
At the moment.
masak backlogs
jnthn Because it calls .alwaystrue on $_ and then smart-matches what that returns against "irrelevant"
However, I think that what it should be doing is ?("irrelevant".alwaystrue) 12:21
masak (I agree, yaks FTW)
jnthn Rather than ignoring the LHS (why would an operator do that?) and calling $_.alwaystrue 12:22
Notice that if we take that definition, then in a given/when block, the LHS *is* $_ so this definition still gives what you want.
Matt-W the trouble is that it looks like you mean "irrelevant" ~~ $_.alwaystrue
jnthn Matt-W: Right, but S03 seems to say otherwise. 12:23
Plus if that's true, then the following cannot work:
given $boolean {
when .true {...}
when .not {...}
}
Matt-W so it means you have to remember that the RHS of ~~ has a sort-of-topic of the LHS
I agree that it needs to work in when, I just hate what it ends up looking like in the ~~ form
jnthn That's exactly what I'm thinking it means. 12:24
Matt-W and I'm going to hope that nobody ever, ever does that
ever
because it will be misread
jnthn Aye, I see what you're getting at.
But, since they'd probably write $lhs.foo rather than $lhs ~~ .foo anyway...
Matt-W but avoiding that would destroy the equivalence between when and ~~ 12:25
and yes, they probably will
especially if they don't want me to come and throw rotten tomatoes at them
I guess we have to allow the possibility for people to write horrible things to get the power to write lovely things :)
You've convinced me, and I'm now going to go and indulge my stomach's demands for something to digest 12:26
lunch &
masak with great power comes great rotten tomatoes. 12:28
jnthn masak: Any concurrence with me on S03? ;-) 12:31
(Disagreement is fine too, in which case we can ask The List.)
masak I'm not giving the issue 100% attention right now... 12:35
I'm in the middle of some translation work.
jnthn OK, no worries. :-) 12:36
masak I'll get back to you.
masak in the meantime, maybe reply to the ticket and cc p6c? 12:36
jnthn Will do
In the meantime, I'll apply the patch that I think is right. But it does factor stuff into one place so it's going to be easy to change if the answer comes back different. And it's closer to right than what we do now. 12:37
masak 好的. er, I mean, "good". 12:38
jnthn Is "bra" really Swedish for "good"?
masak aye, it really is.
for being so small, it's quite an inflexible word.
jnthn Same in English. ;-) 12:39
(Of course, with it's English meaning...)
masak the Swedish version is worse.
there's no definite form, for one.
jnthn Huffmanization doesn't always quite work.
masak which makes people say things like 'den bra-iga boken'... 12:40
...which I suppose works, but it's not formal enough by far to appear in print.
moritz_ the problem in human language is that you don't only need huffmanization, but also redundancy for error corrections 12:42
masak moritz_: I'm thinking a lot about that these days. 12:43
Mandarin has its redundancy in different places that the Indo-European langs.
some would say the Mandarin system is objectively better. I'm not sure I agree, but I can certainly, um, sympathize with that viewpoint. 12:44
dalek kudo: 19c0210 | jnthn++ | src/parser/grammar.pg:
Add better error message for else blocks on unless - a copy/paste from STD.pm.
12:49
kudo: 74d73d9 | jnthn++ | src/parser/actions.pm:
Refactor handling of smart-match so we can implement the special syntactic forms, and add the .foo special form.
12:50
jnthn moritz_: Is it still OK to assign you tickets that need tests? 12:50
If you're snowed under, I can write them myself. (Don't need them right now...) 12:51
moritz_ jnthn: it's OK, but it'll take some time these days 12:52
jnthn moritz_: OK, done that, thanks. 12:55
Also cc'd p6l into my response to the ticket.
If it stays quiet or is confirmed correct, I'll do .[...] and .{...} etc in the near future too, since it'll be the same answer for those. 12:56
Matt-W wishes he knew enough about Rakudo's innards to understand what jnthn++'s patch is doing 13:30
meeting &
pugs_svn r25314 | jnthn++ | Add tests for is copy in use with arrays and hashes. 13:38
dalek kudo: 6059ad9 | jnthn++ | src/classes/Signature.pir:
Fix is copy trait for arrays and hashes. Resolves RT#60966.
moritz_ jnthn: I hope you know that 'is copy' is also broken for scalars? 13:39
(or at least was last I tried to ran man-or-boy.t)
jnthn moritz_: No, though I ain't entirely surprised. 13:40
Is there a smaller test case?
moritz_: man or boy tests all pass here, it appears? 13:41
moritz_ jnthn: don't know...
jnthn moritz_: Yup, passes here.
Shall I add it back to spectest.data?
moritz_ jnthn: ah, that might have been your ++ and -- fix then 13:42
jnthn: yes, please
it was using ++ on a "is copy" parameter
don't know which of them was broken
jnthn Ah.
Not sure.
Anyway, it passes now.
moritz_ each time I forget to 'make clean' in Rakudo, I get error:imcc:syntax error, unexpected VAR, expecting '(' ('sub') 13:43
dalek kudo: 3e1a5e8 | jnthn++ | t/spectest.data:
integration/man-or-boy.t now passes again due to @recent_fix.pick, add it back to spectest.data.
13:45
moritz_ I've opened a ticket about that man-or-boy thingy, will try to find it 13:50
jnthn Oh, to find which issue it was? 13:51
OK
moritz_ to close it
jnthn Oh, I see. 13:53
moritz_ rt.perl.org/rt3/Ticket/Display.html?id=61982 don't know if it's 100% closable, will investigate later today 13:54
jnthn Looking at 13:55
$locator = method { self.<here> }
$obj.$locator # $obj<here>
Does this imply that the default topic in a method is $_ always?
erm
is self, I meant?
S12 isn't too clear, or I can't find the bit that is clear on that...
moritz_ I think it used to be $_ === self, but that was abandoned 13:56
jnthn: but I don't see where $_ is involved in your example above
jnthn oh 13:57
Yes
$locator = { .<here> }
$obj.$locator # $obj<here>
Oh, hmm
The spec says these two.
moritz_ there { ... } just is a closure with one parameter
jnthn masak tried method { .<here> }
moritz_ that's assigned to $_
just like for 1..2 { .say }
jnthn Right. 13:58
But method { .<here> } isn't spec'd.
moritz_ ask TimToady, or reject it :-)
rakudo: my $fh = open("README"); my $res = try { $fh.perl} ; say "alive" 13:59
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
jnthn @tell TimToady Do methods get self in $_ by default? Spec doesn't say so, so I'm guessing not - if that's the case, I get to reject a ticket. ;-) 14:00
lambdabot Consider it noted.
jnthn rakudo: my $x = {}; say $x.WHAT 14:21
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
jnthn std: class A { method x { say "OH HAI" } }; my $c = class is A {}; $c.x 14:35
p6eval std 25314: OUTPUT«############# PARSE FAILED #############␤Malformed "class" declaration␤Unable to parse class definition␤Malformed method definition at /tmp/iiLuS9F4Tb line 1:␤------> class A { method x { say "OH HAI" } }; my $c = class is A {}; $c.x␤ expecting blockoid␤FAILED 14:36
..00...
jnthn @tell TimToady Should anonymous classes be able to inherit from stuff? If so, can they do class is Foo { ... } - at the moment STD.pm parsefails that (takes is to be the name of the class...)
lambdabot Consider it noted.
dalek kudo: 9a5c690 | jnthn++ | src/parser/actions.pm:
Fix NULL PMC accesses in various cases where we have empty blocks. Resolves RT#61034.
14:51
TimToady jnthn: methods do not get $_ := self by default, but you can always declare ($_:) in the sig 15:53
lambdabot TimToady: You have 2 new messages. '/msg lambdabot @messages' to read them.
TimToady .foo is a special form in any smart match, like anything known to return boolean 15:53
and ~~ actually topicalizes the left side, so the right side sees the left side as $_ 15:54
jnthn TimToady: OK, I'll reject the ticket and remove the test that assume $_ := self 15:55
TimToady: And thanks for the clarification on $x ~~ .foo being basicaly ?$x.foo (provided I understood correctly!) 15:56
TimToady so "foo" ~~ .bar means ?{ .bar }("foo"), basically
jnthn Oh? 15:57
jnthn is confused
TimToady well, same as you wrote, but it really does bind $_
or maybe { ?.bar } is more accurate
jnthn Ah, I see 15:58
Matt-W I don't :(
jnthn I mis-parsed what was going on there.
TimToady "foo" ~~ $_ eq "foo" is true
or more explicitly "foo" ~~ ?($_ eq "foo") is true
so it really has to set $_ 15:59
still thinking about class is, but that'll take coffee...
Matt-W I get that $_ on the rhs is the lhs
I don't quite get what happens with .bar on the rhs 16:00
jnthn TimToady: OK. One easier one maybe...
say "foofoofoo".subst("foo", "bar", :x(4))
It cannot do 4 replacements, but should the result be an exception, the original string, or a fail?
moritz_ or is the :x(4) just a limit?
so it tries as many as possible, but at most 4?
jnthn oh, found it in the spec 16:01
moritz_ I guess there are a lot of tests for that which I wrote while mis-understanding the spec :/ 16:02
jnthn moritz_: I'm still trying to grok the spec. ;-)
except that the string is unchanged unless all four matches are found. 16:03
Matt-W home & 16:04
ruoso I wonder what is the difficulty rakudo is having with the binding operator... 16:07
as pmichaud stated in a mail to p6l
TimToady see discussion above 16:14
.foo is considered 1-ary on right side of ~~, so is evaluated for truth 16:15
ruoso TimToady, it looks like you were talking to me... but I can't see the relation between the above discussion and binding 16:19
jnthn ruoso: I think it was to pmichaud, but discussion is over on parrot :-) 16:20
ruoso jnthn, Ok, I'll assume that discussion didn't raise anything that could affect SMOP 16:25
jnthn ruoso: It's about $x ~~.foo 16:26
Not binding.
:-)
ruoso ah
TimToady we, except that ~~ implicitly binds $_ 16:35
pmichaud the problem with binding is that Parrot doesn't make it easy to pass containers around. 16:44
especially containers inside of aggregates
jnthn pmichaud: I had to implement for doing that kinda thing in .Net a kinda array-element-referencey kinda PMC. 16:45
pmichaud jnthn: yes, I'm thinking that we'll be doing it with proxies 16:46
the difficult thing is recognizing when we want a proxy and when we don't.
jnthn Aye. 16:47
It was easy in .Net. :-|
pmichaud: Is the Rakudo spectests graph updates broken for now, since we moved to git? 16:48
pmichaud jnthn: yes -- I have to update my scripts a bit. 16:49
jnthn OK, no hurry.
(On my part.)
pmichaud git doesn't appear to have a convenient "get a copy of the repo as of date x/y/z" feature.
jnthn Ouch.
TimToady sounds like Parrot wants Captures, or something like that
pmichaud even Captures (at least as I've been thinking of them) doesn't seem to quite solve the problem. 16:50
PerlJam pm: upgrading to git 1.6.1 didn't help? 16:55
pugs_svn r25315 | jnthn++ | [t/spec] Unfudge a couple of tests for Rakudo. 16:58
r25316 | jnthn++ | [t/spec] Remove test that doesn't conform to The Spec.
dalek kudo: 01811bf | jnthn++ | src/builtins/any-str.pir:
Fix :x($n) in subst where $n is greater than the number of matches we can do. Resolves RT#61204.
16:59
jnthn pmichaud: When do you think you'll have time to work on prelude stuff? 17:04
pmichaud s/prelude/setting/ 17:09
very soon.
probably this next week.
PerlJam: no, upgrading didn't help. 17:10
jnthn pmichaud: OK, great! 17:12
pugs_svn r25317 | jnthn++ | [t/spec] Tests for smart-matching where we have a couple of *s following each other. 17:36
dalek kudo: daa2eea | jnthn++ | src/classes/List.pir:
Fix Array smart-matching when two Whatevers were written one after the other. Resolves RT#61452.
jnthn TimToady: In the smartmartching table we have: 17:39
Array Array arrays are comparable $_ 􏿽xAB===􏿽xBB X (dwims * wildcards!)
and
Any Array lists are comparable @$_ 􏿽xAB===􏿽xBB X
Should the second one also dwim?
TimToady sure, it's exactly the same, just with a coercion to Array, so calls the same .ACCEPTS 17:44
it's always rhs.ACCEPTS(lhs) 17:45
jnthn OK, that simplifies things. :-) 17:46
TimToady (modulo the special synactic forms)
((which this isn't one o'))
pugs_svn r25318 | jnthn++ | [t/spec] Couple more smart-matching on array tests. 17:54
dalek kudo: f7b4b86 | jnthn++ | src/classes/List.pir:
Correct smartmatching Array on RHS when LHS is non-array and we co-erce it; turns out it should DWIM too. Resolves RT#61454.
pmurias ruoso: hi
lambdabot pmurias: You have 1 new message. '/msg lambdabot @messages' to read it.
pmurias ruoso: where should the lowlevel multi variants (&infix:<+>:(int,int)) and the like be defined? 17:57
dalek kudo: 0f87695 | jnthn++ | src/parser/actions.pm:
Improvements to subtypes: anonymous ones can now handle something to smart-match against rather than a block (resolves RT#61654) and enforce read-onlyness on the thing we're testing unless it's decalred otherwise (resolves RT#61776).
19:02
ruoso pmichaud, in SMOP we're using the context of 'bvalue' 19:02
@tell pmurias &infix:<+>:(int,int) could be defined in SMOP prelude directly 19:03
lambdabot Consider it noted.
moritz_ jnthn: in git land it's common to use a short summary on the first line of the commit message, then one blank line, and then the rest of the message
ruoso pmichaud, bvalue is a variable in a context where it can be used as the container or you can use it as item, which resolved the actual value
moritz_ jnthn: some tools show only the first line, so it's good to stick to that convention 19:04
jnthn moritz_: Heh, I write all my -m stuff at the command line rather than having an editor configured. ;-)
ruoso pmichaud, we use that to make hash subject to binding... so postcircumfix:<{ }> really returns only a bvalue, which will only do the actual lookup when that is used as an item
moritz_ jnthn: not a vim fanboy? ;-) 19:05
jnthn Oddly, no. :-P
pugs_svn r25319 | jnthn++ | [t/spec] Some more tests for subtypes, covering a couple of recently resolved RT tickets.
ruoso pmichaud, but the bvalue implements BIND, which replaces the container in the target object 19:07
jnthn OK, finally the Rakudo ticket queue is down to "only" 250 tickets. 19:08
moritz_ should $a ~~ .b($c) call $a.b($c) ? 19:09
ruoso moritz_, actually, AFAICS, it should ($_ := $a).b($c)
moritz_ ruoso: for my test writing that's close enough ;-) 19:10
ruoso but... does that affect $_ for the end of the scope? or just for the term in the rvalue of ~~ 19:11
jnthn ruoso: It shouldn't affect it to the end of the scope.
A better re-write is { .b($c) }($a)
ruoso yeah...
sounds sane 19:12
but, can that be understood sintatically?
jnthn The $x ~~ .foo can be, which is what we need to re-write, I believe. 19:14
(And I don't re-write and re-parse, I just make different AST.)
ruoso good.. so no run-time magic... it's basically a macro...
jnthn I need to tweak it to really look at syntax rather than AST though. 19:15
ruoso jnthn, but indeed, I'm not sure it really needs to be a real macro... I think transforming the AST should be ok
jnthn Aye.
Well, I guess, whatever the compiler implementor finds easiest. ;-) 19:16
moritz_ jnthn: nopaste.snit.ch/15611 4 of these 6 tests fail... 19:17
jnthn: did I do something very wrong?
jnthn is ($t ~~ .b: 3), 15, '$obj ~~ .method: arg calls the method'; 19:18
That one I'm not sure would work yet...
ooh
moritz_ but the first two also fail 19:19
jnthn No, those tests are wrong.
Any .foo method truth ?X i.e. ?.foo
So it puts it in boolean context
moritz_ ok
jnthn So you can't test you get a certain return value, just true or false.
pugs_svn r25320 | moritz++ | [t/spec] smartmatch tests for $obj ~~ .method (RT #60258) 19:22
jnthn moritz++ :-) 19:25
jnthn gives moritz another one 19:26
pugs_svn r25321 | moritz++ | [t/spec] tests for RT #61034 19:30
jnthn std: sub List::a {}
p6eval std 25320: OUTPUT«ok 00:02 33m␤»
jnthn omg I didn't eat yet 19:31
pugs_svn r25322 | moritz++ | test for RT #62196, smartmatch in a class 19:34
moritz_ this commit added the 100th test to smartmatch.t ;-)
jnthn Nice! 19:37
moritz_ jnthn: do you have slides on multi dispatch somewhere? I'd like to get some "inspiration" for an article that I write
jnthn Sure 19:38
www.jnthn.net/articles.shtml
See talk slides Theres More Than One Way To Dispatch It
moritz_ thanks
jnthn Wow. We're down to 246 tickets.
moritz_ jnthn++, tickets-- ;-) 19:39
I like your paper/scissor/stone example 19:41
are there other nice, simple problems that can be solved by multi dispatch? 19:45
rakudo: multi f($x where 0) { 1 }; multi f($x) { X * f($x-1) }; say f(4)
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
moritz_ rakudo: multi f($x where 0) { 1 }; multi f($x) { X * f($x-1) }; say f(4) 19:48
p6eval rakudo b2e7ac: OUTPUT«Statement not terminated properly at line 1, near "f($x-1) };"␤␤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:83)␤»
moritz_ rakudo: multi f($x where 0) { 1 }; multi f($x) { $x * f($x-1) }; say f(4)
p6eval rakudo b2e7ac: OUTPUT«maximum recursion depth exceeded␤current instr.: 'parrot;P6object;HOW' pc 54 (runtime/parrot/library/P6object.pir:96)␤»
moritz_ rakudo: multi f($x where 0) { 1 }; multi f($x) { say $x; $x * f($x-1) }; say f(4)
it works locally here 19:50
rodi +/quit 19:51
oops, sorry :-\ 19:52
jnthn fail 19:52
moritz_ +/quit is "quit from as many servers as possible, but at least one" ;-)
p6eval rakudo b2e7ac:
..OUTPUT«4␤3␤2␤1␤0␤-1␤-2␤-3␤-4␤-5␤-6␤-7␤-8␤-9␤-10␤-11␤-12␤-13␤-14␤-15␤-16␤-17␤-18␤-19␤-20␤-21␤-22␤-23␤-24␤-25␤-26␤-27␤-28␤-29␤-30␤-31␤-32␤-33␤-34␤-35␤-36␤-37␤-38␤-39␤-40␤-41␤-42␤-43␤-44␤-45␤-46␤-47␤-48␤-49␤-50␤-51␤-52␤-53␤-54␤-55␤-56␤-57␤-58␤-59␤-60␤-61␤-62␤-63␤-64␤-65␤-66␤-67␤-68􏿽xE2􏿽x90
diakopter urgh
moritz_ that totally freaked out my irssi 19:55
jnthn Same!
jnthn distracted for a while - cooking/eating 19:57
TimToady probably truncated the U+2424 ␤ in the middle 20:08
moritz_ good explanation 20:09
TimToady rakudo: print .chr for 0xf000..0xf100 20:13
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
TimToady rakudo: print chr($_) for 0xf000..0xf100
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
moritz_ currently rakudo on evalbot is really broken
TimToady pugs: print .chr for 0xf000..0xf100 20:14
p6eval pugs: No output (you need to produce output to STDOUT)
TimToady pugs: say .chr for 0xf000..0xf100
p6eval pugs: No output (you need to produce output to STDOUT)
moritz_ my attempts to fix this by rsync'ing a built parrot + rakudo to a new location also failed
because parrot looks in the old dir for libraries 20:15
TimToady pugs: for 0xf000..0xf100 -> $c { say chr($c) }
p6eval pugs: No output (you need to produce output to STDOUT)
moritz_ pugs: say 1
p6eval pugs: No output (you need to produce output to STDOUT)
TimToady oopsie
moritz_ sighs
most likely ghc got oom-killed during build
I'll try to rebuild it once more, and then disable the cron job until we see another commit to pugs 20:17
moritz_ pugs: say "alive" 20:27
p6eval pugs: OUTPUT«alive␤»
Tene_ rakudo: say "undead" 20:41
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
Tene_ Nice. :)
wolverian TimToady: as - is allowed in names, should MONKEY_PATCHING and other such be MONKEY-PATCHING instead? 20:44
TimToady _ is harder to type :) 20:58
pugs: print .chr for 0xf000..0xf100 20:59
p6eval pugs: OUTPUT«
TimToady rakudo: print .chr for 0xf000..0xf100
p6eval rakudo b2e7ac: OUTPUT«Class 'Perl6MultiSub' not found␤current instr.: 'parrot;Perl6Role;!add_variant' pc 2645 (src/classes/Role.pir:42)␤»
jnthn is back from eating and a nice walk in the snow 21:03
ruoso I think I realized how to break the circularity in Perl 6 type-system bootstrap... 21:06
I just need a way to re-bind some basic types 21:07
meaning
Array starts as being the lowlevel C implementation
but at some point I redefine it as the high-level
but this is not the same as "is instead" 21:08
jnthn class Array is instead { ... } ?
ruoso because "is instead" modify the Array class
ruoso I just want something different to be referenced by the "Array" name 21:08
jnthn Ah
ruoso meaning that stuff that resolved "Array" as the old value, keep that as it is 21:09
jnthn Then it's just changing the entry in the namespace? Or copying over the location where the previous Array class is stored...or something.
ruoso just changing the entry in the namespace
jnthn Sounds quite easy. :-)
ruoso so, if Multi was first defined with a very low level RoleHOW 21:10
and the punned class has very few features
I can re-define it later, after I have a complete RoleHOW and a complete ClassHOW
so I get a different punned class
jnthn Sounds workable.
ruoso but it would be nice to have a Perl 6 construct to replace the symbol 21:11
since all this types are going to be written in Perl 6 itself 21:12
(because I actually need it, not because I want to be fancy)
jnthn Just binding, isn't it?
Well, you've always the option of a magic internals call. ;-)
ruoso jnthn, the problem is that "magic internals" will have to make a huge effort to provide the semantics
so it's easier to have a Perl 6 compiler doing that 21:13
jnthn I don't quite see why replacing a symbol in the namespace is tricky, but I don't understand sm0p guts well enough to really know.
ruoso jnthn, smop is fine... 21:14
but I don't want a Perl 6 first-stage-compiler
I mean
I don't want to have a custom compiler for the prelude
so I'd like to use STD Perl 6 to do that re-definition
jnthn Doesn't ::Array := $new_definition_of_array; work? 21:15
Or similar...that won't quite work
TimToady ::= more likely
jnthn *nod*
TimToady or it's substituting in a new CORE
ruoso both in the CORE package and in the prelude 21:16
TimToady CORE *is* the prelude
now called the setting, btw
because it's not just before
any lexical scope can say "freeze me to a new setting" to be used in place of CORE 21:17
ruoso so I can assume CORE is the outer of the outermost scope
TimToady that's how -n and -p probably work
yes, but it sound's like you want BOOT:: outside of that :) 21:18
s/'//
ruoso this confusing of lexical scopes and packages is getting me dizzy
TimToady or maybe TURTLE:: or something :)
this has nothing to do with packages
TimToady GLOBAL has almost nothing in it except user-defined packages 21:19
ruoso right... CORE is a pseudo-package
TimToady CORE is the outermost lexical scope
and almost all built-in types are CORE:: packages, not GLOBAL::
ruoso so CORE is a pseudo-package, as CALLER
that makes it clearer 21:20
TimToady when you say Int it finds CORE::Int unless an inner lexical scope overrides
see recent changes to S02
ruoso cool
I had seen it before, but missed the "pseudo-package" part 21:21
TimToady maybe we define CORE as implementation independent, and outside that is IMPLCORE or some such for bootstrapping, that is implementation dependent 21:22
I dunno, not sure that solves anything...
ruoso I'm not sure that it needs the definition...
because CORE is just something you do a lookup ok
s/ok/on/
TimToady but I'd like to keep implementation specifics out of the standard setting
ruoso it doesn't matter how many outer scopes it has
we just know that at some point we name "this is the standard CORE" 21:23
TimToady CORE may well have scopes outer to it, but maybe it just hides them all under CORE
ruoso since CORE is a pseudo-package
that already happens in CALLER
I call it "flattened lexical scope" 21:24
(as in "there's a type with that name in SMOP")
(ok, not that name exactly, but you got it)
dalek kudo: 1ac6625 | jnthn++ | src/builtins/io.pir:
Implement prompt built-in.
ruoso TimToady, what would be really cool would be to have a runtime way to say: "The current lexical scope should be taken as CORE from now on" 21:25
TimToady that's called eval
:)
ruoso hm?
TimToady SETTING is what you're thinking of
see S02 21:26
ruoso It would be if I was a regular user ;)
but I'm writing the CORE itself ;)
so I need to re-define it after each step
jnthn moritz_: I just implemented prompt and closed the ticket then thought....ah...test...
moritz_: But what is status/planning for testing IO stuff like that?
moritz_ jnthn: stuck in the planning and experimenting phase :( 21:28
TimToady commuting &
jnthn moritz_: OK. 21:29
moritz_ jnthn: just assign it to me for now 21:30
ruoso trying to find a way to put another turtle under the elephant foot
moritz_ pities the turtles
jnthn moritz_: Given. 21:31
ruoso wonder if "class CORE::Array {...}" is sane for that matter 21:32
std: class CORE::Array {...} 21:33
p6eval std 25322: OUTPUT«ok 00:02 33m␤»
ruoso now I just need a carefull planning of each stage of the bootstrap, realizing which types are going to be replaced from low-level to high-level and each types are going to be re-initted to use the features of the higher-level types... 21:38
pmurias, hi
pmurias, I think we are on time to sanitize the lexical prelude, and make a bootstrap timeline (not in the sense of development, but in the sense of actual loading of types) 21:40
pmurias ruoso: hi
lambdabot pmurias: You have 1 new message. '/msg lambdabot @messages' to read it.
pmurias ruoso: one think that bothers me with the replace Array with a better Array scheme, is won't the old version behave different? 21:42
ruoso yes, but in the end we should be able to re-init all visible types in a way that the old version disappears from the user 21:43
i.e. bootstrap
that's why we need the timeline 21:45
pmurias ah, got it
ruoso were we can have the types implemented in C in red, the one implemented in Perl 6, but still depending on C types in black, and the boostrapped types in blue... 21:46
ruoso thinks in a very wide SVG file 21:46
moritz_ ruoso: or dot/neato 21:47
very handy for graphs/trees
pmurias bootstrapped time are the ones only needed at class creation time? 21:47
s/time/types/
ruoso bootstrapped are those who no longer see any lowlevel type during its initialization 21:48
any lowlevel type or any high-level type that yet depends on a low-level type
ruoso commute & 21:49
ruoso will backlog &
dalek kudo: 7175fd0 | jnthn++ | src/ (2 files):
Allow 'inheritance' from a role (puns the role into a class and inherits from the pun).
21:58
dalek kudo: a0a3902 | jnthn++ | src/parser/actions.pm:
Check for $x ~~ .foo is syntactic and should thus be done on the parse three, not the PAST tree (pmichaud++ for input).
22:47
jnthn OK, that's me done for the day. 22:48
Report: use.perl.org/~JonathanWorthington/journal/38475