Check your feather email | spec.pugscode.org | paste: sial.org/pbot/perl6 | pugs.blogs.com | www.treehugger.com/files/th_images/paradigm.jpg Set by audreyt on 29 August 2006. |
|||
markstos | I can't find any tests for "Calling Sets of Methods": feather.perl6.nl/syn/S12.html#Calli...of_methods | 00:03 | |
lambdabot | Title: S12, tinyurl.com/ga3uw | ||
markstos | so I'm going to add some. | ||
This is exactly a feature I could use to clean up some code in CGI::Application. We use it to implement a plugin scheme there, going to the inheritence tree to call all the methods any class for particular plugin slots. | 00:05 | ||
00:05
jferrero joined
|
|||
TreyHarris | markstos: to answer the question in your comment (how to just pass %h), there are at least three ways, none of which are currently supported | 00:07 | |
markstos | audreyt mentioned [,]%h, which I guess is one of them. | ||
TreyHarris | 1. test_dispatch(%h:<m1 m2 call expect>) | ||
2. test_dispatch([,](%h)) | |||
3. sub test_dispatch ({:$m1, :$m2, :$call, :$expect}) ... test_dispatch(%h) | 00:08 | ||
markstos | So only #2 allows to pass through truly arbitrary data. | ||
TreyHarris | no, none of them do | ||
well, only three does, if you do it like this: | 00:09 | ||
3. sub test_dispatch ({:$m1, :$m2, :$call, :$expect, *%arbitrary_hash_data}) ... test_dispatch(%h) | |||
markstos | [,]%h looks arbitrary. :) | ||
TreyHarris | nope, named arguments have to be named arguments... if there are keys in %h that don't map to named arguments of test_dispatch, and test_dispatch doesn't accept a slurpy hash, then you're calling the subroutine with extra parms and will get a failure at runtime. | 00:10 | |
s/parms/params/ | |||
audreyt | markstos: as re | 00:11 | |
01:38 < svnbot6> r12965 | markstos++ | The spec is not specific about multi method dispatch details, saying: | |||
clkao | *yawn* | ||
audreyt | markstos: please see docs/notes/mmd-draft.txt | ||
markstos | So [,]%h, plus a slurpy hash is a solution. | ||
audreyt | markstos: I've been trying to get TimToady bless it :) | ||
TreyHarris waves at audreyt | |||
audreyt | markstos: but it's the closest as we have for the dispatch defaults | ||
TreyHarris | audreyt: we've been on different circadians for several days now :-) | ||
audreyt | we have. | ||
markstos | audreyt: Wow, it's been 8 hours since you went to sleep already. I should go outside before it's dark here... | 00:12 | |
TreyHarris | audreyt: did you notice the interactive problem with LoH literals I've been mentioning for a few days now? | ||
audreyt | I managed to completely miss it. | ||
clkao | audreyt: hey. how about making jifty's moosification with Web::Field::* converted first. they seem more isolated | ||
markstos | audreyt: I'll review that doc. Thanks. | ||
audreyt | clkao: sure, feel free to pickup the branch and run with it... | ||
TreyHarris | audreyt: only at the interactive pugs prompt, not in read code, and not in -e, and not in eval, "({a => 'a'}, {b => 'b'})" segfaults | 00:13 | |
clkao | audreyt: i meant how about you finishing it up ;) | ||
audreyt | clkao: or, if you want me to do the pickup, that probabaly needs to wait till next week | ||
clkao | alright. i will haraess you next week | ||
audreyt | I have pugs releng to do first :) | ||
TreyHarris | audreyt: i was at a total loss as to how to document with a test short of implementing Expect in P6 :-) | ||
audreyt | "until next week" | ||
clkao | "hide until" | ||
audreyt | TreyHarris: it doesn't segfault for me | 00:14 | |
TreyHarris: so give me a gdb bt? | |||
gdb ./pugs | |||
run | |||
pugs> expr | |||
bt | |||
markstos | Are all of these considered current? docs/notes/mmd.kwid docs/notes/mmd_match_order.txt docs/notes/multimethods.pod | ||
audreyt | markstos: no. oh wow | 00:15 | |
sorry. only misc/pX/Common/mmd-draft.txt is current | |||
the others are materials to make misc/pX/Common/mmd-draft.txt | |||
markstos | ?eval @%(a => <b>)<a> | ||
00:15
evalbot_12953 is now known as evalbot_12966
|
|||
evalbot_12966 | (no output) | 00:15 | |
pasteling | "TreyHarris" at 207.171.180.101 pasted "gdb output showing segfault on LoHs" (17 lines, 620B) at sial.org/pbot/19433 | ||
audreyt | ?eval @(%(a => <b>)<a>) | 00:16 | |
evalbot_12966 | ["b",] | ||
markstos | TreyHarris: My eval might related to your segfault: It segfaults too, which is why evalbot doesn't return. | ||
I added a test for it in t/data_types/hash.t | |||
audreyt | it dies in showHex! wow | ||
completely unexpected | |||
this GHC 6.4.1 on powerpc? | 00:17 | ||
TreyHarris | 6.4.2, ppc | ||
audreyt | okie. fixing | ||
TreyHarris | but it has been seen on linux and on 6.4.1 | ||
clkao | what's exciting in new release? | ||
audreyt | clkao: embed perl5 by default; 2x+ faster runtime, esp. compiled with GHC 6.6; support UTF* in source; Roles actually work instead of being poor inheritance imitations | 00:18 | |
clkao | (!) | 00:19 | |
embed perl5 by default? how come? | |||
audreyt | much faster sparse arrays and hashes | ||
how come not? I think it's culturally important | |||
as it enables us to use PCR isntead of PGE for rx:// | |||
markstos | I think it's important to. | ||
audreyt | and P5Re instead of PCRE for rx:P5// | ||
and Moose and Data::Bind for callconv. | |||
(to p5land) | |||
markstos | With it, I think people will use the CGI::App port sooner. | ||
Without out, it's a hassle to get a decent default template engine. | 00:20 | ||
audreyt | yes. having to enable p5embed by hand was only a workaround because activeperl was b0rk | ||
but now it's fixed, there's no excuse anymore | |||
as per spec, any perl6 implementation must be able to run perl5. | |||
markstos | That's part of the spec, though? *surprised*. | ||
audreyt | yes. S01: | 00:21 | |
Migration is important. The perl interpreter will assume that it | |||
is being fed Perl 5 code unless the code starts with a "class" or | |||
... | |||
and other various places. | |||
markstos | Right. I recall that now. | ||
clkao | wsaueggcellent | ||
TreyHarris | audreyt: i tried to do use p5:IO::Prompt, and the only way I found to call prompt was via perl5:IO::Prompt.can('prompt'). is this expected behavior? | 00:22 | |
audreyt | TreyHarris: no. you should be able to | ||
use perl5:IO::Prompt 'prompt'; | |||
prompt(...) | |||
the "default import" doesn't yet quite work with our lexical import | |||
clkao | remembre to put something in __DATA__... | ||
audreyt | so you need to be explicit | ||
for now | |||
clkao | iirc that was on my list | ||
but it didn't seem that people care | 00:23 | ||
audreyt | people will start to care very soon. | ||
pasteling | "TreyHarris" at 207.171.180.101 pasted "audreyt++'s syntax worked, but it panicked" (4 lines, 250B) at sial.org/pbot/19434 | 00:24 | |
audreyt | oy. | ||
audreyt looks at clkao | |||
clkao | are we set in pdx hackathon? | ||
lets fix that in yapc::sa? ;) | |||
audreyt | i've been waiting from semaphor from bestpractical | ||
sure ;) | 00:25 | ||
s/from/for/ | |||
clkao | Want is evil | ||
audreyt | as befits damian's module | ||
clkao | okay. let's sort it out tomorrow. i should book my tickets | ||
audreyt | 'k | ||
clkao plans birthday drinks | |||
audreyt | ah right. your birthday is nigh | 00:26 | |
markstos | audreyt: mmd-draft.t doesn't mention optionals at all. Should I patch it ? | ||
clkao | yaq | ||
horrible | |||
audreyt | markstos: sure! | ||
markstos: that algorithm should get reflected Sub::Multi in full, too, which is another piece of p5 hacking open for hacking :) | 00:27 | ||
clkao | aaaaaah! | ||
i irc there was soemthing blocking | 00:28 | ||
markstos | Let's see about getting it blessed before we start spreading around implementations of it too far. | ||
clkao | i can't remember | ||
TreyHarris | is anybody using irssi and actually seeing the random non-ascii strings that show up on here regularly? and if so, is there some trick? (i'm using a unicode font that has the characters in question for my terminal. but i'm also using screen, which maybe is the problem) | ||
clkao | see, iam getting old | ||
audreyt | markstos: I think the only nonblessed part is syntax, actually. | ||
markstos: namely, the use of | |||
sub f ($x ; $y ;; $z) | |||
clkao | audreyt: qtell me again about this *@@; thingy | ||
audreyt | to denote levels instead of | ||
markstos | The double semicolon ? | ||
audreyt | sub f ($x ; $y ; $z) | ||
to denote the same thing | |||
yes. | |||
clkao: ok... when you pass in multiple feeds | 00:29 | ||
markstos | Ok. What I have to say about optionals probably won't make any headway on the double semi-colon debate. | ||
audreyt | each feeds being a list of pos and a map of nam | ||
markstos: it's purely syntax, too, so orthogonal to optionals | |||
clkao | mmmmmmm seems complicated | 00:30 | |
audreyt | clkao: and when the Sig part is of sigil @@x on slurpy position | ||
then @x is bound to a list of that feeds | |||
markstos | I don't think it's purely syntax, as it also implies an extra level of distinction, which otherwise wouldn't exist. | ||
audreyt | with each element being a Capture of nam/pos of that feed slice | ||
markstos: uhm no. the spec currently already makes that level of distinction | |||
markstos: the spec currently says | |||
"add one semi at end if there's no semi" | 00:31 | ||
"then, the final semi denotes ;;" | |||
semantically it's entirely equivalent | |||
it's the same underlying model | |||
markstos | interesting. | ||
clkao | airhgt... so there can be names+pos in each ;-separated ones | ||
? | |||
audreyt | yes. | ||
clkao | give me an example | ||
? | |||
is it somewhere in example/ or t/ ? | |||
markstos | Anyway, perhaps the new optionals clause will nudge resolution on that issue. | ||
audreyt | clkao: no, examples only has | 00:32 | |
for each(1,2,3;4,5,6) { ... } | |||
clkao | aaah what should it be doing | ||
audreyt | iterating thru 1,4,2,5,3,6 | ||
markstos: cool | 00:33 | ||
clkao | what's the prototype like? | 00:34 | |
TreyHarris | markstos: what is your tweak involving optionals? | ||
markstos | TreyHarris: I'm thinking it through now, but will make all tests pass that I just sent to p6l when I wrote about the issue there. | 00:35 | |
s/will/it will/ :) | |||
00:36
spoopithy is now known as spoop
|
|||
markstos | I hope it will just clarify what people expect to happy anyway. :) | 00:36 | |
00:38
lectus joined
00:41
nothingmuch joined
|
|||
markstos | The optionals rule boils down to this, which addresses all the related tests: | 00:42 | |
For each optional parameter, a case with and without the optional parameter is considered, and the case with it is attempted to match first. | |||
lectus | Is perl 6 available for windows? | ||
audreyt | lectus: yes, try www.jwcs.net/~jonathan/perl6/ | 00:43 | |
lambdabot | Title: Jonathan Worthington :: Perl 6 / Parrot | ||
lectus | thanks | ||
is it possible to test perl 6 without touching my current Active Perl setup? | 00:44 | ||
markstos | I don't even think we need the clause: "and the case with it is attempted to match first.", because when you consider an optional parameter as two cases, best matching spec'ed elsewhere should Do The Right Thing. | 00:46 | |
TreyHarris | markstos: do you mean that it's possible that you will call a multi with an optional parameter that doesn't exist in the signature of the sub you end up calling? that seems very.... perl5ish... maybe not in a bad way. i'm just not used to Perl 6 ignoring extra parameters the sub doesn't refer to | 00:49 | |
svnbot6 | r12967 | markstos++ | Add section on optionals and slurpies to mmd-draft.txt, | ||
r12967 | markstos++ | which was otherwise unaddressed. | |||
00:49
ayrnieu joined
|
|||
markstos | TreyHarris? Could you clarify with an example? I included some examples I had in mind in the change I made. | 00:50 | |
TreyHarris | looking... | ||
markstos | be back in 20 min or so. | 00:51 | |
TreyHarris | audreyt: what do you think of my suggestion of changing but's semantics to clone, and to have a "is cloned" parameter trait? | 00:53 | |
audreyt | lectus: sure | 00:55 | |
lectus: if you'd like to use your activeperl modules with perl6, maybe helps us testing the perl5 embedding? | 00:56 | ||
lectus: you can do that by installing TortoiseSVN or Subversion | |||
check out svn.openfoundry.org/pugs/ with it, installing GHC by extracting haskell.org/ghc/dist/current/dist/g...w32.tar.gz into c:\ghc\, and then | 00:57 | ||
lambdabot | Title: Revision 12954: / | ||
audreyt | perl Makefile.PL | ||
nmake | |||
on the checked-out pugs directory | 00:58 | ||
that should give you a pugs.exe that can use perl5 modules installed in activeperl | |||
TreyHarris: deep clone? | |||
01:08
theorbtwo joined
01:10
weinig|bbl is now known as weinig
|
|||
pasteling | "TreyHarris" at 207.171.180.101 pasted "cloned trait" (10 lines, 279B) at sial.org/pbot/19435 | 01:12 | |
TreyHarris | audreyt: i was thinking like that ^^^^ | ||
audreyt | yay, the GHC pumpking solved the segfault | ||
nice that there's dedicated fulltime support for GHC nowadays :) | |||
nothingmuch | audreyt: nothingmuch.woobling.org/MO/ | 01:13 | |
lambdabot | Title: Index of /MO | ||
nothingmuch | very simple split runtime/compile time metamodel | ||
single inheritence, stupid attrs with rw accessors | |||
but all nicely decoupled | |||
c3 MI + roles tomorrow, maybe | |||
then smarter layouts | |||
then foreign dispatch types | 01:14 | ||
it needs to not uses hashes as rvalues | |||
but aside from that i'm happy with the code | |||
svnbot6 | r12968 | audreyt++ | * Igloo++ solved the showHex segfault, by advising us to | ||
r12968 | audreyt++ | unsafeCoerce# into an unboxed word (Word#) instead of a | |||
r12968 | audreyt++ | boxed word (Word), which will work for value types as | |||
r12968 | audreyt++ | well as for mutable types. | |||
audreyt | oh wow. | ||
nothingmuch++ nothingmuch++ nothingmuch++ | |||
is this going back to C::MOP some day? :) | |||
nothingmuch | i hope so | 01:15 | |
i need to convince stevan it's sane | |||
my Master Plan is that the methodtable responderinterface can be compiled to perl 5 packages | |||
everything else is just going to be slow dispatch ;-) | |||
audreyt | aye aye | ||
nothingmuch | also | ||
note lack of bless {} | |||
it's not using perl 5's OO at all at this stage | 01:16 | ||
aside from bootstrapping the metamodel | |||
audreyt | TreyHarris: I see what you mean | ||
but perl6's .clone amounts to .perl.eval | |||
i.e. thoroughly deep clone | |||
nothingmuch | hmm | 01:17 | |
audreyt | though maybe it's okay for "but". | ||
nothingmuch: yes, I see that. | |||
very, very nice. | |||
nothingmuch | it could also use a bit of memoization, since everything is 'is ro' for now, too | 01:18 | |
TreyHarris | audreyt: ahhh. of course it can be overridden (and that was my motivation for using .clone in the first place), but the default will be most common, so that's probably bad. is there a shallow clone? | ||
audreyt | TreyHarris: actually whether .clone is deep or shallow | 01:19 | |
appears to be unspecced! | |||
nothingmuch | anymoose | ||
good night | |||
TreyHarris | but causing its LHS to change is just very, very surprising, and i don't think it's desirable | ||
nothingmuch votes for shallow | |||
too many ways to do deep | |||
wrt "singletonish" objects | |||
audreyt | I'm fine with shallow. | ||
nothingmuch | e.g. DBIx::Class rows referring to their result source | 01:20 | |
cloning the entire schema is not a good idea ;-) | |||
audreyt | TreyHarris: ok, so shallow copy for "but" blocks | ||
sounds sane. can you supply a patch to p6l on S12:610 and related places? | 01:21 | ||
TreyHarris | i was thinking it was very natural for "XXX but" to map, not to "do given XXX", but to "do given XXX -> $xxx is cloned", but I was assuming .clone is shallow | ||
audreyt | "$xxx is clone", btw. | 01:22 | |
we don't say "$xx is copied" | |||
or maybe we should, but anyhow :) | |||
audreyt not really have a strong opinion on ergonomics | 01:23 | ||
TreyHarris: but I agree with the sentiment | |||
(does the "but" in above sentence clone TreyHarris?) | |||
nothingmuch | audreyt: whs that p6l request to me? | 01:24 | |
audreyt | nothingmuch: no, to TreyHarris | ||
my request for you is to sleep :) | 01:25 | ||
nothingmuch | ah | ||
=) | |||
yes, working on it | |||
TreyHarris: YOU LIKE SHALLOW CLONES | |||
</hypnosis> | |||
TreyHarris | <zombie>I LIKE SHALLOW CLONES</zombie> | 01:26 | |
nothingmuch | HERE IS YOUR SHALLOW CLONE SHERBERT | 01:27 | |
TreyHarris | audreyt: um, S12:610 is talking about hyperops on junctions... | 01:28 | |
audreyt | er, typo. 510. | 01:29 | |
clkao | win 25 | ||
audreyt | clkao: sounds like your birthday motto | ||
clkao | errr.that's a bit silly | 01:30 | |
;) | |||
it's a square number1 what should i do this year | |||
audreyt | I didn't know you attach special meaning to square numbered ages... | 01:31 | |
clkao | i don't know either. it just came up | 01:33 | |
audreyt | hmmm | 01:36 | |
make svk the first widely deployed p6 app? :) | |||
clkao | heh | 01:37 | |
audreyt | looks at what darcs did to haskell :D | ||
clkao | nice try | ||
if only everything works... | |||
audreyt | when darcs was started, almost nothing works in GHC for realworld apps either... | ||
clkao | .... | ||
audreyt | droundy's talk at last year's ICFP was basically how he coerced more and more stuff into GHC that makes it fast/featureful/compact enough | 01:38 | |
clkao giggles | |||
markstos | interesting. | ||
clkao | tell me again when i am done with birthday drinking tomorrow | ||
audreyt | heh sure | ||
clkao | it might be possible after some beers/wines | ||
TreyHarris | audreyt: since unlike .valid, everything produces a .SKID, is there a way to distinguish whether a given value is of a value type or not? | 01:42 | |
01:42
weinig is now known as weinig|bbl
|
|||
audreyt | there's no .valid anymore | 01:42 | |
01:42
weinig|bbl is now known as weinig
|
|||
ayrnieu | ?eval <1>.SKID | 01:43 | |
01:43
evalbot_12966 is now known as evalbot_12968
|
|||
evalbot_12968 | undef | 01:43 | |
TreyHarris | right, that was my point. .valid would return undef if the object was a non-value type. .SKID returns an address. so you can use .SKID in boolean context like you could for .valid | ||
svnbot6 | r12969 | audreyt++ | * hash.t: Correct the segfault test to test for segfaults. | ||
audreyt | hm, we need a .META.isValueType | ||
except not capitalized as such | |||
add it to the spec too? | |||
TreyHarris | ok | 01:44 | |
audreyt | .META.mutable or something | ||
TreyHarris | is "foo" mutable? | ||
audreyt | no. | ||
svnbot6 | r12970 | audreyt++ | * More unsafeCoerce# and segfault avoidance. | ||
audreyt | hell no. | ||
we are not ruby, after all. | 01:45 | ||
TreyHarris | lol. is class Point { has $.x is rw; has $.y is rw; } mutable? | ||
audreyt | an instance of that class would be mutable. | ||
ayrnieu | whath, the class definition? | ||
audreyt | the class itself... is debatable. I think yes | 01:46 | |
TreyHarris | sorry, yes, i meant an instance of | ||
audreyt | as it's by default an open class. | ||
so both are mutable | |||
clkao | see, i still want a gentle migration plan. starting from using the classes/roles and signatures | 01:47 | |
audreyt | moosification gets you the first | 01:48 | |
clkao | ya | ||
audreyt | as for the latter... yeah. :) | ||
markstos | ?eval @%(a => <b>)<a> | ||
evalbot_12968 | Error: Cannot cast into Hash: VRef <Array::Const:0xb6e512ec> | ||
clkao | zzzzzzzzzzzzzzzzz | ||
svnbot6 | r12971 | markstos++ | refine out optionals on are handled in mmd-draft.txt. | ||
markstos | segfault fixed! | ||
my grammar is apparently sucking. | 01:49 | ||
audreyt | :) | 01:51 | |
markstos | audreyt: I think I should make docs/multi_method_dispatch/ and put the four related docs there, and a README explaining which one is current. | 01:52 | |
audreyt | markstos: these are all but historical drafts aiming to make it to S12 | ||
so should be discarded once it's made into S12 | 01:53 | ||
but sure, please do that | |||
and clarify their status in that README | |||
clkao | audreyt: btw env $x is gone right? | ||
audreyt | markstos++ | ||
clkao: it's now "my $x is context" | |||
clkao | right. there are a few tests with that | ||
audreyt | thanks to merlyn and uri | ||
clkao really zzz | |||
TreyHarris | ok, then, so $obj.clone should walk all attributes, public and private, of $obj, and if !($obj.$attr.META.mutable) assign a clone of it, otherwise just assign it. should '=' (theoretically) already have these semantics? | 01:55 | |
svnbot6 | r12972 | audreyt++ | * change "env $x" into "my $x is context" as noticed by clkao++. | 01:57 | |
r12972 | audreyt++ | note that pugs doesn't handle the latter form yet. | |||
audreyt | uhm, you just described deep cloning | 01:58 | |
recursively | |||
I thought you want shallow | |||
nothingmuch | WHO HAS AWAKENED THE MUMMY OF THE CLONES? | ||
YOU MUST CLONE SHALLOWLY | |||
FOR THOU ART SHALLOW AND LIKETH BRITNEY SPEARS | |||
OBEY OBEY OBEY | |||
audreyt | TreyHarris: s/assign a clone of it/assign it/ | 01:59 | |
nothingmuch | *poof* | ||
TreyHarris | audreyt: yes. I was falling into the forgetting-about-what-autoboxing-really-means trap, and was trying to simulate it in Perl 5 :-) | 02:01 | |
audreyt | :) | 02:03 | |
02:04
weinig is now known as weinig|zZz
|
|||
audreyt | I think I need some more napping. bbl... | 02:04 | |
*poof* | |||
svnbot6 | r12973 | markstos++ | organize and add README explaining the MMD docs status. (will move the new dir into notes/) | 02:07 | |
r12974 | markstos++ | move multi_method_dispatch dir into notes. | 02:10 | ||
02:32
mako132_ joined,
Flying joined
|
|||
svnbot6 | r12975 | markstos++ | Add some tests for "L<S12/"Calling Sets of Methods">. | 02:43 | |
r12975 | markstos++ | They nearly all fail now. | |||
markstos | sleep & | ||
svnbot6 | r12976 | audreyt++ | * More segfault avoidance on freebsd with optimized build. | 02:53 | |
02:57
nothingmuch joined
|
|||
svnbot6 | r12977 | audreyt++ | * Pugs.Val: Use the Word# casting trick for SKID too. | 03:06 | |
03:32
lambdabot joined
03:40
lambdabot joined
04:29
nothingmuch joined
05:33
iblechbot joined
07:45
nwc10 left
08:23
onsen joined
08:25
DaGo joined
08:44
elmex joined
08:58
iblechbot joined
09:01
kane-xs joined
09:26
reZo joined
09:49
gaal joined
|
|||
nothingmuch | morning | 10:02 | |
10:03
bernhard joined
10:11
araujo joined
|
|||
araujo | morning | 10:21 | |
10:25
larsen joined
10:33
elmex joined
11:15
markstos joined
11:18
ofer0 joined
11:22
LeoNerd joined
|
|||
LeoNerd | Heh.. just checking | 11:22 | |
11:22
LeoNerd left
11:37
Revision17 joined
11:44
theorb joined
|
|||
svnbot6 | r12978 | markstos++ | remove bogus example in optionals section of mmd-draft.txt, pointed by Luke Palmer. | 11:44 | |
r12979 | markstos++ | [t/blocks/signature_match.t] | 11:53 | ||
r12979 | markstos++ | Add smart link | |||
12:01
kanru joined
12:04
chris2 joined
12:15
pjcj joined
|
|||
svnbot6 | r12980 | markstos++ | [t/blocks/multi_sub.t t/blocks/param_signature.t t/blocks/signature_matching.t] | 12:21 | |
r12980 | markstos++ | Add smart links. | |||
r12981 | markstos++ | Rename t/blocks/signature_matching.t t/blocks/multi_named_vs_pos.t] | 12:24 | ||
12:24
ludan joined
|
|||
svnbot6 | r12981 | markstos++ | This makes it more easily found with the other multi_* test there. | 12:24 | |
ludan | ola | 12:26 | |
12:28
soisoisoi joined,
heng joined
|
|||
integral | Is S5 the spec for perl6 rules? And, is there a perl5 impl of them? | 12:35 | |
12:35
job joined
|
|||
audreyt | yes and yes. | 12:36 | |
the impl is on CPAN as Pugs::Compiler::Rule | |||
and found in pugs/perl5/ as well | |||
12:36
job left
|
|||
integral | ah, thanks! | 12:37 | |
audreyt | glad to help :) | ||
12:38
jkva joined
|
|||
gaal mooses | 13:09 | ||
audreyt | heya gaal :) | ||
audreyt is previewing dons's great fps paper | |||
gaal | ooh | ||
audreyt | explaning all about the details of the 2.5x speedup lately | ||
gaal | is it in preprint? | 13:10 | |
audreyt | no, private review still | ||
gaal | moose | 13:11 | |
audreyt | from my feedback to dons: | 13:23 | |
15:20 <audreyt> bytestring is the only real reason | |||
15:20 <audreyt> that convinced me pugs should not be thrown away as a prototype | |||
15:20 <audreyt> and instead GHC is a good imperative VM in its own right | |||
gaal | :) | 13:26 | |
audreyt | (of course the bootstrap to write the compiler in p6 will still happen; I'm referring to the runtime system :)) | 13:27 | |
gaal like fusipugs | |||
audreyt | pushion | ||
gaal | 6.8 needs a fps literal constructor to replace "" | 13:28 | |
also make it available in patmatch | |||
13:29
plisk joined
|
|||
gaal | ah and: can you explain why W#.unsafeCoerce# fixed the segfaults? | 13:29 | |
as opposed to just saved some memory? | |||
audreyt | sure | 13:30 | |
a Word is actually | |||
data Word = W# Word# | |||
here W# is constructor, Word# is the value | |||
so it's a boxed heap object | |||
gaal | yupun | ||
audreyt | taking two words | ||
one for the constructor tag one for the value | |||
you can't generally cast an incompatible heapobject into that | 13:31 | ||
gaal | ah | ||
audreyt | but any heap object is at least one word | ||
so can always be cast into the layout-independent W# | |||
which is just void* | |||
end of explanatation :) | 13:32 | ||
gaal | :) | ||
audreyt | I like the new :main in ghci | 13:33 | |
13:33
weinig|zZz is now known as weinig
|
|||
audreyt | :main -Iblib6/lib t/foo.t | 13:33 | |
xerox | :main? :D | ||
audreyt | yeah, saves withArgs orother sillyness | 13:34 | |
13:34
theorbtwo joined
|
|||
xerox | It calls main with args.. oh nice. | 13:34 | |
13:38
weinig is now known as weinig|bbl
|
|||
svnbot6 | r12982 | audreyt++ | * Pugs.Parser: "role A does A" is not allowed anymore. | 13:38 | |
r12982 | audreyt++ | This fixes t/xx-uncategorized/self_inheritance.t. | |||
gaal | oh nice | 13:39 | |
audreyt: whenever convenient, please see 'open questions' on last Sig commit | 13:40 | ||
(r12960) | 13:41 | ||
svnbot6 | r12983 | audreyt++ | * t/var/var.t: this is no longer allowed: | ||
r12983 | audreyt++ | my $x; | |||
r12983 | audreyt++ | { | |||
r12983 | audreyt++ | $x = 1; | |||
r12983 | audreyt++ | my $x = 2; | |||
r12983 | audreyt++ | } | |||
r12983 | audreyt++ | so don't test for it. | |||
audreyt | uhm | 13:43 | |
:($moose! is Beautiful is Fair) | 13:44 | ||
doesn't do what you think it does, I think... | |||
namely, it's not :(Beautiful Fair $moose) | |||
the latter I think translates to :($moose of Beautiful of Fair) | 13:46 | ||
gaal | audreyt: I know | 13:47 | |
audreyt | which talks about $moose's content, not the alloc | ||
oh ok | |||
gaal | it means some other user def aux | ||
audreyt | okie | ||
gaal | goes into the p_slots table | ||
are 'Fair $moose' and $moose of Fair' entirely equivalent? if so I can trivially add support for 'of'. | 13:48 | ||
audreyt | they are. | ||
gaal | my question was where to put 'does' constraints | ||
audreyt | and I think it does different things based on whether Fair is role or class. | ||
gaal | as well as parametric variables, which need to be stored in the Param but also reported to the constructed Sig | ||
audreyt | as re #0 | ||
sub f ($x does Moose) | 13:49 | ||
is actually never canonical | |||
spec only lets you talk about sub f ($x of Moose) | |||
which means "does" iff Moose is role | |||
"does" enters picture when you wantto use a class as a role | |||
in type position | 13:50 | ||
gaal | hm ok | ||
audreyt | but I'm not sure it's sane, or going in, or anything. | ||
gaal | i'll ignore it then. :) | ||
audreyt | good :) | ||
gaal | what about ::T then? | ||
it could be either an incoming or outgoing type | 13:51 | ||
and in some cases it's an error! | |||
audreyt | before you ignore it, put in a ocmment that says that :) | ||
(the "does' thing) | |||
13:51
b00t joined
|
|||
audreyt | I think we either admit tyvars in p_types | 13:51 | |
gaal | eg. :(Dog ::T $x, Cat ::T $y) - error, ::T already bound? | ||
audreyt | i.e. extend our Type to admit tyvars | 13:52 | |
gaal | nod | ||
audreyt | or introduce p_tyvars | ||
13:52
wilx joined
|
|||
gaal | okay. I think we need the latter, since ruleParam now needs an incoming tyvar parameter | 13:53 | |
audreyt | that depends on how unification is done | ||
gaal | er, that's actually unrelated | 13:54 | |
audreyt | I think latter is saner | ||
::T and ::T may not be error | |||
it maybe a requestto unify | |||
i.e. find the common T such... | |||
gaal | ouch | ||
this is teh intricate | |||
audreyt | depends on how much left bias we want | 13:55 | |
I think p_tyvars allows flexibility at that point | |||
gaal | flexibility against future spec? | 13:56 | |
audreyt has long ago decided not to think about tyvar until Callconv, Objmodel and Grammar is done | |||
yes. | |||
13:56
hermax_ joined
|
|||
gaal | well, I'm happy with not even parsing this for this release | 13:57 | |
audreyt | as am I | ||
gaal | just need to fix a small bug in requiring an optionality hint, plus implement named params | ||
and then it's at compatible level to oldexp parser | 13:58 | ||
audreyt | niiiice :) | 13:59 | |
13:59
lisppaste3 joined
|
|||
audreyt has started the long journey of bottom-to-up triaging | 14:00 | ||
gaal wonders if he should give a "haskell for beginners" talk in OSDC::Il | |||
svnbot6 | r12984 | audreyt++ | * s/try/do/ in t/var/type.t now we parses "my Int $f" | ||
xerox nods | |||
audreyt | please do! :) | 14:01 | |
you can use ziggy's material too | |||
just make sure to pull the IO chapters from the last to first | |||
and use bytestrings :) | |||
gaal | I don't know if: I know enough, there's enough interest, and if audreyt isn't crazy :) | 14:02 | |
xerox | Anybody knows how to do interpolation of values in a string with io:format in Erlang? I know it's a strange question =P | ||
gaal | lol | ||
audreyt | I've just read TypEr paper that does inferencing for Erlang... great stuff | ||
gaal | audreyt: use bytestrings, suuure, why not explain type Eval = | ||
audreyt | gaal: seriously, I wish there's a MinHs in style of MinCaml | 14:03 | |
it's by far the best compiler introductory (1st year university students) | |||
that I've seen in any language | |||
gaal | don't know MinCaml, but have you tried Helium? | ||
audreyt | min-caml.sourceforge.net/index-e.html | ||
lambdabot | Title: A Crash Course for the MinCaml Compiler | ||
gaal | specialcased friendly error messages | ||
audreyt | sure but MinCaml is a 2kloc implementation of ML in ML | 14:04 | |
gaal | audreyt: seriously, I wish there were a mini Perl | ||
audreyt | that compiles code that is faster than GCC :) | ||
gaal | ! | ||
audreyt | and it touches all parts of the compiler chain | ||
marcus_ | boring sunday | ||
audreyt | from parsing down to register allocation | ||
and three intermediate languages | |||
fascinating, no? | |||
gaal | my moose | ||
gaal is reminded of graydon's talk, where he mentioned ocaml came with great tools | 14:05 | ||
14:06
nothingmuch joined
|
|||
gaal | # www.venge.net/graydon/talks/mkc/html/ | 14:06 | |
lambdabot | Title: MagicPoint presentation foils | ||
audreyt | yeah. Hs should be comparable on loc | ||
if not almost identical | |||
svnbot6 | r12985 | audreyt++ | * add MinCaml to READTHEM | ||
audreyt | but "faster than GCC in 2kloc" is such an alluring strategy. | 14:07 | |
it explains let-reduction, lambda-lifting, constant folding, dead code elimination, type-inferencing | |||
register spilling, register targetting/allocation, VM and assembly | 14:08 | ||
which are admittedly somewhat FP specific, but a lot of the concepts is reusable here as well | |||
gaal | I'll definitely look into this | 14:09 | |
audreyt | adapt it into a OSDC.il talk would befun. | ||
gaal | not sure my audience will agree | ||
audreyt | mmmmm | 14:10 | |
ok, maybe not for a 45min talk... | |||
gaal contemplates a Moose monad | 14:13 | ||
xerox | o_0 | 14:15 | |
14:20
nothingmuch joined
|
|||
audreyt | Moose is also monoid | 14:20 | |
Moose `mappend` Moose is still Moose | |||
xerox | What's the mempty :: Moose? :) | 14:21 | |
14:22
araujo joined
|
|||
audreyt | Moose :) | 14:24 | |
nothingmuch | clkao: BOY!?!? | ||
audreyt | data Moose a = Moose | ||
nothingmuch | nothingmuch.woobling.org/MO/ is now purely functional | 14:25 | |
lambdabot | Title: Index of /MO | ||
nothingmuch | all memoizations removed | ||
audreyt | wnice | 14:26 | |
wolverian | someone is lagging... :) | ||
audreyt | err, sorry :) | ||
nothingmuch: any chance of Hsification? :) | |||
nothingmuch | audreyt: that's what I'm planning on doing soon | ||
hence the changes | |||
audreyt | yay | ||
nothingmuch | i need to do MI slot allocation | ||
and i need to stop using hashes | |||
and use set::object | |||
audreyt | 'k | ||
nothingmuch | and add name-based constraints somewhere else | 14:27 | |
however, i'm still in the exploratory stage | |||
i don't know precisely what it's going to be, so hsification is perhaps premature | |||
audreyt | nodnod | ||
nothingmuch | i think in ca. 2 days we should have something | ||
anymoose, where's that clkao... he needs a present | |||
svnbot6 | r12986 | audreyt++ | * Temporarily parse "my $x is context" by assuming that | 14:46 | |
r12986 | audreyt++ | "env $x" was seen, although the latter is no longe canonical. | |||
r12986 | audreyt++ | The proper fix is to admit "is context" in the new Param structure. | |||
r12987 | audreyt++ | * Pugs.Val.Code: add slot for "is context". | |||
14:47
xinming joined
|
|||
xinming | TimToady: ping... | 14:47 | |
:-) | |||
gaal | so, I'm working on this network component, and am looking at the way it handles network errors. | 14:49 | |
for some strange reason, the firewall I've been using to simulate chopping the network connection doesn't trigger the same error case as actually pulling the plug | |||
avar | What's the status of the Perl6 Perl6 parser? | ||
gaal | so I'm finding myself pulling the (eth) plug a lot | ||
now, here's the thing: | |||
if I pull it just enough to trigger the applicative error, and plug myself back quickly, all's well | 14:50 | ||
if I leave the cable disconnected for about a minute, the machine reboots | |||
the first time it happened, I was just touching the tip of the rj jack, so of course I was thinking some freak electrical thing had occured | 14:51 | ||
14:52
Limbic_Region joined
|
|||
gaal decides to leave all switches in the "more magic" position | 14:52 | ||
Limbic_Region | gaal - that's the problem with magic switches | 14:53 | |
switching between levels of magics has side effects | |||
14:54
lectus joined
15:05
justatheory joined
|
|||
xinming | seen TimToady | 15:07 | |
?? It seems seenbot is away. :-/ | |||
integral | xinming: you can use SeenServ: /msg seenserv seen timtoady | 15:08 | |
oh, well not quite, doesn't do last spoken times. *sigh* | |||
xinming | >_< | 15:10 | |
Limbic_Region | ?seen TimToady | ||
lambdabot | TimToady is in #perl6. I don't know when TimToady last spoke. | ||
Limbic_Region | anyone built recently see a weird output o Parser.hs???? | 15:11 | |
xinming | integral: hmm Ok, I want someone to make a English name for me. anyone here would help? :-P | ||
[particle] | how about larry? :) | 15:12 | |
xinming | hmm, Can I have more? :-P | 15:13 | |
Limbic_Region | xinming - are you looking for an approximate representation of your name in english or | ||
are you looking for something with a specific meaning | |||
something that reflects your personality | |||
etc | |||
choosing a name isnt something one should do lightly IMO | |||
and if you weren't aware, there are many "baby name" websites that list names, how popular they are, and what their meaning and origin is | 15:14 | ||
xinming | Limbic_Region: approximate representation is ok, and for my personality, I want to be a very good person. :-) | ||
where the url is plz? | |||
Limbic_Region | the indicates one - there are dozens if not hundreds | 15:15 | |
just google for baby name | |||
xinming | Limbic_Region: thanks | ||
Limbic_Region | do you happen to know the origin and/or meaning of your current name? | ||
audreyt | Limbic_Region: weird output? | 15:16 | |
xinming | Limbic_Region: yes, Xin means trust, and believable. and Ming, means clear(in mind), and knowing much. | ||
Oh... audreyt, Your Chinese is good, could you please give me an English name? :-) Because I think You may choose a real good name for me. :-) | 15:17 | ||
audreyt | I think I prefer xinming :) | 15:18 | |
Limbic_Region | audreyt - yeah, only now I closed the window so I will have to do it again | ||
it finished compiling fwiw | |||
audreyt - I expected you to be sleeping. Is tomorrow a $work day? | 15:19 | ||
xinming | audreyt: But the problem is, It can't be used as an English name, I'm in a Company, and they ask me to make a English name. I don't really want to change my English name in the future. | ||
audreyt | Limbic_Region: it's not, but you're right, Ishould sleep, not triage | ||
xinming | hmm, I think "Larry Lai" is Ok. But the problem is, I don't know if it might become offensive. :-) | ||
Limbic_Region | well, if you triage - do it in silence (IOW off channel so you don't get sucked into other things) | 15:20 | |
audreyt | it's a pretty good name. | ||
Limbic_Region | xander is pronounced zander in english fwiw xinming - so there are several english names beginning with an x | ||
though it is uncommon | 15:21 | ||
[particle] | xavier is more common | ||
Limbic_Region | right particle - unless you are a BTVS fan | ||
audreyt - stick around long enough for me to nopaste the weird output though | |||
audreyt | sure | ||
Limbic_Region | re-running now | 15:22 | |
svnbot6 | r12988 | kudra++ | This week's summary | 15:24 | |
15:24
hermax_ joined
|
|||
Limbic_Region | xinming - come to think of it, there might even be a site to convert non-english names to english ones since it happens all the tie | 15:26 | |
time | |||
preparing to nopaste | 15:27 | ||
xinming | Limbic_Region: thanks, I'm reading baby names site. :-) | ||
hmm, I really don't know how audreyt find this name... :-/ really good | |||
Limbic_Region | audreyt - not just on parser.hs, several produce this weird output | 15:28 | |
pasteling | "Limbic_Region" at 24.35.57.240 pasted "Weird output when building" (80 lines, 4.3K) at sial.org/pbot/19441 | 15:29 | |
Limbic_Region | xinming - audreyt may have been lucky | ||
looking for female names beginning the the same couple letters | |||
au | |||
wouldn't have produced that many choices | |||
she liked one and went with it | |||
not that it actually happened that way, but it is plausible | |||
audreyt - I believe the output in Parser.hs is the same as nopasted above | 15:30 | ||
xinming | Oh, the name audrey still can be found in baby names. :-) thanks | ||
Limbic_Region | nopasting anyway just in case | 15:31 | |
audreyt | it actually happened that way :) | ||
xinming | I'll also hunt my baby's name this night... :-P | ||
pasteling | "Limbic_Region" at 24.35.57.240 pasted "More weird output while building" (72 lines, 3.4K) at sial.org/pbot/19442 | 15:32 | |
Limbic_Region | xinming - and if the meaning is important - some of the sites allow you to search that way. I think they may not be free though | ||
[particle] | xinming: here's a really cool name visualizer -- babynamewizard.com/namevoyager/lnv0105.html | ||
lambdabot | Title: The Baby Name Wizard: NameVoyager, tinyurl.com/3ln7n | ||
[particle] | it shows popularity over the last 125 years or so | 15:33 | |
Limbic_Region | I had to scrape a lot of geneology, baby name, and census websites for a project a while back | ||
audreyt - AFAICT, those are the only two producing that weird output | 15:34 | ||
svnbot6 | r12989 | audreyt++ | * Allow symbolic evaluation of qualified types. | ||
r12989 | audreyt++ | ::('X::B') | |||
r12990 | audreyt++ | * Fix a warning due to the new isContext slot, | |||
r12990 | audreyt++ | as noticed by Limbic_Region++ | |||
Limbic_Region | and the build finishes and no weird output when running | ||
audreyt - is the ugly hack still in place or did you miraculously find some time to investigate Cabal and/or setup.exe? | 15:35 | ||
audreyt | bth are fixed | ||
no, ENOTIME. maybe tomorrow, but triage takes prec | |||
(and changelogging too, but I was hoping for some help :)) | |||
[particle] | which ghc do i need now? | 15:36 | |
audreyt | 6.4.1 or above | ||
Limbic_Region | audreyt - I tried to help, I really did | ||
audreyt | not changed in this release | ||
svnbot6 | r12991 | audreyt++ | * fix the init warning in Pugs.Parser too. | ||
Limbic_Region | unfortunately those that updated the changelog didn't bother to indicate what commits went with what comments | ||
or even where the last accumulative rev left off | |||
audreyt | I understand | 15:37 | |
[particle]: on win32, last known good build is 0819 if you want to try with GHC 6.6, though GHC 6.4.2 will build pugs fine | |||
Limbic_Region | I know with this project I shouldn't be afraid to screw things up | ||
but... | |||
particle - if you want to be a brave soul and go with GHC 6.6, I can help there | 15:38 | ||
audreyt | *nod* note you can use "svn log ChangeLog" to see where markstos injected the changes | ||
Limbic_Region | though 6.5 from the 19th works out of the box | ||
audreyt | but I need to sleep now :) | ||
see you tomorrow! | |||
Limbic_Region | sleep well | ||
15:42
marmic joined
|
|||
gaal | xinming: "Earnest" maybe? | 15:43 | |
Limbic_Region | . o O ( the importance of being? ) | ||
[particle] | 'abe' can evoke the same imagery :) | 15:44 | |
15:44
justatheory joined
|
|||
gaal | Limbic_Region: it sorta fits with the literal meaning of the original name | 15:47 | |
svnbot6 | r12992 | kudra++ | A quote was missing | ||
audreyt | or "Ernesto" | ||
xinming | gaal: Larry Lai.... :-) Just hope that I'll be as good as larry wall. :-) | 15:48 | |
audreyt | "Ernesto Lai" sounds rather nice | ||
and immediately summons the image of an socialanarcho activitist ;) | 15:49 | ||
nothingmuch | @seen clkao | ||
lambdabot | clkao is in #perl6. I don't know when clkao last spoke. | ||
gaal fnies for the pords | |||
Limbic_Region | all better audreyt | ||
xinming | audreyt: What does Ernesto mean? | 15:51 | |
gaal | ..and starts moving home | ||
I believe "Ernesto" is the Italian equivalent of "earnest" | |||
Limbic_Region | me too | ||
gaal | bbiab& | ||
audreyt | also Spanish, probably | 15:52 | |
as in Ernesto Guevara de la Serna :) | |||
15:54
elmex_ joined
|
|||
Limbic_Region wanders off for the day | 15:56 | ||
TTFN all | |||
[particle] | is it che lai in here, or is it just me? | 15:59 | |
16:02
weinig|bbl is now known as weinig
|
|||
xinming | [particle]: what does che lai mean? :-/ | 16:04 | |
16:17
Psyche^ joined
16:29
Psyche^ is now known as Patterner,
mauke joined
16:31
BooK__ joined,
BooK__ left
|
|||
svnbot6 | r12993 | book++ | typo | 16:31 | |
r12994 | audreyt++ | * More test triaging... | 16:40 | ||
gaal | I don't understand the treatment of unpacking in Subroutine.pod:1222 | ||
my Dog :($fido, $spot) := twodogs(); # one twodog object | |||
the whole section had dealt with sub signatures, now this is a variable declaration | 16:41 | ||
but one that actually only declares the patmatched inner vars | |||
svnbot6 | r12995 | audreyt++ | * Parse for slurpy :(*@x) in Signature literals; not yet | ||
r12995 | audreyt++ | reflected into the real Sig structure, but good enough | |||
r12995 | audreyt++ | to make siglist.t (which btw is getting moved) not fail. | |||
gaal | that's fine, except (a) looks to me like it should be a different section | 16:42 | |
and (b) the syntax is bizzare -- ':($fido, $spot)' elsewhere means something completely different | |||
also: | |||
my Dog $ ($fido, $spot) := twodogs(); # one twodog object | |||
what is this $ <ws> (...) thing? | 16:43 | ||
also also, there are literal tabs there :( | |||
audreyt | declarator takes Param | ||
or Sig in parens | |||
gaal | other than that, I can implement unpacking in the sig parser :) | ||
audreyt | vardecl share syntax with paramdecl | 16:44 | |
entirely | |||
gaal | well, that's a fine unification, but it's sort of not indicated in the text, which just flows associatively from talking about subs to talking about vars. | ||
also, I still don't understand 'Dog $ ($fido, $spot)' | 16:45 | ||
what is this empty $ thing? | |||
ah, that's the disambiguator mentioned above. | |||
it's like haskell '' in (x,y) | |||
as opposed to 'n' in 'n@(x,y)' | 16:46 | ||
audreyt | rofl. | ||
gaal | why don't we write a Haskell emitter? Perl 6 == Haskell | 16:47 | |
audreyt | TimToady might have been overpessimizing here. | ||
my Dog ($x, $y) | |||
is perhaps better written as | |||
gaal | audreyt is a lazy sleeper | ||
audreyt | my (Dog $x, Dog $y) | ||
but I can see the redundant typing | |||
problem is | 16:48 | ||
my Dog (Cat $x) | |||
really doesn't mean much | |||
except maybe we special case it to say that declarator followed by type names | |||
distributes those type names in the signature list that follows. | |||
gaal | my (Dog ::T $x, ::T $y) # groan | ||
audreyt | in which case it needs to be said as such... | ||
gaal: deconstructing binds goes way back | 16:49 | ||
before either perl6 or haskell :) | |||
svnbot6 | r12996 | audreyt++ | * move t/unspecced/siglist.t to t/syntax/signature.t | 16:50 | |
r12996 | audreyt++ | as it's (thank gawd) no longer unspecced. | |||
gaal | Miranda? ML? | ||
audreyt | ML prolly | ||
gaal | ML++ thne | ||
audreyt | 1970s technology | ||
gaal | 1970s++, hella great music | 16:51 | |
um okay, about order. how sensitive are params to the order of: | |||
auxillaries, where-{}, unpackings | 16:52 | ||
it's of course easier to implement parsing this if the order is rigid | |||
also, in full sig-style unpacking, why was () used and not :()? | 16:53 | ||
the latter is longer but would have been more intuitive (I think) | |||
audreyt | it can be | 16:54 | |
()is mere abbrev | |||
You may omit the top variable if you prefix the parentheses with a colon | 16:55 | ||
to indicate a signature. | |||
the intro text is very backwards though. | |||
gaal | well! that does not say that w/o the colon is just an abbreviation | ||
audreyt | I concur | ||
gaal | and it doesn't guarantee that you can always put the colon | ||
audreyt | how about you reorder/refactor/rewrite the entire section and send to p6l :) | ||
audreyt agrees it looks very confusing | 16:56 | ||
gaal | yeah, I'll do that. | ||
audreyt | so, re order. | ||
gaal | is there another place where the param<->vardecl equiantlerhood _is_ discussed? | ||
audreyt | I _think_ where/unpack/trait is unordered. | ||
but you can certainly parse it ordered first... | |||
gaal | and freely intermixed? | 16:57 | |
that's okay, it just means we need a classifier | |||
audreyt | yes, S03 declarator | ||
Variable declarators such as C<my> now take a I<signature> as their | |||
argument. (The syntax of function signatures is described more fully in S06.) | |||
The parentheses around the signature may be omitted for a | |||
simple declaration that declares a single variable, along with its | |||
associated type and traits. Parentheses must always be used when | |||
declaring multiple parameters: | |||
etc. | |||
also note | |||
sub foo :($a,$b) {...} # okay | |||
gaal | data ParamPostMoose = Aux .. | Unpack Sig | Constraint Code | 16:58 | |
hmm ok, but some sigs clearly don't make sense in vardecl | |||
my $x? | |||
audreyt | why not? | 17:00 | |
gaal | what does that mean? | ||
as opposed to my $x! ? | 17:01 | ||
audreyt | sub f { return() }; my $x? := f(); | ||
would work, while | |||
my $x! := f() | |||
would fail | |||
the unification of binding vs callconv is complete, you see :) | 17:02 | ||
gaal | whoa. | ||
audreyt | it's probably the most far-reaching change in the YAPC::Tokyo Protocol :) | 17:03 | |
gaal | *applause* | ||
audreyt | btw I just committed to S03 | ||
+Types occuring between the declarator and the signature are distributed into | |||
+each variable: | |||
+ | |||
+ my Dog ($b, $c); | |||
+ my (Dog $b, Dog $c); # same thing | |||
+ | |||
gaal | well, if that's a declarator-specific amenity there should be a note saying so | 17:04 | |
ie "Differences between param decl and signatures, although we said they're equivalent" | |||
:) | |||
audreyt | thing is, in signature literals | 17:05 | |
there's nowhere to hang that :) | |||
gaal | sure, since s03 is about vars and s06 is about subs :) | ||
audreyt | *nod* | 17:06 | |
also note that you can do | |||
sub f ($x is context) { ... } | |||
my $x is copy := ... | 17:07 | ||
which follows quite easily from the unification | |||
gaal notes one thing you can't do is n+k patterns, and isn't seen complaining just yet | 17:08 | ||
audreyt | sub f (1+$x) { ... } | ||
gaal | suuure | ||
wolverian | please don't. :) | ||
audreyt | if we do that, we might as well do "$x is free". | ||
and then unify using backtracking and introduce first-class end goals. | |||
gaal | $x is up(grabs) | 17:09 | |
audreyt | reading Curry conference proceedings is a dangerous way to fall asleep... | ||
obra | heh | ||
bad dreasms? | |||
audreyt | mad dreams, most likely | ||
(Curry is Haskell extended to express Prolog) | 17:10 | ||
gaal | a bad dreasms is when you can't fall asleep because your lover keeps texting you dirty messages? | ||
audreyt | gaal++ | ||
bbl tomorrow :) | 17:11 | ||
gaal | sleep audreyt `seq` goodMorning audreyty | 17:12 | |
nothingmuch | @pl sleep audreyt `seq` goodMorning audreyty | 17:14 | |
lambdabot | sleep audreyt `seq` goodMorning audreyty | ||
gaal | being strict about audreyt's sleep schedule is pointless | 17:15 | |
nothingmuch | @hg a -> b -> c -> ( b a , c a ) | ||
lambdabot | Maybe you meant: . bf ghc id msg pl v wn | ||
nothingmuch | heh | ||
gaal | but, nm, you mean '@hoogle' | 17:16 | |
nothingmuch | @hoogle a -> b -> c -> ( b a , c a ) | 17:17 | |
lambdabot | No matches, try a more general search | ||
gaal | I don't see how that can be a valid type though | ||
nothingmuch | yes, i'm stupid | ||
@hoogle a -> (a -> b) -> ( a -> c ) -> ( b, c ) | |||
lambdabot | No matches, try a more general search | ||
nothingmuch | @pl foo audreyt = sleep audreyt `seq` goodMorning audreyt | 17:18 | |
lambdabot | foo = liftM2 seq sleep goodMorning | ||
nothingmuch | ah | ||
gaal | heh | ||
nothingmuch | that's what i was trying to do | ||
17:18
jkva joined
|
|||
gaal | even \bot sings audreyt lullabies | 17:19 | |
nothingmuch | @t liftM2 | ||
lambdabot | Maybe you meant: tell time tiny-url todo todo-add todo-delete topic-cons topic-init topic-null topic-snoc topic-tail topic-tell type . v | ||
nothingmuch | @type liftM2 | ||
lambdabot | forall r (m :: * -> *) a2 a1. (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r | ||
nothingmuch | i don't grok that at *all* | 17:20 | |
gaal | nothingmuch: | ||
liftM2 f x y = do | 17:21 | ||
xv <- x | |||
yv <- y | |||
return f xv yv | |||
nothingmuch | ah | ||
gaal | er, return $ ... | ||
nothingmuch | yep | ||
mauke | @pl \x -> f x `c` g x | 17:22 | |
lambdabot | liftM2 c f g | ||
mauke | oh god, the function monad | ||
gaal | !grok | ||
mauke: we actually generate liftMn functions for various values of n, up to 12 I think :-) | 17:23 | ||
nothingmuch | why did lambdabot decide that `seq` was mondaic in this case? it already knows it? | ||
gaal | because the standard libs come with up to liftM5 | ||
17:24
Aankhen`` joined
|
|||
gaal | nothingmuch: I don't rightly know! but there is much to be studied in the plugin dir | 17:24 | |
nothingmuch shies away | |||
meta model stuff is getting priority time slices | |||
xerox | lambdabot decided what? | 17:25 | |
gaal | yeah, and i should get back to Syn editing and then parsing unpacking sigs! | ||
hm, mauke's @pl shows perhaps it didn't? | |||
nothingmuch | gaal++ | ||
gaal: yes, that's why i asked | |||
gaal | bbiab :) | ||
xerox | nothingmuch: it uses the ((->) a) monad, aka Reader. | 17:26 | |
nothingmuch | ah | ||
xerox | nothingmuch: it doesn't mean that the code is monadic in the IO sense. | ||
nothingmuch | i know of other monads | ||
but the notion that liftm2 is sequential | |||
in that there is a binding | 17:27 | ||
xerox | ?type liftM2 | ||
lambdabot | forall r (m :: * -> *) a2 a1. (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r | ||
nothingmuch | whereas f x `c` g x is not necessarily so is peculiar | ||
xerox | Expanded for m = (e ->) becomes: (a -> b -> c) -> (e -> a) -> (e -> b) -> (e -> c). | ||
@djinn (a -> b -> c) -> (e -> a) -> (e -> b) -> (e -> c). | 17:28 | ||
lambdabot | Cannot parse command | ||
xerox | @djinn (a -> b -> c) -> (e -> a) -> (e -> b) -> (e -> c) | ||
lambdabot | f a b c d = a (b d) (c d) | ||
xerox | @. pl djinn (a -> b -> c) -> (e -> a) -> (e -> b) -> (e -> c) | ||
lambdabot | f = liftM2 | ||
xerox | :D | ||
nothingmuch | so how is the reader monad implied? | ||
@i | |||
lambdabot | Maybe you meant: id index instances instances-importing . v | ||
xerox | As soon as you pass a function as the second and third argument, you're done. | ||
nothingmuch | @instances ((->) a) | ||
? | |||
lambdabot | Not a class! Perhaps you need to import the module that defines it? Try @help instances-importing. | ||
xerox | ?type \f -> liftM2 f (+1) | 17:29 | |
lambdabot | forall a2 r a. (Num a) => (a -> a2 -> r) -> (a -> a2) -> a -> r | ||
xerox | Ta-da. | ||
nothingmuch | brb | ||
xerox | @instances Monad | ||
lambdabot | ((->) r), ArrowMonad a, Cont r, ContT r m, Either e, ErrorT e m, IO, Maybe, RWS r w s, RWST r w s m, Reader r, ReaderT r m, ST s, State s, StateT s m, Writer w, WriterT w m, [] | ||
xerox | ?type \f -> liftM2 f (undefined :: IO a) | 17:30 | |
lambdabot | forall a2 r a. (a -> a2 -> r) -> IO a2 -> IO r | ||
17:37
mako132_ joined
17:43
mako132_ joined,
ruz joined
17:58
DaGo joined
18:08
khisanth_ joined
18:10
khisanth_ is now known as Khisanth
|
|||
gaal | English is hard, let's go shopping | 18:11 | |
(p6-l query up) | |||
18:14
traecer left
18:20
axarob joined,
axarob left
18:22
salty-horse joined
18:40
jkva left
|
|||
salty-horse | are parameter types implemented yet? | 18:53 | |
gaal | salty-horse: not yet, working on it. | 18:54 | |
salty-horse | is anything in the repository yet? source I can look at? | 18:55 | |
gaal | the groundwork is parsing signatures into newVal objects: | 18:56 | |
?eval :(Moose $x) | |||
18:56
evalbot_12968 is now known as evalbot_12996
|
|||
evalbot_12996 | CCall "perl" CaptMeth {c_invocant = VPure (SigSubSingle {s_requiredPositionalCount = 1, s_requiredNames = {"x"}, s_positionalList = [MkParam {p_variable = "$x", p_types = [(mkType "Moose")], p_constraints = [], p_unpacking = Nothing, p_default = <Param.Default>, p_label = "x", p_slots = {}, p_hasAccess = AccessRO, p_isRef = False, p_isContext = False, p_isLazy = False}], s_namedSet = {}, s_slurpyScalarList = [], s_slurpyArray = Nothing, s_slurpyHas | 18:56 | |
gaal | ignore the CCall for now, look at SigSubSingle: | 18:57 | |
salty-horse | i'm trying to avert my eyes | ||
gaal | there is one Param in the positional list, and the p_types field is just "mkType 'Moose'" | 18:58 | |
this looks better prettier-printed :) | |||
TreyHarris | gaal: *clap* I like it | ||
gaal | (btw, see that p_unpacking = Nothing? give me ten minutes :) | ||
so, there are various subparsers that already work, for example arbitrary auxillaries: | 18:59 | ||
?eval :($x is rw is ref is illegible) | 19:00 | ||
evalbot_12996 | Error: unexpected "i" expecting comment, "," or ")" | ||
gaal | heh, hasn't updated | ||
?eval :($x! is rw is ref is illegible) | |||
evalbot_12996 | CCall "perl" CaptMeth {c_invocant = VPure (SigSubSingle {s_requiredPositionalCount = 1, s_requiredNames = {"x"}, s_positionalList = [MkParam {p_variable = "$x", p_types = [], p_constraints = [], p_unpacking = Nothing, p_default = <Param.Default>, p_label = "x", p_slots = {"illegible":=VPure (MkBit True)}, p_hasAccess = AccessRW, p_isRef = True, p_isContext = False, p_isLazy = False}], s_namedSet = {}, s_slurpyScalarList = [], s_slurpyArray = Nothin | ||
TreyHarris | gaal: I may be blind, but I've stared at evalbot's output for a bit and I can't see where the first two {'s terminate, and it looks like "False}]" terminates a { that doesn't exist within the [] | ||
gaal | TreyHarris: copy to vim and 'setf haskell' :) | ||
(and thanks! :) | 19:01 | ||
TreyHarris | heh, ok | ||
gaal | salty-horse: so, what I was asking audreyt earlier was where the ::T in 'Dog ::T $fido' goes | ||
and the answer is that probably Pugs.Val.Code.Param needs a p_tyvar field | 19:02 | ||
salty-horse: please add it :) | |||
got a commit bit? | |||
salty-horse | yes. but i want to try and understand all this first :) | 19:03 | |
i am very new to haskell, and understand very little of pugs internals :/ | 19:04 | ||
gaal | it's much easier to start by looking at src/Pugs/Val/Code.hs | ||
of if you want the big picture of our new AST, src/Pugs/AST/CapInternals.hs | |||
19:05
weinig is now known as weinig|bbl
|
|||
salty-horse | what does ":(Expression)" mean in the pugs prompt? I can't find it in :h (newbie question) | 19:06 | |
gaal | CapInternals.hs is compilable, but doesn't reallt run yet. we're picking out parts of it and vivifying them into the old runcore, gradually | ||
ah, :($x) is a Signature constructor | |||
doesn't have anything to do with the prompt | |||
just an unfortunate coincidence | 19:07 | ||
19:07
markstos joined
|
|||
gaal | audreyt mentioned en passant what's the best way to explain this: | 19:07 | |
consider: | |||
sub make_car ($model, $doors? = 4, $color? = 'black') { ... } | 19:08 | ||
that's actually: | |||
sub make_car :($model, $doors? = 4, $color? = 'black') { ... } | |||
that is, this signature is a first-class object. and I can do | |||
my $sig = :($model, $doors? = 4, $color? = 'black') | 19:09 | ||
or presumably something like &make_car.signature | |||
and the introspection goes from there. | |||
TreyHarris | would sub make_car $sig { ... } be valid? | ||
assuming $sig was set in a BEGIN block or otherwise in time? | 19:10 | ||
gaal | not sure - not sure how much sense it makes. (because, what's the body?) | ||
if it's a literal ..., maybe | |||
TreyHarris | ok, so i slept on it and I think I've got a working idea of how shallow cloning and 'is clone' should work. But it requires two things that aren't in the synopses (yet): | 19:13 | |
1) right now 'has @.foo = 1..3' and 'has $.foo = 1..3' do precisely the same things, and elsewhere in the class you can refer to the attribute declared either way as "$.foo" or "@.foo"--it just imposes a different context if it matters in use. I think that it also makes a difference in cloning: | 19:14 | ||
has @.foo = 1..3; # $obj.clone will get a new array | |||
has $.foo = 1..3; # $obj.clone will get the same array | |||
19:14
Aankh|Clone joined
|
|||
salty-horse | gaal, how do you suggest pretty-printing the pugs command line's output? | 19:15 | |
gaal | you mean in evalbot? I don't :( | ||
but that particular one, with the haskell dump? | |||
./pugs -e ':(Moo $x).yaml.say' | 19:16 | ||
salty-horse | the haskell dump. | ||
TreyHarris | 2) there needs to be a specifier for (private-only?) attributes that make no sense to be shared among clones. for example, "has %!private_instance_cache is reallyprivate". those attributes shouldn't be assigned to the clone, but should be cloned in the clone. i don't know what the right word for it is, obviously not 'reallyprivate' :-) | ||
gaal | ah actually no, that won't work :( | ||
so just copy it to vim, turn on syntax hilighting, and... good luck :) | 19:17 | ||
TreyHarris: not responding since I don't know about this stuff, I'm not ignoring you :) | |||
TreyHarris | well, i was hoping nothingmuch was back, he said 'brb' 100 minutes ago or so :-) | 19:18 | |
gaal | he meant bwb # be wrong back | ||
aw, that was awful, sorry | |||
TreyHarris | lol | ||
gaal | it's a little known fact that 'bbl' means be back left | 19:19 | |
ok I'd better stop | |||
salty-horse | be blatantly late | 19:21 | |
TreyHarris | gaal: however, seeing whether my intuition is right would be helped if i could prototype some code, and your recent diffs look like they're moving in that direction. will user-defined param traits be implementable soon? | ||
nothingmuch | TreyHarris: i am | ||
svnbot6 | r12997 | gaal++ | * fix hintless required params, so this works again: | 19:22 | |
gaal | you mean actually callable ones? hmm, why not, go ahead and hack them in :) | ||
svnbot6 | r12997 | gaal++ | :($x is rw) | ||
nothingmuch | gaal: yes, while you're in the wabe | ||
gaal gyres | |||
gaal gimbles | |||
nothingmuch | =) | 19:23 | |
TreyHarris | gaal: my haskell-fu is still somewhere between nil and nonexistant. i meant being able to write 'roll clone { multi sub trait_auxiliary:is(clone $trait, Any $container, &block?) {... } }" and have it actually work | 19:24 | |
s/roll/role | |||
nothingmuch | it's not nil, it's Nothing | ||
that's the first step ;-) | |||
gaal | yes, because at least that's Maybe | ||
Haskell is an optimistic language. | 19:25 | ||
TreyHarris | nothingmuch: anyway, look in your scrollback at my comments starting at :13 after this hour. does that seem sane to you? | ||
19:25
perlbot joined
|
|||
gaal | argh how do I get a PureSig from a wrapped Val? | 19:25 | |
I don't wanna import VPure :( | 19:26 | ||
nothingmuch | TreyHarris: yes, 5'0 f6r 5t | ||
clone should be in the same domain as === | |||
wheras copy is more like eqv | |||
and must be user code | |||
i think | |||
clone should be there for the moral equivalent of bless { %$obj }; | 19:27 | ||
and not for high level duplication | |||
for that we need an optional user role | |||
TreyHarris is still trying to figure out "5'0 f6r 5t" | 19:29 | ||
nothingmuch | that was my keyboard getting messed up | 19:30 | |
i think it was my numlock key | |||
i couldn't type for a short while | |||
but the numlock was off | |||
i toggled it anyway | |||
and it went back to normal | |||
TreyHarris | ah, ok. so is there actually a distinction between 'is copy' and 'is clone'? for value (~~ non mutable) types, 'is copy' performs the useful service of letting you do mutating methods against them (which produce a new object). but for non-value (~~ mutable) types, it doesn't do anything but let you do anything beyond the default 'is ro', except to reassign the param another object, which seems like a rather unusual need. so maybe 'is clone' doesn't exist | 19:35 | |
whoops, i'm sure that got cut off. but where? one of these days I have to figure out how to make irssi not let me type more than the server allows | 19:36 | ||
gaal | 'but where' - see irc.pugscode.org | 19:43 | |
'figure out how to' | 19:44 | ||
nothingmuch | TreyHarris: i think maybe 'is copy' is for value types | ||
is clone is for value types + 1 layer | |||
19:44
Trey2 joined
|
|||
nothingmuch | i was being confusing, i think | 19:44 | |
TreyHarris | ah, ok. so is there actually a distinction between 'is copy' and 'is clone'? for value (~~ non mutable) types, 'is copy' performs the useful service of letting you do mutating methods against them (which produce a new object). but for non-value (~~ mutable) types, it doesn't do anything but let you do anything beyond the default 'is ro', except to reassign the param another object, which seems like a rather unusual need. so maybe 'is clone' doesn't ... | ||
... exist, and 'is copy' always clones (falling back for efficiency's sake to plain old cow semantics when the param is of a value type)? | |||
nothingmuch | i think not | 19:45 | |
the distinction is... unnecessary | |||
nothingmuch ponders | |||
intuitively: | |||
copy means you can ruin it without worry | |||
clone means it's another one of those | |||
TreyHarris | yay irssi+perl. (that ... ... but was done automatically) | ||
nothingmuch | yes | ||
there's a script for that =) | 19:46 | ||
TreyHarris | oh. lol | ||
nothingmuch | i forget what it's called | ||
irssi++ | |||
anymoose | |||
wolverian | splitlong | ||
nothingmuch | i'm not sure what my spider sense is telling me | ||
it's saying "maybe copy is a deep clone" | |||
but it's also saying "no no, deep clones should *always* be defined by the actual class - they can't be automated" | 19:47 | ||
TreyHarris | right, because deep clones can easily cause infinite recursion | ||
nothingmuch | not only that | 19:48 | |
TreyHarris | without help as to the semantics of what an attribute containing another instance of your class might mean | ||
nothingmuch | we tend to have a notion of "attached" objects in non purely functional languages | ||
objects which manage (or don't manage) their own registration in a parent object of some sort | |||
it's a simple way to get this stuff done easily | 19:49 | ||
wheras in haskell you need to use something like thezipper | |||
or do everything from the parent | |||
when you clone this way | 19:50 | ||
and it's a deep clone | |||
19:50
weinig|bbl is now known as weinig,
Limbic_Region joined
|
|||
nothingmuch | then you clone the entire hierarchy | 19:50 | |
when you usually mean "clone and return a detached copy" | |||
or "clone and attach to the parent with a different key" | |||
or something of the sort | |||
this is where cloning becomes strictly a high level operation | |||
and there's no way to do this sanely | |||
19:51
weinig is now known as weinig|food
|
|||
TreyHarris | yes, but i'm just talking about what the Any::clone method should do. i suspect, as always, most perl programmers will not implement a Cloneable role or override .clone, so .clone should do something a little bit more--but as little more as is sanely possible--than plain shallow cloning | 19:51 | |
nothingmuch | well | 19:52 | |
that's exactly my point... they should be separate | 19:53 | ||
you shouldn't override clone | |||
clone should simply have a usable meaning | |||
if you want to a Clonable role | |||
then the api is probably going to let clone take an argument which says how it should be cloned | |||
Storable::dclone is also useful though | |||
for when you *do* want *every* related object to be duplicated | |||
i'm thinking .clone is always shallow | 19:54 | ||
and .copy is always dclone | |||
and something in the middle | |||
a user method | |||
is a "real" clone | |||
TreyHarris | well, let me give an example. say we have "class Point { has $.x, has $.y }". it would be very natural to write "my $sameHeight = $p but { .x = 0 }". assuming but clones, this works fine. | 19:56 | |
salty-horse | ?eval :(dog $fido = 3) | ||
19:56
evalbot_12996 is now known as evalbot_12997
|
|||
evalbot_12997 | Error: unexpected "=" expecting comment, trait, "," or ")" | 19:56 | |
salty-horse | ?eval :(dog $fido= 3) | ||
evalbot_12997 | CCall "perl" CaptMeth {c_invocant = VPure (SigSubSingle {s_requiredPositionalCount = 0, s_requiredNames = {}, s_positionalList = [MkParam {p_variable = "$fido", p_types = [(mkType "dog")], p_constraints = [], p_unpacking = Nothing, p_default = <Param.Default>, p_label = "fido", p_slots = {}, p_hasAccess = AccessRO, p_isRef = False, p_isContext = False, p_isLazy = False}], s_namedSet = {}, s_slurpyScalarList = [], s_slurpyArray = Nothing, s_slurpyHa | ||
gaal | salty-horse: will fix | 19:57 | |
salty-horse | salty-horse will fix? | ||
TreyHarris | but then it gets reimplemented as "class Point { has SpaceLocator $.coord; method x { ... } method y { ... } }". now that same but code is going to cause $p to be modified, because x no refers indirectly to $.coord, which is an object. | ||
gaal | you're welcome to, but I meant I'll fix :) | ||
TreyHarris | s/x no refers/.x now refers/ | ||
nothingmuch | TreyHarris: preecisely | 19:58 | |
that's the issue with .clone | |||
the only use it has is as a convenience methods | |||
method | |||
when you can be reasonably sure of the semantics of the instance structure | |||
however | 19:59 | ||
let's for a minute assume that we can know whether or not a value is mutable by means of introspection | |||
TreyHarris | audreyt says it will be via ?(.META.mutable) | 20:00 | |
nothingmuch | okay | 20:01 | |
.clone need never both copying mutables, right? | |||
1.clone is a noop; | |||
since e.g. ++ is a container method | |||
you can't say 1++ | |||
wolverian | you meant immutables right? | ||
nothingmuch | err | ||
yes | |||
sorry, kind of distracted | 20:02 | ||
TreyHarris | um noooooo, i think not. i think 1.clone is equivalent to Int.new(1) | ||
because "0 but True" should not change the truth of 0 from then on | |||
nothingmuch | it can't change | ||
0 but True doesn't actually change 0 | 20:03 | ||
it wraps it in something that overrides truth | |||
TreyHarris | right, it changes a clone of 0 | ||
nothingmuch | and delegates everything else | ||
TreyHarris | right | ||
nothingmuch | my understanding is that immutables never change at all | ||
and thus there is no point in cloning them ;-) | |||
anymoose | 20:04 | ||
TreyHarris | right. there's a switch somewhere that causes different behavior based on $obj.META.mutable. it can be in clone, or it can be in but, but it has to be somewhere. | ||
this is what i've been cogitating on | |||
nothingmuch | by this rationale cloning only makes sense if $x !=== $x.clone is always true | ||
your fine line is in @.x etc | 20:05 | ||
@x === @y; | |||
lambdabot | Maybe you meant: . v | ||
nothingmuch | heh | ||
TreyHarris | lambdabot: no, he didn't. ;-) | ||
nothingmuch | wait, let me read a small bit | ||
okay | 20:06 | ||
@x.clone !=== @y.clone | |||
lambdabot | Unknown command, try @list | ||
nothingmuch | aghg | ||
i'm really confused | |||
@x.clone !=== @x; | |||
lambdabot | Unknown command, try @list | ||
nothingmuch | because you can edit @x.clone.[1] without altering @x | ||
TreyHarris | but @x.clone eqv @x? | 20:07 | |
nothingmuch | yes | ||
we are in agreement that @x.clone.[1] === @x[1] right | |||
5? | |||
TreyHarris | yes | ||
nothingmuch | okay | ||
20:07
Aankh|Clone is now known as Aankhen``
|
|||
nothingmuch | my conjecture is that what we are searching for | 20:08 | |
is to declare $.coord as a "part" of the point | |||
so that it's === | |||
and it'll be cloned too | |||
TreyHarris | yes. i was thinking "has SpaceLocator $.coord is value" | ||
nothingmuch | yes | ||
okies | |||
why did i miss that =/ | 20:09 | ||
i spent 15 minutes beating around the bush and juggling two conversations to restate something you already knew | |||
TreyHarris | no, it's helpful | ||
nothingmuch | anymoose, we already have 'is value' | ||
is ro | |||
i think | |||
it basically says that you can never change $.coord | |||
within the point object | 20:10 | ||
$point.coord = foo never works | |||
it's more like an organizational layout | |||
likewise $foo = $point.coord; | |||
$foo.x = 1; | |||
doesn't change $point.coord.x | |||
maybe that's the diff between is ro and is value? | 20:12 | ||
TreyHarris | from outside the class, yes | ||
nothingmuch | also, can you is value anything | ||
is it recursive? | |||
TreyHarris | but inside the class, you can alter coord | ||
nothingmuch | if it's deep then $point.coord.x = 1; | ||
can't really work | |||
hmm | 20:13 | ||
or maybe it can =/ | |||
$foo = $point.coord; | |||
$foo !=== $point.coord; # true? | |||
TreyHarris | hmm... what "is value" does is say, "this attribute is mutable, but treat it from the outside of the class as if it were immutable" | 20:14 | |
nothingmuch | ah | ||
so only to the outside | |||
yes, that makes sense | |||
TreyHarris | right | ||
nothingmuch | can two points share a coord? | 20:15 | |
or is it implicitly shallow cloned on assignment | |||
TreyHarris | no... or not sanely. if they did, they'd be the same point | ||
i think it is on assignment, but not on binding | |||
20:15
b_jonas joined
|
|||
nothingmuch | hmm | 20:16 | |
TreyHarris | so assuming "my Point ($x, $y); $x .= new(3,3);" we're agreed that "$y = $x" and "$y = $x.clone" must be different, yes? | 20:17 | |
nothingmuch | i think so | 20:18 | |
$y = $x is a shallow thing | |||
since the point is by ref | |||
i think i sort of got it | |||
Point can say 'is value' | |||
on itself | |||
TreyHarris | yes, but that's what got me into trouble yesterday.... it's helpful to think of "by ref", but references are gone | ||
nothingmuch | if Point is value | 20:19 | |
then $y = $x; is implicitly like $y = $x.clone; | |||
i think | |||
TreyHarris | yes, if it said "is value" on itself, then "$y = $x" and "$y = $x.clone" would be the same | ||
nothingmuch | that is the byrefness i mean | ||
i don't think it's useful for a class to say that it's 'is value' and still be mutable | 20:20 | ||
TreyHarris | then you'd do "$y = \$x" if you wanted to do reffy things | ||
nothingmuch | well | ||
$p1.x = 4; | |||
err | |||
$p2 = $p1; $p1.x = 4; $p2.x ? | |||
TreyHarris | no, i think is value on a class means that having a mutator is an error | 20:21 | |
nothingmuch | okay | ||
i was thinking that if a class is value-ish | |||
'autocloning' if you will | |||
then any assingment on a member | |||
is an implicit clone-and-overlay | |||
like a haskell record | 20:22 | ||
TreyHarris | ok... that works too | ||
nothingmuch | hmm | 20:23 | |
TreyHarris | then "$p1.x = 4" is equivalent to "$p1 = $p1.clone(:x(4))" | ||
nothingmuch | how does this relate to @x et al? | ||
TreyHarris | well, for non-value types, an attribute in "has @.xs" should be cloned into a new array @.xs with the same elements | ||
20:24
ruz joined
|
|||
TreyHarris | but an attribute in "has $.xs", even if an array, will be shared after cloning | 20:24 | |
unless the *attribute* is marked "is value" | |||
nothingmuch | @x is unvalue; # ;-) | ||
lambdabot | Maybe you meant: . v | ||
nothingmuch | lambdabot: @stfu | 20:25 | |
lambdabot | Unknown command, try @list | ||
TreyHarris | no.... that's what i want to avoid, the degenerate (in both senses of the word) behavior of a clone's internal behavior causing its preceptor to change | ||
nothingmuch | uh | 20:26 | |
let me parse that | |||
TreyHarris | let me rephrase | ||
if a not-all-that-sophisticated perl programmer writes an ordinary C-struct-y class as would be obvious, if it is cloned, dwimmery should result such that they should act as separate structs. making a call on the clone shouldn't result in the preceptor (the object it was cloned from) changing | 20:28 | ||
nothingmuch | yes | ||
agreed | |||
however, if a slightly-sophisticated perl programmer wnats to use the @ sigil | |||
and yet have it shared between clones | 20:29 | ||
then... do we give that programmer the option? | |||
TreyHarris | i don't think so, because "has @.x" and "has $.x" at this point is defined as having no difference. it's an error to have both | ||
so, for the sophisticates, we tell them to do "has $.array", which wouldn't occur to the novitiates | 20:30 | ||
nothingmuch | ah | ||
hmm | |||
TreyHarris | i think there is also a "is transient", which has at least two effects: one, when the object is stored persistently, the attribute so marked is skipped. two, *either* a) in cloning, the attribute is considered 'is value' and is cloned, or b) in cloning, the attribute is not cloned at all. i don't know which is more useful | 20:34 | |
has $!scratchpad is transient; | 20:35 | ||
nothingmuch | i think the class of scratchpad defines it's cloned-or-uininitialized semantics | ||
but yes | |||
these are important, too | |||
TreyHarris | nothingmuch: not necessarily. Int's class has nothing to say about "has Int $!times_called is transient" | 20:37 | |
nothingmuch | hmm | 20:38 | |
i am actually pondering this in an unrelated way | |||
thinking about attribute grammars | |||
and slots | |||
in terms of the metamodel stuff | |||
external vs. internal slots | |||
and how they are optimized for cases of cloning etc | 20:39 | ||
marcus_ | I think slots should be renamed sluts | 20:40 | |
would make conversation much more entertaining | 20:41 | ||
TreyHarris | i think classes could be marked 'is transient' too, just as they could be marked 'is value'. for example, wouldn't a filehandle be transient? storing it persistently is worthless. if so, that would argue for cloning behavior to be to consider "is transient" the same as "is value": clone it since it's useful right now. | 20:43 | |
gaal | and 'is transvestite'? a regular Pugsy Horror Picture Show | 20:44 | |
nothingmuch | TreyHarris: i think it's an error | ||
not a silent "skip" to store a filehandle | |||
you need to make a symbolic reference on dump | 20:45 | ||
and resolve it on load | |||
TreyHarris | so you can't store an object that has a filehandle attribute? | ||
nothingmuch | not sanely | 20:46 | |
when you load it | |||
does it reopen the file? | |||
does it die with 'can't call method read on undefined value'? | |||
these are issues with high level serialization | 20:47 | ||
TreyHarris | i'm thinking it's exactly the same as "$!scratchpad"... the object must be able to deal with the possibility that at any time $!scratchpad may disappear. | ||
so if you mark the filehandle attribute "is transient", then it isn't an error to store it, it will just be skipped. if you don't, it is an error to store it. | 20:48 | ||
$!scratchpad, on the other hand, could have been stored, but you've told Perl not to | 20:49 | ||
20:49
justatheory joined
|
|||
nothingmuch | oh | 20:50 | |
if you explicitly say that the FH is transient | |||
then yes | |||
it's OK | |||
TreyHarris | ok... then you're advocating 'transient' being an ok trait for attributes, but not for classes? | 20:51 | |
bbut 'value' is ok for both? | 20:52 | ||
nothingmuch | hmm | ||
20:52
soisoisoi joined
|
|||
nothingmuch | well | 20:52 | |
gaal | zzZ & | ||
nothingmuch | i think we should allow transient on classes | ||
Int might not say it is transiet | |||
ient | |||
but SIllyCache might | |||
pasteling | "TreyHarris" at 216.254.17.198 pasted "Somebody try this, do you kill pugs as well?" (12 lines, 331B) at sial.org/pbot/19443 | 20:53 | |
TreyHarris | and "class Filehandle is transient {...} class SillyThing { has Filehandle $.moose; ...} my SillyThing $obj .= new", would storing $obj be an error unless you changed it to "has Filehandle $.moose is transient"? | 20:55 | |
nothingmuch | class Filehandle should't be transient | 20:56 | |
it wouldn't | |||
think of u | |||
err | |||
a thingy is transient | |||
20:56
weinig|food is now known as weinig
|
|||
nothingmuch | if it's marked as such by it's container | 20:57 | |
or it's class | |||
or both | |||
TreyHarris | why shouldn't a filehandle be transient? | 20:58 | |
nothingmuch | because that would silence it's errors | ||
sometimes people might accidentally serialize a filehandle | |||
and they should get an error | 20:59 | ||
and say "oh right, this should be transient" | |||
or "oh crap, i forgot it has a filehandle, i can't store that" | |||
20:59
justatheory joined
|
|||
TreyHarris | sounds like you're arguing that classes should *not* be marked transient | 21:00 | |
21:04
vytautas joined
|
|||
TreyHarris | can someone please try to replicate the above paste? | 21:05 | |
nothingmuch | no | 21:06 | |
i'm trying to argue that classes should be able to be marked as transient | |||
wolverian | argh. why does perldoc mess up '=head2 C<foo> bar' ? | ||
nothingmuch | but that only very specific classes should be allowed to do that | ||
TreyHarris | maybe it's an error to create an attribute using a transient class that is not marked transient itself? | 21:07 | |
nothingmuch | then you have to type it twice | 21:09 | |
my point is, by convention mark the attr as transient, not the class | |||
but to omit typing 'is transient' all the time | |||
classes which are obviously transient could be marked as such | 21:10 | ||
21:10
crem joined
|
|||
nothingmuch | e.g. debugging aids, memoziation tables, etc | 21:10 | |
TreyHarris | but filehandle is not "obviously transient"... because people might be tempted to store it? so instead, it should... what... override .store to throw an exception? | 21:11 | |
sorry, i'm confused... i can tell you have a clear picture, i just can't see what it is :-) | |||
nothingmuch | well | 21:13 | |
my $email = ...; | |||
whatever | |||
let's say you are storing that | |||
and the impl detail is that $email is lazy loaded from a file | |||
the right behavior is to not try to store the file handle | |||
but instead slurp everything from it | |||
and then serialize the structure | |||
of the email | |||
the actual text | 21:14 | ||
and then when it's load it | |||
then it's just loaded as a fully delazified object | |||
that will not use the filehandle | |||
salty-horse | question: when i "eval :(dog $fido)" i get the internal representation. Param.Default is comprised of DExp and Exp, but is printed as <Param.Default> (in Pugs.Val.Code) - how can I inspect its contents? | ||
TreyHarris | ?eval :(dog $fido) | 21:16 | |
evalbot_12997 | CCall "perl" CaptMeth {c_invocant = VPure (SigSubSingle {s_requiredPositionalCount = 1, s_requiredNames = {"fido"}, s_positionalList = [MkParam {p_variable = "$fido", p_types = [(mkType "dog")], p_constraints = [], p_unpacking = Nothing, p_default = <Param.Default>, p_label = "fido", p_slots = {}, p_hasAccess = AccessRO, p_isRef = False, p_isContext = False, p_isLazy = False}], s_namedSet = {}, s_slurpyScalarList = [], s_slurpyArray = Nothing, s_sl | ||
TreyHarris | what contents do you want? | ||
?eval :(dog $fido).perl | |||
evalbot_12997 | "CCall \"perl\" CaptMeth \{c_invocant = VPure (SigSubSingle \{s_requiredPositionalCount = 1, s_requiredNames = \{\"fido\"}, s_positionalList = [MkParam \{p_variable = \"\$fido\", p_types = [(mkType \"dog\")], p_constraints = [], p_unpacking = Nothing, p_default = <Param.Default>, p_label = \"fido\", p_slots = \{}, p_hasAccess = AccessRO, p_isRef = False, p_isContext = False, p_isLazy = False}], s_namedSet = \{}, s_slurpyScalarList = [], s_slurpyArr | ||
TreyHarris | hrm | ||
?eval (:(dog $fido)).perl | |||
evalbot_12997 | Error: unexpected ")" expecting comment, trait, "," or end of input | ||
salty-horse | <Param.Default> stores "rDefault" and "isOptional" | ||
TreyHarris | ?eval my $sig = :(dog $fido); $sig.perl | ||
evalbot_12997 | "\\VPure (SigSubSingle \{s_requiredPositionalCount = 1, s_requiredNames = \{\"fido\"}, s_positionalList = [MkParam \{p_variable = \"\$fido\", p_types = [(mkType \"dog\")], p_constraints = [], p_unpacking = Nothing, p_default = <Param.Default>, p_label = \"fido\", p_slots = \{}, p_hasAccess = AccessRO, p_isRef = False, p_isContext = False, p_isLazy = False}], s_namedSet = \{}, s_slurpyScalarList = [], s_slurpyArray = Nothing, s_slurpyHash = Nothing, | ||
salty-horse | see Pugs/Parser.hs:1378 | 21:17 | |
TreyHarris | ?eval my $sig = :(dog $fido); $sig.p_default | ||
evalbot_12997 | Error: No compatible subroutine found: "&p_default" | ||
salty-horse | it's inside a parameter's | 21:18 | |
TreyHarris | salty-horse: dunno, i'm illiterate at that level | ||
salty-horse | (oh wait, it's not) | ||
21:18
buetow joined
|
|||
salty-horse | hmm | 21:18 | |
why i'm asking: colabti.de/irclogger/irclogger_log/...=694#l1147 | |||
lambdabot | Title: #perl6 2006-09-03,Sun, tinyurl.com/epuwm | 21:19 | |
21:19
DaGo joined
|
|||
salty-horse | i found out that commenting "lookAhead (char '=') >> return True" in isOptional (Pugs/Parser.h) does not give the error. | 21:20 | |
but it's important to check for the trailing "=", so I can't just remove it | |||
TreyHarris | salty-horse: i don't think there are any lambdacamels on at the moment, unless nothingmuch has been keeping track of this stuff... | 21:21 | |
salty-horse | TreyHarris, i'll just leave gaal a message then. thanks | 21:22 | |
21:23
weinig is now known as weinig|bbl
|
|||
svnbot6 | r12998 | fglock++ | * v6 | 21:24 | |
r12998 | fglock++ | - Expression.pm is reentrant again | |||
r12998 | fglock++ | - unified rule parser with Pugs-Compiler-Rule | |||
r12998 | fglock++ | - other minor fixes | |||
r12998 | fglock++ | * Pugs-Compiler-Rule | |||
r12998 | fglock++ | - faster rule parser: hash dispatch, non-backtracking, | |||
r12998 | fglock++ | converted several tail-calls into quantifiers. | |||
r12998 | fglock++ | - the rule parser is now bootstrapped with v6.pm | |||
r12998 | fglock++ | (requires some editing to fix dependencies) | |||
r12998 | fglock++ | - implemented <!before ...> | |||
r12998 | fglock++ | - implemented '=pod END' | |||
nothingmuch | TreyHarris: i'm waaaaaaaay too zonked | ||
i'm having a heavy weight conversation | |||
in my high prio thread | 21:25 | ||
so sorry =/ | |||
i guess that should be s/TreyHarris/salty-horse/; | |||
salty-horse | nothingmuch, no need to apologize.. i settled for messaging gaal | 21:26 | |
nothingmuch | okies | 21:27 | |
good luck =) | |||
21:30
kasei left
21:32
siossois joined
|
|||
svnbot6 | r12999 | wolverian++ | Add C<foo> to a few places, fix typos and other small nits. | 21:32 | |
21:41
elmex joined
21:56
Aankhen`` joined
22:10
plisk joined
22:13
elmex joined
22:15
jferrero joined
22:17
elmex joined
22:31
MacVince joined,
Aankhen`` joined
23:02
ludan left
23:18
Daveman joined
23:33
markstos joined
23:52
markstos left,
markstos joined
|