pugs.blogs.com/dist/Perl6-Pugs-6.2.13.tar.gz released! | run.pugscode.org | spec.pugscode.org | paste: sial.org/pbot/perl6 | pugs.blogs.com
Set by audreyt on 17 October 2006.
00:04 BooK_ joined
svnbot6 r14646 | audreyt++ | * MiniPerl6: EOL fixes; fix emitted code to be valid mp6 00:08
00:11 Psyche^ joined 00:24 Psyche^ is now known as Patterner 00:29 Nickiniz joined, Nickiniz left 00:30 eggzeck joined 00:34 nekokak joined
svnbot6 r14647 | fglock++ | MP6 - adding <%hsh> parsing 00:35
00:35 fglock joined 00:44 hikozaemon joined 00:45 FOAD_ joined
eviltwin_b is testing a quick fix to the filetest parsing issue 00:46
00:48 gantrixx joined
audreyt meanwhile is hacking in ::Dog(heads => 3) 00:49
eviltwin_b so far, so good; it compiled and the initial sanity tests didn't chunk :)
audreyt my Dog $Cerberus .= (heads => 3) 00:50
and I'm hacking it in on all three implementations :) 00:51
(MP6, P5, Hs)
GeJ new is now optional? 00:57
damn, it's moving too fast...
eviltwin_b I'm thinking that's confusing 00:59
::class(initializer) looks too much like :key(value) given how easy to miss a colon is 01:00
(or am I misunderstanding what's going on?)
audreyt no you are not
you can omit the ::
Dog(heads=>3) 01:01
provide ::Dog is in scope
which should remind you of certain other languages...
clsung GeJ: hi, good to see you here :)
GeJ clsung: always been here idling in the corner trying to follow what's happening. But boy sometimes it's hard 01:02
01:03 shobadobs joined
GeJ clsung: talking about things happening here, maybe someone(tm) should get in touch with people from haskell@ to get the new GHC in the ports ;) 01:04
01:04 lyokato joined
GeJ ok, I'm getting parrot fixed in FreeBSD... next step pugs and then take over the world 01:07
eviltwin_b ah, ok 01:08
svnbot6 r14648 | audreyt++ | * Pugs::Compiler::Perl - Implement ::Class( field => 'val' ) construction syntax. 01:11
r14649 | audreyt++ | * MiniPerl6::Grammar - Remove the v5 helper blessers and consistently
r14649 | audreyt++ | use the new ::Class(field=>'val') syntax.
01:22 dmq joined 01:33 miyagawa_ joined
audreyt fully implemented. 01:37
fglock just fried his brain for the day... I'm going to fade too 01:38
more hacking tomorrow morning :)
audreyt waves &
svnbot6 r14650 | audreyt++ | * Pugs.AST.Internals: Allow prototype objects to act as Code 01:39
r14650 | audreyt++ | objects, which for now simply delegates named parameters to
r14650 | audreyt++ | the .new call. (In the future it may also serve as coercion.)
r14650 | audreyt++ | my $cerberus = ::Dog(heads => 3);
r14650 | audreyt++ | my $cerberus = ::Dog.new(heads => 3); # same thing
r14650 | audreyt++ | This is semi-specced, but not really formalized, but extremely
r14650 | audreyt++ | handy, so we implement it anyway.
r14650 | audreyt++ | * Pugs.Parser.Operator: Correctly parse for "$x .= (1,2,3)"
r14650 | audreyt++ | to mean "$x = $x.(1,2,3)", so we can write:
r14650 | audreyt++ | my Dog $cerberus .= (heads => 3);
r14650 | audreyt++ | and save three characters of typing.
r14650 | audreyt++ | * Pugs.Parser: Adjust a comment about canonical status as
r14650 | audreyt++ | the ".=meth" term is now canonical in S03.
r14651 | lanny++ | * clean up unexpected passing TODOs 01:54
01:56 cmarcelo joined
aufrank ?eval class Foo { method bar { say "baz" } } my $foo = Foo.new; $foo.bar; $foo.can("bar"); 02:09
evalbot_r14651 OUTPUT[bazā¤] Error: No compatible subroutine found: "&can"
aufrank ?eval class Foo { method bar { say "baz" } } my $foo = Foo.new; $foo.bar; $foo.^can("bar");
evalbot_r14651 Error: ā¤Unexpected "^"ā¤expecting ".", "\187", ">>", "=", operator name, qualified identifier, variable name, "...", "--", "++", array subscript, hash subscript or code subscript
aufrank oh, just found can.t 02:12
cmarcelo @tell audreyt i'm home and safe :) _thank you_ for helping me out with MOH and "walking" thru the details of the bootstrap plan [btw, remember to commit that file]. I'll work out my english skills so next time we see I'll be more "talkative", like I was with .br mongers :o) 02:13
lambdabot Consider it noted.
cmarcelo nothingmuch++ # MOH is MO ;) 02:14
02:15 cmarcelo left 02:17 esstone joined
svnbot6 r14652 | audreyt++ | 03:13 < cmarcelo> [btw, remember to commit that file]. 02:24
GeJ parrot 0.4.5 back in FreeBSD
waiting for a bison upgrade to import 0.4.6
audreyt GeJ++ 02:27
lambdabot audreyt: You have 3 new messages. '/msg lambdabot @messages' to read them.
audreyt @massages 02:28
lambdabot TimToady said 19h 17m 24s ago: aforementioned bug now infests examples/algorithms/fibonacci_memoization.pl
cmarcelo said 11h 42m 8s ago: I pushed mi.t equivalent for MOH. Now Roles are on the way. I'll leave Sao Paulo tonight around 9-10pm, so if afternoon you have time i'll be happy to see how/where
this will get into pugs
cmarcelo said 15m 20s ago: i'm home and safe :) _thank you_ for helping me out with MOH and "walking" thru the details of the bootstrap plan [btw, remember to commit that file]. I'll work out my
english skills so next time we see I'll be more "talkative", like I was with .br mongers :o)
eviltwin_b still running full test on my parser change. still looking good --- some unexpected test failures but they look related to others' work (eg regex tests)
GeJ audreyt: you're not running FreeBSD anymore, correct? 02:31
audreyt GeJ: my old laptop still does
but this one is darwinports, aye
GeJ If I can't lobby FreeBSD people to upgrade ghc, could I come back to you as my "Help us Audrey Tang, you are our only hope." chance? 02:34
audreyt you can also lobby Igloo and JaffaCake. 02:35
JC is busy. Igloo is paid to care.
clsung upgrade ghc?
GeJ I mean for pushin a bootstrap image on the ghc repo, from there I should fill a PR and use the regular process to upgrade the port
audreyt that'd be Igloo's job. find him on #ghc and #haskell
also note you _can_ use the same boot image as 6.4.
6.4 can boot 6.6 just fine.
so maybe you don't need that.
GeJ clsung: unless I missed it during the slush craze, I didn't see ghc move to 6.6 02:36
clsung ah ha
GeJ audreyt: thanks for the tip, I'll look into that and see if I can send a PR
audreyt ok. have fun!
svnbot6 r14653 | aufrank++ | added tests for $foo.^can('bar') and $foo.^isa('Foo') syntax for introspection metamethods
audreyt sleeps for real &
GeJ thank you
nighty night 02:37
aufrank gnight audreyt
audreyt aufrank: cool, that means we'll get more yellow boxes once MO is rolled in
aufrank yellow is pass :todo<feature> ?
audreyt pass :todo<anything> 02:40
aufrank neat :)
eviltwin_b freshports shows it still at 6.4.2_1
aufrank macports got bumped to 6.6 last week 02:41
eviltwin_b hrm. guess I need to understand the parser a bit better 02:46
didn't break anything; also didn't fix anything
02:48 mako132_ joined
GeJ eviltwin_b: true, and I intend to get this fixed (ghc-related) 02:53
eviltwin_b foolishly realizes what he did was actually a no-op, and the real problem is somewhere else 02:54
hm, but that leaves me wondering why the file test ops parse differently than e.g. -= 02:57
svnbot6 r14654 | aufrank++ | added tests for .^does to go along with .HOW.does
eviltwin_b hm. think I know. parsec docs are at work, though 03:05
...or online 03:09
03:12 scw joined 03:14 shobadobs joined
aufrank is there sugar getting the last index in an array 03:24
@array.elems - 1 works, but I thought I remembered having a sugary substitute 03:25
lambdabot Unknown command, try @list
aufrank thanks for nothing, lambdabot
eviltwin_b if you're using it as an index (and not part of a range), index -1 should work I think 03:31
aufrank eviltwin_b: can you put that in code? @array... 03:32
eviltwin_b ?eval my @a = <1 2 3>; @a[-1] 03:33
evalbot_r14654 \"3"
aufrank oh, right
thx
03:41 bcorn_ joined 03:48 avar joined
aufrank could @array[0].exists ever be made a synonym for @array.exists(0) ? 03:53
04:01 Aankhen`` joined
eviltwin_b ew 04:17
04:18 penk joined
aufrank ew what? 04:20
avar aufrank: ew as in that would be horrid 04:55
hrm, or maybe not
avar remembers that @a[0] is not a slice anymore:)
TimToady the problem with .exists (and .deletes) is that it has to retroactively change the meaning of the subscripting operation, and that basically makes it a macro 04:56
aufrank TT: that makes sense 04:59
it's pretty least-surprising to me, but I see why it's a complicated addition 05:00
maybe a .exists? macro to go along with .exists() method ? 05:01
TimToady more likely would be a :exists and :delete modifier on ordinary subscripting 05:05
aufrank how does that work on nested lists, for example?
TimToady depends on what the slice digs up, just like ordinary subscripting 05:06
having the @foo[@list]:delete form also would emphasize that the deleted elements are returned (as they are in Perl 5) 05:07
the main thing I don't like about @foo.delete(@list) is that the right side doesn't look like a slice 05:08
aufrank yeah, I agree
TimToady one could make a .delete or .exists method that gives a different "view" of the array to the subscript: 05:09
%hash.delete{@keys}
but that gets a bit tricky if you don't actually do the delete right away.
and potentially involves you with proxy overhead
aufrank I like &h.delete{} and @a.delete[] better than the .() form 05:10
s/&/%/
if that's what you were suggesting 05:11
TimToady but again, it's more like a macro modifying the subscript there.
aufrank yup
TimToady and then you don't have to worry about people saying $ref = %hash.delete;
aufrank the deleted items are returned but you think you're getting a hashref of the altered hash? 05:12
TimToady problem I see is returning a self-deleting hash to someone unsuspecting
so macro view is safer 05:13
question is whether we can have a .delete{} macro that doesn't interfere with .delete()
.foo implies run-time dispatch, and macros tend to interfere, unless this macro just remapped .delete{} to .delete([]) or some such 05:15
I said that deleting and existing are just modifiers to subscripting, but practically speaking you might not want to clutter your normal subscripting code with optional control flow. 05:17
aufrank you'd tend to only use the modifiers to be explicit about getting Bools for tests, though, right? 05:18
oh, that's true for exists but not delete
TimToady contextual 05:19
aufrank is stuck on the one I'm trying to use now ;)
man, my person-foo is weak this evening
TT: feeling better after whatever kept you out of Brazil? 05:24
05:25 kanru joined
TimToady it's more of a long-term thing, but I think I'm improving. Part of it was my wife was also sick for a month, and between the two of us we almost make one human being... 05:27
I just think the summer schedule took a lot more out of us that we realized at the time. 05:29
and when I do that to myself, my body has lots of ways to tell me it's time to back it off a notch or two for a while. 05:30
aufrank glad to hear you're improving. I hope you get a chance to catch up to yourself now. 05:31
TimToady well, this whole Perl 6 thing has taught me that I have to pace myself. I'm the only person who's not really allowed to quit, after all. :)
aufrank granted :)
?eval my @tmp; @tmp<foo>.push('bar') 05:34
evalbot_r14654 Error: Cannot cast into Hash: VRef <Array:0xb67d8720>
TimToady ?eval my %tmp; %tmp<foo>.push('bar') 05:35
evalbot_r14654 1
aufrank ?eval my @tmp; @tmp[0]<foo>.push('bar')
evalbot_r14654 1
aufrank that's what I meant
TimToady I think autoviv is saner in P6 than in P5
aufrank I'm with you there 05:36
though I wouldn't pretend to know either completely ;)
TimToady but it's one of the reasons exists has to know that it's doing that and not an assignment, say
aufrank yup 05:37
TimToady though I suppose the real P5 autoviv problem comes before the final subscript op
cascading subscript ops need to propagate the rvalue/lvalue context up, and P5 botched that 05:38
05:46 avarab joined 05:47 kanru_ joined
svnbot6 r14655 | lwall++ | [t/var/state.t] fib test that fails 05:52
r14655 | lwall++ | [examples/algorithms/fibonacci_memoization.pl] work around state=list problem
r14656 | lwall++ | Off by one on previous test 05:56
05:57 avarab_ joined
svnbot6 r14657 | lwall++ | Might as well add test of workaround variant to make sure that doesn't break 05:59
06:15 BooK joined
aufrank TimToady: still around? 06:44
eviltwin_b hm. I don't think you want to parse the leading hyphen of a file test op with @name@ 06:47
06:53 iblechbot joined
TimToady aufrank: vaguely 06:53
eviltwin_b misread it. still looks like it's being parsed with the wrong verb, but at 2am I'm too fuzzy 06:54
aufrank TimToady: have you had reason to do any command line parsing for your $job p6 code? 06:56
with GetOpt and friends?
I've had trouble getting perl5:Getopt::Long to work correctly here
TimToady not really. I tend to avoid getopts of all sorts. 06:57
and the particular program doesn't need args 06:58
(except a filename)
aufrank and you're just doing $*ARGS.shift or somesuch for that?
eviltwin_b right. "symbol name" parses the "-"... and eats trailing whitespace. (makeOp1) 07:00
TimToady yeah. I'm kinda waiting for someone to implement S06:2468
in fact, the last line of my proggie currently reads: MAIN(); exit; # should be automatic some day 07:02
@tell audreyt interesting factoid: when I was profiling the "if->" patch, it came to my attention that about 90% of our current test failures are caused by that patch--seems to give Span and Span::Num fits somehow. But it's not obvious from the failures how they're related to "if->". 07:05
lambdabot Consider it noted.
07:06 zptao joined
TimToady 'z' xx * & 07:08
aufrank gnight 07:10
gaal mmm, that means "sleep for as long as desired" 07:11
aufrank hmm. should I be able to call split on =<> ? 07:12
my ($foo, $bar) = =<>.split(",") #doesn't work 07:13
gaal does (item =<>).split work?
eviltwin_b gives up for the night. &
aufrank gnight etb 07:14
yes, yes it does
aufrank thanks gaal
07:19 marmic joined
gaal sure thing :) it was a wrong context 07:19
07:25 justatheory joined
aufrank is there a reason to prefer @list.grep():{$_ ~~ /foo/} to @list.grep( {$_ ~~ /foo/} ) 07:31
07:59 eggzeck joined 08:01 Psyche^ joined
aufrank if anyone's still around, can you explain this to me? 08:10
?eval class Bar { has @.x is rw; has $.y; $.y := @x[0]; } 08:11
evalbot_r14657 Error: Cannot bind this as lhs: Syn "${}" [App (Var "&y") (Just (Var "&self")) []]
aufrank $.y is an accessor, not a real variable. But I'd still like to bind it as if it were a variable. 08:13
08:17 Psyche^ is now known as Patterner 08:18 avarab_ is now known as avar 08:28 DHGE joined 08:37 kisu joined
lumi Maybe you can bind $!y? 08:46
Unless it's been renamed; at any rate it doesn't seem to work 08:47
08:55 kane-xs joined
aufrank lumi: I think the problem is that $.x and $!y aren't really Scalars, they're Code. That's why the error is about not being able to bind &x 08:57
$.x is actuall method x { return $x } or something like that 08:58
s/actuall/actually/
09:01 drrho joined
lumi I thought $!y is supposed to be the actual variable, with $.y being the generated accessor 09:01
aufrank $!y is definitely private. I don't know if that means it's a plain old Scalar or not 09:02
lumi Oh, you don't bind scalars, do you? You bind names
So it mostly can't bind it because it gets desugared too early 09:03
09:03 autark joined
aufrank I think I follow 09:05
lumi I don't know what would be correct behaviour.. maybe to do what you want you need: method y is rw { return @.x[0] } or something? 09:07
aufrank makes sense, yeah
lumi Also it seems to work now 09:10
?eval class Bar { has @.x is rw; method y is rw { return @.x[0]} }; my Bar $x .= (); $x.y = 2; say $x.x;
evalbot_r14657 OUTPUT[2ā¤] Bool::True
09:12 buetow joined
aufrank ?eval class Baz { has @.x is rw; method y is rw { return @.x[0] } }; my $qux = Baz.new( :x(1,2,3) ); $qux.y; $qux.y = 'foo'; 09:13
evalbot_r14657 Error: Can't modify constant item: VInt 1
aufrank anyway, I think I'd better sleep now 09:14
lumi Looks like $.x got set to a list, instead of an array, maybe?
Night
aufrank ?eval class Baz { has @.x is rw; method y is rw { return @.x[0] } }; my $qux = Baz.new( :x(1,2,3) ); $qux.x[0]; 09:15
evalbot_r14657 \1
aufrank ?eval class Baz { has @.x is rw; method y is rw { return @.x[0] } }; my $qux = Baz.new( :x(1,2,3) ); $qux.x[2];
evalbot_r14657 \3
aufrank ?eval class Baz { has @.x is rw; method y is rw { return @.x[0] } }; my $qux = Baz.new( :x(1,2,3) ); $qux.x;
evalbot_r14657 [1, 2, 3]
lumi ?eval class Baz { has @.x is rw; method y is rw { return @.x[0] } }; my $qux = Baz.new( :x(1,2,3) ); $qux.x.WHAT;
evalbot_r14657 ::Array::Const
09:40 SubStack joined, BooK joined 09:45 elmex joined 09:47 iblechbot joined 09:49 Coleoid joined 09:50 andara joined 09:58 ruoso joined
svnbot6 r14658 | lumi++ | Added tests for $foo .=() construction, and for lists initiated in the constructor being mutable. 10:15
10:19 kensanata joined
nothingmuch hola 10:37
lumi Morning, nothingmuch 10:54
nothingmuch hola lumi
11:08 kanru_ is now known as kanru 11:19 xinming_ joined 11:32 BooK joined 11:42 kane-xs_ joined 11:43 HiTech69 joined 11:54 mako132 joined 12:00 thisvieira joined 12:09 penk joined 12:14 BooK_ joined 12:17 thisvieira is now known as todd- 12:19 penk joined 12:22 chris2_ joined 12:30 HiTech69 joined, Psyche^ joined 12:35 penk joined 12:37 ludan joined, mako132_ joined 12:43 Psyche^ is now known as Patterner 12:44 rodi joined, Lorn joined 12:45 DaGo joined 13:10 mako132 joined 13:12 iblechbot joined 13:33 kanru joined 13:35 BooK_ is now known as BooK 13:37 electrogeek joined 13:46 boo joined 13:48 lumi_ joined, mbradley is now known as mbradley|bus 14:05 BooK_ joined 14:18 woremacx joined 14:40 diakopter joined 14:49 rodi joined 14:52 hexmode joined 14:54 xinming_ is now known as xinming 14:56 rlb3 joined 15:03 c6rbon joined, mbradley|bus is now known as mbradley 15:04 GnuVince joined
GnuVince ?eval ~(1.1 .. 3) 15:04
evalbot_r14658 "1.1 2.1 3.1"
GnuVince is that proper behaviour?
how about this: 15:05
[particle] no, i don't think it is
GnuVince ?eval (~(1..3.4), ~(1..3.5))
evalbot_r14658 ("1 2 3", "1 2 3 4")
15:08 iblechbot joined
GnuVince Both seem incorrect to me, however no tests mention floats. I'll need to talk to audreyt or TimToady to know for sure. 15:10
[particle] i think you should add failing tests 15:11
that way they'll get corrected either way 15:12
GnuVince I have added them to my working copy
Okay
I'll do that
[particle] did you look at the spec?
GnuVince Yeah, no mentions
I assume the behavior should be like Perl 5, to truncate
the 1.1 .. 3 seems especially wrong, it goes beyond the upper limit 15:13
[particle] yes indeed
15:19 justatheory joined 15:20 ruoso joined 15:22 laudiceia joined 15:23 rodi joined 15:27 woremacx joined
svnbot6 r14659 | gnuvince++ | Added test cases for the range operator with floating point numbers. 15:32
r14660 | gnuvince++ | Shamelessly added myself to AUTHORS 15:35
nothingmuch nekokak: you mean proudly =)
err 15:36
GnuVince: that was for you, not nekokak
15:38 Limbic_Region joined
lumi_ Surely there's no shame in it, so it's shameless 15:40
nothingmuch compare:
Your mother is uglyness-less
Your mother is pretty
the first one is a borderline insult
15:41 shobadobs joined
nothingmuch because it hints of the bad that was expected but in fact was not present 15:41
xinming ...
lumi_ It's more borderline weird
GnuVince nothingmuch: Proudly, yes. Shamelessly too. I didn't wait to have a few commits before adding myself. Bang, on the first one :)
nothingmuch GnuVince: in that case it was a bootstrap
lumi_ GnuVince: That's the proud (shameless?) Pugs tradition
nothingmuch that way we guilt people into actually making changes afterwords =) 15:42
15:42 lumi_ is now known as lumi
GnuVince Hahaha :) 15:42
Well I look forward to having more commits, that's for sure.
But for now work (PHP :( ) calls
bbl 15:43
gaal mooses 15:50
kolibrie_ released DateTime::Format::Oracle in perl 5 land 15:52
15:57 timbunce joined 15:59 notThat joined 16:10 aufrank joined
aufrank hey folks 16:14
rodi salut, aufrank 16:15
lumi Hi aufrank
aufrank: I added a test for the borkage you found 16:16
aufrank lumi++ # checked in tests last night
this is sort of a basic question, but for a file foo.pl where I 'use v6-alpha' should I be able to do run 'perl fool.pl' or is 'pugs foo.pl' all that works now? 16:18
nothingmuch aufrank: perl foo.pl
16:18 jferrero joined
aufrank I get an error that v6.pm isn't in @INC 16:18
nothingmuch install v6 then =)
aufrank should make install install v6? 16:19
nothingmuch whose make install?
search.cpan.org/~fglock/v6-alpha-0.015/
lambdabot Title: Fl&#225;vio Soibelmann Glock / v6-alpha-0.015 - search.cpan.org, tinyurl.com/yxjxfd
aufrank in a pugs checkout 16:20
nothingmuch *nod*
v6 is not pugs
16:20 ofer0 joined
nothingmuch i'm not sure if it'll install 16:20
but you can install v6 from the cpan
aufrank goes to perl -M'CPAN' -e'install v6'
TimToady I don't know how up-to-date the CPAN version will be 16:21
nothingmuch oh, right
it's been almost two months
Debolaz Our friend on wikipedia has vandalised the perl 6 page again. en.wikipedia.org/w/index.php?title=...d=85984845
lambdabot tinyurl.com/y58znp
aufrank so what's the approved way of getting v6.pm into @INC?
nothingmuch aufrank: osrry, i'm not very up to date 16:22
maybe pugs' own make install will install it as well
i never ran that though =(
TimToady me either
I don't think so, but I don't do "make install" these days 16:23
I think if I were gonna do it, I'd either go down into pugs's perl5 dir and try to install stuff from there, or I'd try to add those blibish directories to @INC 16:24
aufrank it seems not to, as I've done a make install from a recent checkout but can't run v6-alpha modules with perl 5.8
TimToady or copy the file I want to run down into the directories.
pasteling "nothingmuch" at 84.108.53.74 pasted "v6.pm" (6 lines, 236B) at sial.org/pbot/20930
nothingmuch i don't know which one is the Trueā„¢ version
i suppose the top level
aufrank TimToady: do you mostly just use pugs to run p6 code, or is there some better option to get it working with perl5 that I am not considering? 16:25
nothingmuch oh
This is not the perl5 v6-alpha, see perl5/Pugs-Compiler-Perl6 for that.
TimToady the stuff in toplevel v6/ is the new v6 in MiniPerl6, I think
nothingmuch *nod*
that line i just pasted was from ./v6/README
TimToady I mostly just use the Haskell runtime currently
nothingmuch mostly uses MO nowadays 16:26
actually nowadays I mostly sit and "hmmm"
16:26 notThat left
TimToady aufrank> is there a reason to prefer @list.grep():{$_ ~~ /foo/} to @list.grep( {$_ ~~ /foo/} ) 16:26
with the latter you have to remember to put the paren at the end 16:27
plus you don't get the magic } line-ending parsing where you might want it
[particle] my editor reminds me of that
TimToady so it really depends on how big the block is and whether it's final
aufrank TT: thanks
TimToady but it's not a grep-only thing 16:28
it's a general method: @ARGS thing
nothingmuch finds @list.grep():{ } extremely confusing
the "stuff that is given to grep" intuitively extends up to the closing )
dmq waves hello
nothingmuch hola dmq
TimToady I always put a space between the : and the {
: turns a method into a listop
Debolaz That whitespace sensitivity is pretty much my only objection to perl6. It makes things occationally difficult to read.
For me. 16:29
dmq I thought id note for those not following p5p that I posted a redo of my earlier stack control verbs for the regex engine today.
TimToady it's all driven by the need to be able to add postfix operators
Debolaz knows. :-/
dmq I tried to incorperate what feeback ive received so far.
TimToady < aufrank> ?eval class Bar { has @.x is rw; has $.y; $.y := @x[0]; } 16:31
it would be very difficult to make that mean something
because attributes are generic until BUILD time
16:32 chris2_ joined, peernaute459 joined
nothingmuch always kinda thought that all actions on $.foo in the class decl are saved as continuations to be invoked during BUILD for every object 16:32
16:33 chris2_ is now known as chris2, boo is now known as boo_
TimToady nope 16:33
nothingmuch so they are special cased?
16:33 boo_ is now known as boo
TimToady has is a declarator and can do whatever it wants to "rechronify" its actions, including its = clause 16:34
16:34 peernaute459 left, boo is now known as beboom
TimToady but the class's code only runs when the class itself is constructed 16:34
it's just a method on the metaclass, I think 16:35
nothingmuch ++
16:35 beboom is now known as beBOOm
TimToady if the class body ran at BUILD time we wouldn't need BUILD 16:35
nothingmuch i sort of meant that the rechronification could be implemented in terms of continuations and thus could support e.g. $.y := @x[0];
oh, no 16:36
not the entire body
just the actions on future variables
at class construct time $.y doesn't exist
it's a place holder for every $.y that will exist
TimToady I think it would be very easy to intermix things inconsistently
nothingmuch *nod*
Limbic_Region TimToady - thanks for the insight on the fibonacci memoization
TimToady and it would be much better to put them somewhere where the temporal context isn't implicit 16:37
xinming TimToady: Is there a way to get the "class" using .perl?
nothingmuch but then again saying class Foo { has $.x = 1 } is sort of the same as class Foo { has $.x; submethod BUILD { $.x = 1 } }
xinming Since we can easily get an object using .perl
TimToady I think "insight" is perhaps too dignified a word for what I do...
xinming I wonder if we would have a method get the code it self... :-) 16:38
nothingmuch that's a matter of good programming standards =)
i don't think $.x := @y[0] is good style
it's just that intuitively i saw no reason for it to not be supported technically
in a predictable way
Limbic_Region well in any case, I clearly wasn't thinking clearly
Limbic_Region wanders off after kicking off a smoke 16:39
TimToady xinming: whether you can get at the class of an object probably depends a little on whether the object actually has a class. 16:40
dmq the posting can be found here if anybody wants to see: aspn.activestate.com/ASPN/Mail/Mess...rs/3328324
lambdabot Title: [PATCH] New regex syntax omnibus :: ASPN Mail Archive :: perl5-porters, tinyurl.com/y87qu8
16:41 amnesiac joined
xinming TimToady: what do you mean please? >_< 16:43
TimToady P6 supports both class and prototype paradigms 16:44
prototype objects don't really have classes.
kolibrie aufrank: I installed v6.pm and dependencies from CPAN, and then go into pugs/perl5 and install from there to keep up-to-date
TimToady also, since the body of a class is a run-once thing, whether you can get at it depends on whether the metaclass keeps the closure around.
xinming ... 16:45
Ok,
nothingmuch aufrank: ping
err
audreyt: ping
TimToady if you want to be able to take a snapshot of a class and use it as a role, then you probably do need to keep the class definition closure
nothingmuch || cmarcelo for that matter
TimToady but P6 does not guarantee this behavior 16:46
xinming TimToady: What I wonder is if we can pass the whole "object"-implementation and object to another machine. :-P
TimToady that will depend more on what nothingmuch is working on...
aufrank kolibrie: thanks, that helps 16:47
xinming TimToady: Just a crazy idea comes out of my mind. If we can do that, We can write a very short code and eval remotely. :-P
TimToady: hmm, Thanks for your explanation. ;-)
nothingmuch xinming: that has lots and lots of issues beyond serialization
look at the E language
for some insight on this
aufrank kolibrie: which modules in perl5/ do you end up building by hand?
nothingmuch suppose you have two models, thick and thin proxying 16:48
whereby in thin proxying proxy objects on the other side are created for every local value
and an RPC call is made for every access
and thick proxying serializes the whole thunk and it's env and thaws it on the other side, optionally syncing back when done
kolibrie aufrank: Pugs-Compiler-Perl6, Pugs-Compiler-Rule, and I'm sure there's one more... 16:49
nothingmuch under the first model it's "easy" but you don't gain much
TimToady the second model breaks === equivalence
at least temporarily
nothingmuch of course
proxying is yucky any way you look at it
=( 16:50
under the second model, if you haven't instructed your compiler to remove meta data
then it can deduce the meta object fgrom the type box
and simply serialize that
since it's a simple object it doesn't need to compile to a perl 6 class definition
just a serialized representation of the finished meta object
a perl 6 class definition could be pretty printed, of course, but that's only supported for meta class instances which can be expressed declaratively 16:51
?eval sub { 1 }.perl
evalbot_r14660 "sub \{Syn \"block\" \{1}}"
nothingmuch if that is supported and the remote side trusts the local side, and will execute arbitrary code on it's behalf it should be very easy 16:52
xinming thanks, I think I know, as HOW and WHICH would be useless in that case. Hope what I understand is correct. :-P
nothingmuch why useless?
.HOW is the type box meta data 16:53
kolibrie aufrank: maybe that's it, looks like Pugs-Emitter-Perl6 moved in with Pugs-Compiler-Perl6
nothingmuch if the object in .HOW can b e serialized
and the meta-meta-class can be assumed to exist on the other side
(or any n-order of meta-meta-meta) then there's no bootstrap problem
16:54 mosca joined
nothingmuch with these two prerequisites you can theoretically serialize any arbitrary object along with it's class for remote execution 16:54
aufrank kolibrie: do you get "Warning: prerequisite Pugs::Emitter::Perl6::Perl5 0 not found." when you make Pugs-Compiler-Perl6?
16:54 kanru joined
nothingmuch what I doubt is not the technical feasability but the usefulness 16:54
TimToady similarly for the identity expressed by .WHICH, in which case you're getting identities more of the URI persuasion
though having the same .WHICH should hopefully also make some guarantees about eventual resyncing 16:55
then you get into timing issues like a Palm Pilot... 16:56
nothingmuch i think that is more of a per-bridge policy
kolibrie aufrank: it appears to be in pugs/perl5/Pugs-Compiler-Perl6/lib/Pugs/Emitter/Perl6/Perl5.pm
nothingmuch automagical remote execution that Just Works will Just Work for about 5% of the cases ;-)
i'
TimToady yeah, well, per-bridge policy is how we ended up with uucp instead of the internet...
nothingmuch heh
kolibrie aufrank: but it used to be a separate package
xinming well, Yesterday, What my crazy idea is... We process different objects on different machine, Just pass the Whole object to the first machine, and the first machine run the object once. and then, pass the newly created object to another machine. and at last. we'll have the result return. :-) 16:57
hmm, well, It's just kind of dream... :-P forget it.
nothingmuch *nod*
that should be supported 16:58
but the different mkachine must trust the first machine, or it must already know of the class the object is in
and know it's definition
otherwise you have security issues
again, see the E language info
www.erights.org/
lambdabot Title: Welcome to ERights.Org
TimToady basically you get tribal semantics where you were hoping for individual semantics
xinming nothingmuch: Security issue is ignored in that case. Since, we can only see only one computer, the one which sends objects to other machine. 17:00
nothingmuch ?
are you saying that the slave machines necessarily trust the master?
xinming nothingmuch: yes, the code only executes from the trusted host. 17:01
nothingmuch so short answer: yes, it should Just Work to some limited extent of Work
(e.g. breaking === semantics, synchronization, and all the other issues related to freeze-thawing) 17:02
xinming and another issue is, the dynamicly created object. So, if we pass the source to another machine, another can eval it. 17:03
nothingmuch anonymous classes should also Just Work 17:04
also classes that cannot be represented using a class { } declaration (at least not trivially)
TimToady depends on how abstractly you represent "the source"
nothingmuch also classes with dependencies on other (meta-)classes
17:05 mosca joined
TimToady C's include model is based on "the source", and breaks badly 17:05
source filtering is another source-based approach that frequently breaks
you'd have to treat the source as immutable, and you have to guarantee that it gets evaluated in the same context, or it means something different 17:06
that's hard
17:06 lumi joined
nothingmuch whereas serialzing the metaclass is more in tune with the actual meaning of thje class, context free 17:07
metaclasses instances are jsut data structures
dinnertime
TimToady assuming all the dependencies are data-driven, and not temporal
showertime & 17:08
xinming ...
bed time &
17:09 justatheory joined 17:10 loumz joined
nothingmuch a meta class with a temporal dependency is the type of magic you shouldn't mix with magic like transparent object proxying =) 17:14
17:20 stevan_ joined 17:29 ruoso joined 17:30 diakopter left 17:32 GnuVince joined 18:13 chris2_ joined 18:22 dvorak joined 18:28 Lorn_ joined 18:32 chris2_ is now known as chris2 18:42 bernhard joined 18:47 cjeris joined
cj could I get some comments on this, and perhaps some ideas about how to implement? 18:49
cjcollier.livejournal.com/231863.html
ingy hi cj 18:54
seen [particle]
seen [particle]?
18:54 buetow joined
Debolaz usrbinpurl seems to want references to the claim that static typing is beneficial. I didn't remove this from the article since it's not outright vandalism but it should probably be dealt with. 18:58
(Perl 6 article @ Wikipedia)
TimToady you probably want to google for "gradual typing" 19:19
Limbic_Region I had to re-read Debolaz's comment a few times to understand what it was that should be considered vandalism 19:26
it isn't that static typing is beneficial - it is that someone is asking for a reference because they don't believe it is true
the wp article talks about dynamic and static typing and indicates perl 6 is using hybrid 19:27
which is accurate
at least, that's the way I understand it
Debolaz Limbic_Region: I didn't consider it vandalism, but the user has vandalised the page before. 19:28
19:30 justatheory_ joined
Limbic_Region Debolaz - all I meant was it wasn't clear WHAT was undesireable content. It took me several passes to get your intended meaning 19:42
19:46 Alchemy joined, prism joined 19:51 gnuvince` joined 19:57 ofer0 joined 20:00 vel joined 20:07 TSa joined
TSa HaloO 20:07
20:18 thepler joined
audreyt TSa: greetings 20:31
lambdabot audreyt: You have 1 new message. '/msg lambdabot @messages' to read it.
svnbot6 r14661 | audreyt++ | * Pugs.Parser.Operator: "state (...) = ..." now desugars correctly.
audreyt TSa: a new object system with roles and introspection and runtime augmentation is arriving to Pugs
I'm tidying it up, but it should arrive within this week
once tests pass with it I'll call it 6.28.0 :) 20:32
20:32 seano joined
cj heya ingy 20:32
20:41 beppu joined
audreyt @tell cmarcelo I took your MOH and mutated into thoroughly monadic :) 20:43
lambdabot Consider it noted.
Limbic_Region woot - I have a project lying in wait audreyt
audreyt @tell cmarcelo I'll not commit back to feather; rather, this is going into src/MO/ directly in a bit -- please put your further hacking in the main Pugs repo. great work, btw :) 20:44
lambdabot Consider it noted.
20:47 ashleyb joined 20:48 polettix joined 20:49 statico joined 20:57 crem joined 20:59 eggzeck joined 21:01 Limbic_Region joined 21:04 beppu_ joined
audreyt TimToady: dynamic defaults are not part of the default Class clas right? 21:04
21:04 cmarcelo joined
audreyt class C { has $.x = rand }; C.new.x === C.new.x 21:05
cmarcelo: heya. I'm about to commit monadic MOH to pugs
cmarcelo audreyt: ola :) nice, i waiting to see it. 21:06
lambdabot cmarcelo: You have 2 new messages. '/msg lambdabot @messages' to read them.
cmarcelo @moosages 21:07
lambdabot audreyt said 23m 11s ago: I took your MOH and mutated into thoroughly monadic :)
audreyt said 22m 33s ago: I'll not commit back to feather; rather, this is going into src/MO/ directly in a bit -- please put your further hacking in the main Pugs repo. great work, btw :)
audreyt cmarcelo: ok... I'll commit things under src/MO/, including the sketch-tests such as roles.hs
21:17 DHGE joined
audreyt cmarcelo: feel free to play with it: perlcabal.org/~audreyt/tmp/for-cmarcelo 21:19
lambdabot tinyurl.com/yl9dem
audreyt cmarcelo: I think it's all working correctly, but please sanity check before I commit it back to Pugs
I'm going to dinner now; be back in a bit :) 21:20
cmarcelo oka
21:20 Daveman joined 21:28 ashleyb joined
TimToady audreyt: yes, that's correct according to current thought, use { rand } to go dynamic, and { { foo() } } to init code with a closure. though I don't feel strongly about it if we came up with a reason and syntax to do it the other way. 21:29
and after all, there's the autoclosing of s[foo] = rand on the other side 21:30
but part of the reason we didn't make = autoclose is that "will first" and "will build" are intended to be be the real way to supply a closure with explicit {...} if you want that. 21:32
can't quite see s[foo] will {...} though...
actually, with "will build" we could just say that = is never dynamic, and throw out the magical get one .() free semantics 21:33
I'm not sure we actually have a name for the time that = runs, though. 21:37
has $.x = $y is something like has $.x will build { $!x = COMPOSE { $y } } 21:38
where COMPOSE really means something more like OUTER, insofar as it isn't really composition time either, but when the "has" is being executed just prior to composition. 21:40
has $.x will now { $tmp = $y } will build { $!x = $tmp } 21:42
except with correct scoping...
21:45 jferrero joined
TimToady I suppose an argument could be made that declarators that run = earlier than "now" are already autoclosing, so "has" should just autoclose and run at build time. 21:47
then you'd have to say "has $.x = FIRST { rand }" to get a single one. 21:48
that would fit better with the autoclosing of s[foo] as well.
SamB like run = "yesterday"? 21:49
TimToady not sure what you're asking... 21:53
21:57 Limbic_Region joined 21:58 Debolaz2 joined, rodi joined 22:00 ashleyb joined
svnbot6 r14662 | lwall++ | fib memo can now use list assignment, audreyt++ 22:05
TimToady if we did autoclose "has=", it's an interesting question what the visibility of $r would be after 22:08
has $.x = constant $r = rand;
or whethe we have an anonymous syntax of
has $.x = constant $ = rand; 22:09
which I also wanted for (state @ = 0,1,1).[$n] //= fib($n - 1) + fib($n - 2)
after all, if we allow a sig like ($,$,@), and the declarator introduces a sig... 22:10
but it's currently a syntax error.
22:14 larsen_ joined
TimToady I'm starting to think that ={...} vs ={{...}} is a design smell. 22:18
cmarcelo @tell audreyt in MO/C/Class.hs line 201, don't you want "return (name, val)"? 22:31
lambdabot Consider it noted.
22:32 justatheory_ is now known as justatheory
audreyt cmarcelo: er, right :) 22:38
lambdabot audreyt: You have 2 new messages. '/msg lambdabot @messages' to read them.
audreyt @massage
lambdabot TimToady said 15h 32m 36s ago: interesting factoid: when I was profiling the "if->" patch, it came to my attention that about 90% of our current test failures are caused by that patch--seems to give
Span and Span::Num fits somehow. But it's not obvious from the failures how they're related to "if->".
cmarcelo said 6m 56s ago: in MO/C/Class.hs line 201, don't you want "return (name, val)"?
22:39 davidfetter joined
davidfetter seen audryt 22:40
audreyt davidfetter: greetings.
davidfetter hi :)
i'm in rio :) :)
audreyt so where di you end up staying?
davidfetter copacabana rio hotel
nsa. sra. copacabana 1256 22:41
audreyt is quite satisfied with le meridien :)
davidfetter w00t
audreyt oh, so we are close ish
davidfetter i may want to move elsewhere. the internet is not so great here :P
as in it's not in my room
pasteling "TimToady" at 64.0.7.8 pasted "proposed S12 patch making has= autoclose" (34 lines, 1.5K) at sial.org/pbot/20932
SamB you have to carry it in buckets?
audreyt oy. I got the hotel to relocate me to another room to get internet, also
davidfetter but at least i'm not sleeping on the beach this evening :)
i'll have to change hotels to get that. the internet is 8 floors down from my room 22:42
SamB, bit buckets ;)
SamB you have to carry the internet in buckets up eight flights of stairs?
audreyt TimToady: I like that more. I'll model it in MOH; please checkin :)
SamB how toilsome! 22:43
audreyt SamB: they have buckets of pigeons
davidfetter it's good exercise. maybe i'll be able to see my toes when i look down...
audreyt each carrying RFC 1149 packets
davidfetter i hope they won't be pigeon toes...
SamB hmm. thats a new one. 22:44
audreyt but having them flying around in the hotel causes trouble
so they're put into buckets
SamB IP over dead avian carriers?
davidfetter heh
audreyt no, just with contrainted mobility
SamB how is that better than having a person carry a briefcase full of packets?
davidfetter ah, so there's a venting & feeding spec for the buckets. ok :)
SamB, more geek cred. 22:45
audreyt SamB: that wouldn't be RFC complaint
I mean, compliant
SamB well, wait till april
audreyt and Standards is very important!
SamB submit proposal for "IP over bussiness carriers"
or something like that
audreyt . o O (IP over disease carriers) 22:46
davidfetter IP over Pointy-Hairs. i like it already
audreyt bird-flu-network
TimToady IP over IP lawyers...
audreyt TimToady++
davidfetter IP/SARS
lol
audreyt so you submit a patent to SYN and file a lawsuit to ACK?
davidfetter audreyt, how was your flight/transit to hotel? 22:47
audreyt davidfetter: flight got delayed 1hr. otherwise uneventful 22:48
davidfetter i had a bizarre little while @ the hotel. they hadn't heard about my reservation. 22:49
SamB IP over IP lawyers would have a patently absurd cost... 22:50
davidfetter <pt_BR>legal</> 22:51
SamB it would probably also take an awful lot of paper to write packets in legalese
TimToady never overestimate the bandwidth of a briefcase full of legal documents... 22:52
davidfetter hereinafter, notwithstanding the foregoing...
audreyt TimToady: class C { has $.x = die } C.new(x=>1) 22:53
won't die, correct?
SamB davidfetter: how many bits was that?
TimToady that is correct.
has= only fires if no explicit init
davidfetter 40000. at the usual rate of $500/hour, 1 hour minimum. 22:54
audreyt cmarcelo: still there? 22:55
TimToady $.x = die unless self.exists<$.x> or some such.
audreyt cmarcelo: perlcabal.org/~audreyt/tmp/for-cmarcelo-2 22:56
lambdabot tinyurl.com/y98ftz
audreyt cmarcelo: I think it's correct and useful enough to go in as Pugs 6.28 :) but quick sanity check still welcome 22:57
audreyt works on the glueing bits
TimToady hmm, if the topic is the currently initing attribute, it's almost $.x = die unless .exists;
audreyt TimToady: currently it's simply merged into a (:$x =) Signature part. 22:58
and let normal binding deal with it
since the default clause in Signature is also autoclosing and trigger each run
TimToady binding at beginning of BUILD call? or after?
has to take into account that body might have $.x = 123 22:59
cmarcelo audreyt: i'm here reading the changes. (btw, i'm keeping feather repo updated until you commit on pugs)
audreyt has to be beginning I think, since by BUILDALL time it's all done
if I understand correctly
i.e. it's done in BUILD binding time, essentially
and the body of BUILD is too late to change it
must do it in the sig dircetly:
submethod BUILD ($.x) { ... } # is fine 23:00
submethod BUILD { $.x = 10 } # is too late
23:00 justatheory_ joined
TimToady that's when it's specced, though, or at least apo'd 23:00
submethod BUILD { { user-stuff } implicit init stuff } 23:01
audreyt oh hm.
TimToady including all the implicit BUILDs supplied by roles
audreyt that doesn't quite work on value objects... 23:02
i.e. this assumes a mutable hash as layout
that you can test for .exists and do overriding updates
TimToady submethods can be special
that's why we distinguish infrastructural methods
I'm using .exists metaphorically there 23:03
audreyt but within BUILD you can already call self.normal_method
so that means at user-stuff time it's already a full instance
davidfetter seen fglock
cmarcelo audreyt: what shell magic you use to make tags file? just "find | xargs hasktags -c" isn't enough for my vim, neither sorting the tags file [some tags wont work]..
audreyt or do you think tat it can be a partially-filled-in-prototype-thing ?
cmarcelo: "make ghci" and then ":ctags"
TimToady it's always been my assumption that BUILD should not assume a complete object in user code
audreyt ghci has builtin ctags and emacstags
TimToady: but $.x is a normal method 23:04
only $!x is not
and if we restrict BUILD to only operate on $!x then that is fine to have it incomplete
TimToady which is why at one point I conjectured that submethod requires $! instead of $.
audreyt since you are working on a staging-copy of the object
I think it's wise, as people will be confused when we say
TimToady or force $. to mean $! there, but only on known attrs 23:05
audreyt "$.x inside BUILD is really $!x and too bad if you had a virtual rw somewhere"
I think having $.x to force into $!x but $.x() diying
is awfully inconsistent
[particle] agrees. SWYM trumps DWIM here 23:06
TimToady it's fine by me too
construction time ops on "real" object can go in "new".
audreyt which means you will control BUILDALL by yourself 23:07
right?
if you override new, that is
TimToady the default BUILDALL is completely implicit generally
yes, explicit override of new
audreyt so new calls bless, bless calls BUILDALL 23:08
TimToady we expect people to redefine BUILD more often than BUILDALL
yes
audreyt and in the BUILDALL part, which visits BUILD for each segment of layout
and inside that segment, the object metaclass is constrained to only contain the layout of the already-built part (i.e. its superclasses) 23:09
and knows nothing about the yet-to-be-filled-in part
TimToady so perhaps we allow SUPER but not self
audreyt and so trying to use "self" as a full-fledged layout always fail
TimToady (calls, that is)
audreyt or maybe we don't have self.
er, jinx.
so submethod are even closer than subs this way 23:10
TimToady just got through speccing that self means the newish object...
self!privmeth would be okay
audreyt as is SUPER and quantified calls
TimToady since those are just subs
audreyt ok, maybe not quantified calls
but if 23:11
D is C; E is D;
and in D::BUILD time we actually have a D object
even if it's E.new calling it
TimToady well, my first inclination is to err on the side of "enough rope"
audreyt that may still work, as the layout match at that stage for D 23:12
mm, what is on that side again? :)
TimToady on the other hand, this is a good time to be conservative.
well, if someone is willing to go the trouble of saying self.MyClass::method to get at their own methods ahead of time, we should probably let 'em. 23:13
audreyt I think the problem largely goes away if SomeClass::BUILD always just see a SomeClass object as self
not as in liskov but as in concrete class
i.e. it's not a ChildClass-instance-being-filled-in operating under ParentClass's method table when ParentClass::BUILD is run 23:14
TimToady if we just disallow $.foo where $.foo is known to be $!foo here, that's probably okay for now.
audreyt but actually it's just a ParentClass instance, to be later augmented by ChildClass
this is strictly inheritence-is-delegation view 23:15
TimToady and maybe submethods merely carp a lot when you use $.foo where they think you should use $!foo. 23:16
audreyt but you can't use $!foo to assign to your parent class's slots
you have to use $.foo=
TimToady that's correct 23:17
audreyt even inside BUILD
TimToady that's not somehting a BUILD would carp about
audreyt so that use is lega
legal
cj audreyt: you mentioned that using mono as a runtime isn't out of the question. What steps need to be taken to get things moving?
TimToady my SUPER comment above
audreyt class C { has $.x is rw }; class D is C { has $.y is rw }; class E is D { has $.z is rw }
in D::BUILD
$.x=1 # is fine 23:18
$.y=1 # not fine; please write $!y
TimToady right 23:19
audreyt $.z=1 # not even possible
neither is $!z possible
23:20 mauke joined
TimToady though probably $.z isn't caught till pet peeve time. 23:20
audreyt cj: find someone to fly the #moose team and/or cmarcelo or me to the Ximian team (Boston? Utab?) :)
TimToady: point is that $.z fails with "method not found"
not "slot uninitialized"
I think.
TimToady "compatible with what?" 23:21
cj audreyt: Boston
audreyt TimToady: ok, I think we agree. will go make it happen at the code front :)
TimToady audreyt += * 23:22
audreyt TimToady: consider this:
class C { has $.x is rw }; class D is C { has $.x is rw } 23:23
does C::BUILD still fire and allowcate something
only to be later overriden?
i.e. if C is "has $.x is rw = die", it still dies
I think it's consistent, and natural fallout from the algorithm above
23:24 mr_ank joined
TimToady makes sense 23:24
audreyt nothingmuch: ^^backlog cursor^^^ TimToady ruled that Layout is determined per-class, and shadowing happens only on derived class, never globally. cheers :)
TimToady: and thanks for whack it out on spec-front :) 23:25
TimToady: the fun thing is that that means 23:26
class C { has $.x is rw = 1; method foo { $!x } } class D is C { has $.x is rw = 2 }
D.new.foo will be 1
D.new(x=>9).foo will still be 1
but it's probably natural. 23:27
"if you write $!x you give up on extensibility"
TimToady !extensible
audreyt hm wait. maybe the latter case is 9 after all
since C::BUILD also gets the x=>9 message
TimToady true 23:28
audreyt it's just the later assignment can't ever change that from outside
TimToady anyway, C's methods can still get at $!x despite override
audreyt but only C can do that
TimToady yup
audreyt which is excellent, because MP6 can represent this despite having no inheritence at all :) 23:29
audreyt remembers A12 said that was the plan all along.
TimToady yes, well, that was one of the basic design goals, to make sure private attributes have no influence on inheritance
indeed
aufrank takes back requests for class C { has @.x; has $.y := @.x[0] }, btw 23:37
svnbot6 r14663 | gnuvince++ | Added tests to t/operators/range.t to make sure that lists were forced to scalar context. 23:38
23:41 shobadobs joined
audreyt aufrank: hm? that is completely kosher except you have to write = $!x[0] 23:41
not :=
23:42 gnuvince joined
audreyt and not @.x 23:42
but @!x[0] should work just fine.
in general you can't := to either $.x or $!x unless you have a friendly layout 23:43
but p6opaque as I'm writing it is not friendly to that :)
aufrank is this idea of layout defined somewhere?
audreyt yes it's specced in S12 :repr 23:44
TimToady A12 originally
aufrank I confess I don't know when the term started springing up, but I haven't seen it until today
aufrank goes to look
audreyt layout is nothingmuch's term
it means a metaobject responsible for a representation
ie. :repr is a map from string names into layout objects
aufrank ok
so MOH is a layout for pugs 23:45
audreyt no, MOH is object model for pugs
in it I define a P6opaque layout
that is currently
TimToady most OO systems don't let you have pluggable layout, but this is specced in A12
aufrank gotcha
audreyt { staticSlots :: (Array Int Object), dynamicSlots :: (HashTable ID Object) }
aufrank so we could have all object as records like in OCaml if someone wrote the layout
audreyt where dynamicSlots is for the rubyish case of
eval " class C is also { has $!extra_field } " 23:46
23:46 frankg joined 23:52 mauke joined, Limbic_Region joined, polettix joined, hexmode joined, Coleoid joined, kane-xs joined, gantrixx joined, nekokak joined, mbradley joined, GeJ joined, wilx joined, spinclad joined, theorbtwo joined, Khisanth joined, perlbot joined, knewt joined, rgs joined, Grrrr joined, sri joined, cmeyer joined, lambdabot joined, eviltwin_b joined, Eimi joined, clsung joined, rafl joined, Yappo joined, jiing joined, kalven joined, tcliou joined, hcchien joined, revdiablo joined, buu joined, PerlJam joined, pmichaud_ joined, chip joined, webmind joined, plural joined, leo joined, audreyt joined, Juerd joined, wolverian joined, spoop joined, cognominal joined, takanori_ joined, takesako joined, Kattana joined, meppl joined, tokuhirom joined, aufrank joined, mr_ank joined, justatheory_ joined, Debolaz2 joined, beppu_ joined, beppu joined, prism joined, dvorak joined, woremacx joined, scw joined, AzureBOT joined, scsibug_ joined, norageek joined, ingy joined, nperez joined, qmole joined, masak joined, Odin- joined, araujo joined, svnbot6 joined, evalbot_r14660 joined, integral joined, cookys joined 23:53 jferrero joined, cmarcelo joined, crem joined, buetow joined, cjeris joined, Patterner joined, kane-xs_ joined, marmic joined, miyagawa_ joined, awwaiid joined, ruz joined, bennymack joined, TimToady joined, [particle] joined, cj joined, frankg joined, gnuvince joined, stevan_ joined, idiotmax joined, buubot joined, rafl_ joined, mugwump joined, kcwu joined, pjcj joined, nnunley joined, broquaint joined, gaal joined, amv joined, gugod joined, SamB joined, arguile_ joined, Shabble joined, Maddingue joined, pnu joined, drbean joined, kolibrie joined, Cugel joined, nipotaway joined, Ikarus joined, nine joined, cjeris left
audreyt aufrank: however, all I've said only applies if you called C.new(x=>1). 23:54
if you had instead written 23:55
C.bless({x=>1})
then none of it apply; you can always rebind $!x happily
because its layout is a Hash object that happily responds to mutable assignment.
the difference between C.bless(x=>1) and C.bless({x=>1}) is a subtle one :) 23:56
23:56 f0rth_ joined
audreyt ( S12:497 ) 23:56
zptao like chicks with surprises inside? 23:57
audreyt heh :)