-Ofun: xrl.us/hxhk | pugscode.org | pugs.kwiki.org | paste: paste.lisp.org/new/perl6 or sial.org/pbot/perl6
Set by apple-gunkies on 11 November 2005.
audreyt tcliou: openfoundry is performing hardware upgrade right now? 02:21
tcliou: will it be back this afternoon? :) 02:22
rafl Isn't there a mirror somewhere? I'm interested in what kane has done on JIB.. :-(
audreyt svn.perl.org/perl6/pugs 02:23
rafl Is it really a 1:1 mirror? It has a trunk/branches/tags layout. 02:24
audreyt the trunk is 1:1 02:25
the tag is manually maintained but I tend to forget
rafl OK. Why doesn't pugs use a standard svn layout as well? 02:26
I, as the Debian maintainer, who cares a lot about releases, would like to have release tags.
kane-xs: ping
xinming rafl: that might be because of audreyt use freebsd 02:27
audreyt rafl: if you care about release tags, andis willing to maintain them, talk to Robrt to get a pugs commit bit over at svn.perl.org and maintain the tags/ there for me? :) 02:28
rafl audreyt: That's fine with me, but I don't see why we shouldn't have that at svn.openfoundry.org?
xinming: I don't see the connection here.
xinming well, Just kidding. :-P 02:29
audreyt rafl: mostly because I don't like areas in the main playground to be restricted tocommit
as tags/ definitely is and branches/ too
culturally, I'd like to encourage a single trunk with no roomfor accidental breaking-the-rules 02:30
my brain is strange. please bear with it :)
rafl audreyt: Why should it be restricted? :-)
audreyt rafl: free commits into tags/ doesn't quite make sense :)
rafl I actually know the situation of thinking that my brain is strange as I'm pretty trunk, err.. drunk. 02:31
audreyt: Why? Anybody could make a release tag. Maybe the guy who's currently doing the releases gets hit by a bus, which we all don't hope.. ;-) 02:32
audreyt I'd like to meet this guy you are referring to ;)
in any case. I'll talk with robrt into handing you a svn.perl.org commit bit 02:33
do you have a perl.org account?
rafl Already pinged him.
audreyt excellent
rafl Yes, I'm a parrot commiter as well.
audreyt maybe you can commit into pugs/ there already then 02:34
not sure... robrt may have separate ACL
rafl I won't try that now. :-)
But that reminds me to finally finish my svn server setup at perldition.org :-( 02:35
And perldition.org reminds me that I still need a funny, somehow perl-related, domain name as my provider grants me one for free.. 02:37
Any hints? :-)
audreyt purl.cc :) 02:39
xinming audreyt: which window manager you use please? xfce4 I use mostly died today. :-/ 02:40
audreyt I used to use ion 02:41
rafl audreyt: .cc is expensive.
audreyt but afterI upgraded the laptop I'm a happy metacity user
rafl audreyt: I'd prefer .org or .de or .net or something like that.
I can recommend wmii.
audreyt perl-r.us
rafl ion, but much cooler.
I don't get what's funny about perl-r somehow.. :-) 02:42
audreyt "perl R us"
as in "toys R us"
rafl *pling* 02:44
audreyt or how about something vanilla: perl5.org 02:45
perl5.net
both are free
as is lambdacamel.org
rafl perl5.* will be outdated pretty soon ;-) 02:46
xinming audreyt: metacity can do nothing without gnome in my opinion. :-/
audreyt xinming: er sure, gnome 2.12 user here
rafl: perl7.net then
rafl :-) 02:47
audreyt or p6doc.org to host documentations
rafl Is there a fixed name for sixpan yet? sixpan.org?
Or will it be on cpan.org? 02:48
audreyt cpan.org/perl6/ or cpan.org/jib/ is possible 02:51
talk to aevil if you'd like to populate it now
(and have it mirrored usually)
but sixpan.org would work happily too 02:52
brb
rafl I think it's impossible to merge the perl6 stuff to current cpan. What do you think? And I'd personally prefer a short url to the new cpan. Like sixpan.org.
But I fear I don't have the bandwith. 100mbit/s and 250GB free/month. 02:53
obra fwiw, I already have 6pan.com,net,org 02:55
rafl obra: I would prefer something without a number at its beginning. I'd register sixpan.org if you're fine with that. 03:01
obra Actually, jarkko and larry strongly preferred we stick with cpan.org
which is why I'm just sitting on them 03:02
Really a path under cpan.org that a site could mirror without mirroring all of cpan would be a huge win
rafl How to migrate cpan from perl5 to 6?
obra and not forking the cpan is an even bigger win
different hierarchy inside cpan.org
and really, it's not a migration. because both should stay live 03:03
rafl Well, perl6.cpan.org sounds good to me as well.
obra ftp://ftp.funet.fi/pub/CPAN/perl6/{modules,authors,etc}
a domain name doesn't really help
it's all about file hierarchy
rafl Of course. But I want something that's short to type and a long path name isn't what I want. :-) 03:04
obra ...why do you want this path?
what are you actually trying to do? 03:05
since, well, the tools should be the only thing getting to the site most of the time
I'm happy to make s.ly/6 redirect to wherever you want it to ;)
rafl I just want a short url to get to perl6's cpan. What I'm currently trying to do is to fine a nice domain name as I still get one for free from my isp.
obra ah. I'd not use your free domain for a perl thingy. 03:06
but I'm happy to make sure a very short url resolves to cpan for perl6 when the repo exists
rafl Well. Free for one year. 12/a afterwards.
But 12 EUR per year is nearly for free, imho. :-) 03:07
obra you can get com/net/org for that pretty easily :)
hey. there's no rafl.net
rafl I don't like .net domains to be honest.
I would have taken rafl.org though. 03:09
OK, so you think I should not register a domain for sixpan? 03:10
I would have everything I we need for it. Including 3rd level delegation and stuff.. 03:11
audreyt I suggest jib.bz 03:12
rafl jib uses gzip, bit bz2 currently ;-)
audreyt that can change ;) 03:13
rafl Also .bz is not for free as far as I see. Only .com/org/net/de is covered.
obra I think that we don't want a sixpan that's not the CPAN. 03:16
I say this in my "official capacity" as the Perl 6 Project Manager.
But! I'd love to see more of cpan for perl6 actually built.
which likely starts with getting a directory structure jhi likes and helping ANDK update pause 03:17
rafl obra: OK. I won't register sixpan.org then. 03:18
stevan_ audreyt: ping 04:36
audreyt stevan_: pong
stevan_ so I have read the Roles section of S12 and I have a thought 04:37
audreyt stevan_: they are replacing the switch -- turned out openfoundry was under DDOS since yesterday -- expected to be back within a few hours
stevan_ audreyt: okay, I have not gotten a lot of code written anyway,.. was chasing issue for $work
audreyt k
stevan_ but I was thinking,.. that maybe for Roles at this level 04:38
it might make sense to have an interface more similar to the original Traits (not p6 traits, but the Traits papers)
we would allow for explicit exclusion, and other things like that
I would rather make this part of the meta-role's responsibility than to force any compiler to have to do tricks to accomplish it 04:39
audreyt makes sense. 04:41
I'd like to see some tests that defines this behaviour
stevan_ ok
I am going to finish the roles as they are now designed, but give this more thought 04:42
having things like an explicit list of method/attribute requirements that a consuming class must fufill makes things much easier I think 04:43
these things never need to be seen by anyone but meta-model hackers
audreyt yup 04:47
stevan_ ok, back to roles then ... :) 04:50
oh audreyt, almost forgot,.. we will need to define $?ROLE as well 04:52
similar to $?CLASS
but this can wait
audreyt $?ROLE only makes sense in the role body? 04:56
stevan_ yes
audreyt but $?CLASS is runtime dispatched
not lexicallly determined
oh wait, $?ROLE is also that
never mind, I had levels confused 04:57
stevan_ :) 04:58
like I said,.. not critical I don't even use it in the bootstrap 04:59
audreyt k 05:09
I'll run to $job now... bbiab
stevan_ have fun
GeJ greetings all 08:13
gaal yo GeJ
GeJ morning gaal 08:14
gaal how do you find TaPL? 08:15
GeJ offending. I mean I never thought a book could give me such headaches. And to answer your following question, no, I didn't use it to hit my forehead :) 08:16
gaal :)
GeJ I really regret all those hours where I slept during the math classes... 08:17
gaal somehow sleep is something one only regets in hindsight. 08:18
GeJ Why don't teachers and professors simply advertise their class like this: "Please, don't sleep, you'll find this class useful in 10 years."
gaal i think they actually do, but at the time students hear that it's hardly convincing.
tea, brb.
GeJ coffee, brb too. 08:19
hi again 08:26
gaal xx 2 08:27
audreyt: ping
GeJ all the planets collapsed? 08:35
gaal ? 08:42
GeJ I get timeouts for planet.perl.org, planetsix and parrot 09:00
luqui doesn't 09:03
GeJ hi luqui 09:04
luqui hello
GeJ must be a routing issue then. Two big telcos must be playing "Mine's bigger than yours, show me the money" again 09:05
luqui :-) 09:06
GeJ hum, traceroute blocks on 7th hop. definitely routing. 09:10
How can somebody expect me to be productive if I don't get my morning dose of perl news. 09:11
luqui well, there's nothing new on planetsix
svnbot6 r8390 | luqui++ | Got quantification working, and fixed a bug in alternation. 09:22
GeJ New year's resolution : sync Luthor and pugs 6.28.0 with the FreeBSD ports 09:48
CPAN-centric question: is it bad practice to copy-paste-minorchange-rename a module if the maintainer timeouts? 09:50
luqui especially not if you rename and point to the original 09:51
if you didn't rename I could see that as being controversial
GeJ well, the problem is that one of svk's dependancies conflicts with a module I was using while reading chromatic's book. 09:54
svnbot6 r8391 | luqui++ | A few tests.
luqui so what's your plan? 09:55
GeJ well, svk depends on Audrey's VCP which in turns depends on podToHTML wich in turns depends on a very old version of Pod::Parser. 10:00
luqui and what is the conflict? 10:01
GeJ back in the days where podToHTML used an old version of Pod::Parser, the former had a Pod::Find on its own. Now, Pod::Parser has its own Pod::Find. both of them have different interfaces. 10:03
luqui I'd say that you should patch and re-upload under the same name... as long as you still pass all tests. 10:04
update version so people get yours instead of his
GeJ isn't that like stealing the guy's port?
luqui yeah, but you're not being malicious
and he still gets the "registered" version if he registered
If you really wanted to have "good style" then I'd email [email@hidden.address] and ask to be the maintainer of that module 10:06
since the real maintainer is no longer active
GeJ Oki, will do then. I will refactor the module, run the tests, propose the patch to the original author and in case of timeout, I'll follow your advice.
luqui I figure that kind of thing is fine as long as you're helping people and hurting nobody 10:07
GeJ thanks, I'll do it then 10:12
luqui ?eval "foo" ~~ /foo/ 11:04
11:04 evalbot_8389 is now known as evalbot_8391
evalbot_8391 *** Cannot parse PGE: foo *** Error: end of file Match.new( ok => bool::false, from => 0, to => 0, str => "", sub_pos => (), sub_named => {} ) 11:04
luqui ?eval "foot" ~~ /foo/
evalbot_8391 *** Cannot parse PGE: foo *** Error: end of file Match.new( ok => bool::false, from => 0, to => 0, str => "", sub_pos => (), sub_named => {} )
luqui ?eval "foot" ~~ /^foo$/ 11:05
evalbot_8391 *** Cannot parse PGE: ^foo$ *** Error: end of file Match.new( ok => bool::false, from => 0, to => 0, str => "", sub_pos => (), sub_named => {} )
Juerd PGE in Perl 6? 11:47
Sweet :)
luqui it's been there for a while 11:49
doesn't seem to be working presently
audreyt weird, it worksforme (parrot 0.4.0) 11:52
external parrot
luqui I think that evalbot embeds 11:54
or, wait
luqui checks
audreyt do you have parrot in path (if not embedded)? 11:55
luqui parrot 0.3.1
but I set PARROT_PATH... 11:56
shouldn't that override
looks like it's external
PUGS_EMBED='perl5' # not parrot
audreyt mm, not sure we support 031 anymore 11:58
try up to 040?
luqui it was feather's parrot 12:01
hmm, Juerd is here
Juerd, update parrot!
:-)
luqui builds it himself, too
Juerd Hm? 12:02
Location: eric256
luqui you run feather, right?
Juerd I'm only doing system administration of feather now, no additional things like providing pugs and parrot
audreyt Status: 301 12:03
Juerd It was too ambituous to do bouth
s/outh/oth/
luqui fair enough
audreyt luqui: I'll make the runtime executable path look at PARROT_PATH 12:06
svnbot6 r8392 | audreyt++ | * %ENV{PARROT_PATH} is now consulted in runtime for 12:13
r8392 | audreyt++ | external parrot invocations (eg. PGE).
r8392 | audreyt++ | (Set it to a directory containing the "parrot" executable.)
r8392 | audreyt++ | Requested by luqui++
luqui hm. I was going to try pge to see what kind of match object "x" ~~ /[[x]*]*/ should return 12:14
it infinite loops ;-)
audreyt not very surprised ;) 12:22
luqui how come? 12:23
audreyt I recall running into the same problem months before 12:24
luqui what's that p5 regex that causes exponential behavior? 12:26
hmm... there seem to be exportation problems 12:30
audreyt oh wow
what fun
$ perl -e '("a"x 9000) =~ /(a|a*)*/';
Bus error
luqui 9000?!
audreyt yeah, huge, no? 12:31
luqui interesting. works fine here.
audreyt on feather it takes 30000 to blow up
but still quite amazing
luqui there we go
theorbtwo Here perl -e '("a"x 10_000) =~ /(a|a*)*/'; finishes in a moment, but 100_000 segfaults. 12:32
(Again, very quickly.)
audreyt I'd rather an infinite loop than a segfault 12:33
theorbtwo perl -e '("a"x 24938) =~ /(a|a*)*/'; is the line, which is an interesting number.
So would I. 12:34
audreyt unpredictable segfault, even
luqui wait... does pugs use both parsec and happy? 12:35
audreyt just parsec 12:40
luqui configure seemed to probe for happy
audreyt cabal does that automagically
it's okay if it can't find it, no?
luqui I guess. I wouldn't know.
luqui doesn't think he appreciates cabal as much as he should 12:41
ingy hey audreyt 12:48
hi nothingmuch 13:00
luqui gaal, ping 13:02
hey audreyt, you helped gaal with his export patch, right?
audreyt luqui: a bit 13:14
luqui n/m, I found what I needed 13:16
it appears that the package part of the environment is not swapped out correctly when calling an exported sub
audreyt aye, quite possible 13:18
you fixed it?
luqui no, but I found the place I should be trying to fix it
it's a little tough to track down, because if I say my &foo = &Bar::foo, then everything works correctly 13:19
ahh, there we go
superfluous Syn "sub"
svnbot6 r8393 | luqui++ | The lexical environment of exported subs was not being swapped out correctly. 13:22
luqui ?eval "Hooray, evalbot is back, finally" 13:27
evalbot_8393 "Hooray, evalbot is back, finally"
luqui ?eval "does pge work" ~~ /pge/ 13:28
evalbot_8393 *** Cannot parse PGE: pge *** Error: end of file Match.new( ok => bool::false, from => 0, to => 0, str => "", sub_pos => (), sub_named => {} )
svnbot6 r8394 | luqui++ | We don't know how to delegate exports yet, so let's just use File::Spec::Unix explicitly for now.
luqui damn
huh... it works with the exact same pugs on the console 13:29
maybe it's the safe mode thing
uh, how do I set safemode? 13:33
oh stupid me
learn how to use your shell luqui
ingy hmm googling the swastika character works, but not the snowman character 13:34
luqui ?eval "does pge work" ~~ /pge/; 1 13:40
13:40 evalbot_8393 is now known as evalbot_8394
evalbot_8394 *** Cannot parse PGE: pge *** Error: end of file 1 13:40
luqui that's so weird
audreyt some sort of ulimit? 13:41
luqui is investigating 13:42
Juerd ingy: Then probably they classified the swastika as a letter :) 13:45
luqui ?eval "does pge work" ~~ /pge/ 13:47
evalbot_8394 Match.new( ok => bool::true, from => 5, to => 8, str => "pge", sub_pos => (), sub_named => {} )
svnbot6 r8395 | luqui++ | Liberalize the memory limit in evalbot a little bit. 13:48
ingy Juerd: but not the snowman!!!
luqui there, now PGE works in evalbot
Juerd ingy: Everyone knows a snowman is not a letter :P
luqui 8 13:49
hmm, all it needs now is some arms: /8\
no, that looks more like a tent
webmind Juerd, it's not?
luqui hmm, all it needs now is some arms: -8-
there we go
see, the snowman is too a glyph 13:50
webmind rewrites his last letter :)
Juerd ^
-8-
Blah, too much spacing :)
luqui not in my font
oh, for the caret
yes, in my font
theorbtwo ļ½„
o
O
luqui stop using unicode that confuses my computer!
theorbtwo . 13:51
o
O
ingy luqui: upgrade!
theorbtwo Plain ole ascii.
luqui would, but he isn't sure what to upgrade
theorbtwo OS?
luqui gentoo 13:52
ingy just wrote a program called the Dominator
theorbtwo Install more fonts, assuming it shows a "I don't have this char" box.
luqui ingy, I think you need to write a Tick module that uses Spoon 13:53
ingy yeah yeah yeah
theorbtwo Makes things comply with the document object model, using whips and chains?
ingy theorbtwo: :)
luqui cool! a prof is going to let me sit in on his "topics in programming languages" grad seminar 13:59
Juerd luqui: A whole seminar about topics? 14:11
luqui :-) 14:20
the topic of the topics is "performance on modern machines"
Juerd Ah 14:23
svnbot6 r8396 | kane++ | * Repository.pm has a packages() accessor now 14:31
r8396 | kane++ | * repo.pl gets packages from pkg.pl, not from a `find`
r8396 | kane++ | * add JIB::P::Installable to represent repository packages
r8396 | kane++ | * fix jib::package to delegate to j::p::installable
r8396 | kane++ | * add some more constants
r8396 | kane++ | * jib::repository uses J::P::Installables now
r8396 | kane++ | * add basic tests for J::P::Installable
luqui audreyt, ping 14:34
I'll ping, and then I'll leave. How considerate. & 14:37
luqui thinks xern should get a handle on his irc client :-) 15:33
er, a client on his irc handle ?
GeJ Well, syncing his RTC modem to the lights on his Xmas tree was a bad idea if you ask me 15:35
audreyt rehi 15:37
araujo hi audreyt 15:43
audreyt :) 15:45
luqui hmmm... 15:48
should monkey but clone?
?eval my $a = [1,2,3]; my $b = $a but { $_.[2] = 4 }; say $a; say $b 15:49
15:49 evalbot_8394 is now known as evalbot_8396
evalbot_8396 OUTPUT[124 124 ] bool::true 15:49
luqui is that correct?
audreyt I don't think monkey but does a deep cloning
it is likely to be expensive
luqui then how much cloning is done? 15:50
because certainly a little bit is
audreyt assignment
I think
luqui that makes sense
is .clone deep?
?eval my $a = [[1,2],[3,4]]; my $b = $a.clone; $a[0][0] = 42; say $b 15:51
evalbot_8396 Error: Pattern match failure in do expression at src/Pugs/Prim.hs:1077:4-14
luqui uh oh
heh. nobody knows the answer to that question :-) 15:52
luqui thinks .clone should be shallow
actually... it's probably specified
audreyt clone is shallow? 15:53
luqui I would think that to be a more common want 15:54
shallow copy of an object
deep copy gets tricky to specify in some cases, shallow doesn't.
I expect a .deepcopy or .clone(:deep) also to exist...
hmm. I guess not. I seem to recall this sort of thing being specced. 15:56
wait. What does assignment buy us for monkey but? 16:08
Hmm. but is a referential rebless. Does that mean that reblesses don't work like they do in perl 5? 16:10
audreyt I don't think you can rebless anything.
you can bless things, but not rebless them.
in the minilang calculus, the o_class field is read only. 16:11
luqui okay, then what is it that "but" does?
audreyt it's a convenient syntax for "given" and then return the same topic
luqui not monkey but, regular (human) but 16:12
0 but True, etc.
audreyt it's just an assignment. 16:14
s12.
(($anonymous = 0) does answer).answer = 42;
$a = $anonymous;
$a = 0 but answer(42); # desugared into above
luqui okay. what does "does" do? 16:16
audreyt it derives a new anonclass 16:19
luqui and....
audreyt blesses the old opaque
into a new object
with a different .id
and return it
luqui so that's not a rebless? 16:20
audreyt I don't think .id survives a "does", no
they may share the same underlying opaque.
luqui hmmm...
gaal meows
luqui I'm just thinking that "does" is probably going to be done in void context most of the time
theorbtwo Rebless: my $x = bless {}, "foo"; $y=$x; bless $x, "bar"; $y->isa("bar")
gaal hi everybody 16:21
luqui hiya gaal
theorbtwo Well, you could possibly do $foo does=answer(42), but that's ugly.
GeJ I wish you all a Merry Christmas (or whatever your $LOCAL calls it). Go easy on the food, the chocolate and the alcohol 16:24
luqui anyway... the test is: my $x = Foo.new; $y = $x; $y does Bar; say $x.does(Bar); 16:25
gaal does anybody rely stronly on assignment chaining now? I'm inclined to break it knowingly, fix the import stuff, and have it added back afterwards.
luqui oh, a less controversial question: how are hashes stored in pugs?
there's no VHash constructor
gaal also, are we going to allow things like my $a := my $b ::= my $c = 8? 16:26
luqui ack... that ::= in there scares me...
gaal uh huh
luqui let's see, that means... $b and $c are set at compile time
but $a is not
I'm guessing
gaal i have no idea what it means :) 16:27
in this context, what difference does it even make if it's compiletime or not?
luqui my $a := my $b ::= my $c = 8; say $a; # is this "" or "8"?
er 16:28
wrap a BEGIN around that say
then it matters
gaal heh.
maybe we can simply disallow chained assignments of different kinds 16:29
luqui that's not a "chained assignment" 16:30
that's just my $a := (my $b ::= (my $c = 8))
and it should have a well-defined semantic 16:31
audreyt gaal: just kill chained assignment for now.
luqui oh, gaal, you're working on that
audreyt they need a redo anyway based on inline declarators
luqui which is why you're interested
luqui agrees with audreyt
luqui agrees with audreyt again (inline declarators)
gaal "inline declarators"? 16:32
also: audreyt, can you explain again how lexical aliases of "our" vars are supposed to be used, 16:33
and if they *are* used, what's supposed to happen here? --
my $x; our $x
audreyt inline declaration
$y = 6 + my $x;
gaal ahh, literally, "in a line" :-)
audreyt what happens there is the compiler should raise an error. 16:34
gaal why? in p5 it's totally cool to do that; the my var masks the our var until the scope ends.
as I am sure you know :)
luqui yeah, and we killed that
for various reasons
gaal luqui: all these new scoping rules are quite.. a mouthful. are they bunched together in any one document? 16:35
(if not I'll start one)
luqui gaal, "all" which? 16:37
name two.
gaal namespaces can be lexical
luqui ah, that.
gaal exports can change the kind of visibility a variable has. 16:38
luqui you mean define.
they can't "change"
gaal I'm talking about my $x is export(:our)
luqui yeah. they define the scope of $x in the calling package. 16:39
er, calling... scope?
gaal use Xs::Module :state<$x>
luqui calling whatever
gaal, look at S11 16:40
gaal "unit"?
luqui I'm going to go with "caller"
gaal S11 doesn't have enough detail for me
unless there've been recent commits?
luqui then you need to bug Larry and p6l
gaal btw, does "temp" work on both my and our variables? 16:41
the lexical alias stuff seems to suggest that it does 16:42
audreyt yes, it does 16:43
it also works on arbitrary methods.
if they are "is rw"
gaal I wish there were a p6 version of "coping with scoping" (HOP also had an interesting digression on lifetime scope vs. visibility scope, no?) 16:44
hmmm remind me, method foo is rw means an lvalue sub?
audreyt aye 16:45
audreyt gives up trying to import comments from use.perl tonight
gaal soooo, temping that means locally overriding the lvalue sub? why can't you do that with a my method?
ah, dynamic scopt 16:46
scope.
of course.
this cartesian product has a lot of dimensions :)
audreyt no, it means overriding the container returned by the lvalue sub
gaal eep!?
audreyt temp foo(); 16:47
vs
temp &foo;
different things.
I was talking about foo().
gaal i understand temp &foo;
what does temp foo() mean?
audreyt my $foo; sub foo is rw { $foo }; temp foo(); 16:48
does the same thing as temp $foo
luqui that's the reason that we require you to return a proxy object for $foo.bar = 42;
instead of transforming it into an argument passed to .bar() 16:49
gaal what S is this?
6?
luqui 12?
audreyt 12
luqui one of those two
stevan_ hello all :) 16:50
16:50 stevan_ is now known as stevan
audreyt stevan: hey! 16:50
you again showed up when I'm about to sleep :)
gaal yo stevan
stevan audreyt: yeah,.. something to do with the earths rotation I think :P
audreyt: I am about to commit the roles work,.. all that is missing is the "apply this to a class" part 16:51
which shouldnt take me too long actually
although it will be broken per-S12
audreyt er, uhm, I need more context (or look at the commit) to understand that
stevan well, it will handle method conflicts,.. but it cannot die 16:52
same for attrs
and it will not correctly handle stub methods either 16:53
but none of the prototypes ever did
like I said,.. I am going to move the role model closer to the original trait model
it just works better at this meta-level
audreyt: we also need to think about Prim methods vs. user-defined methods 16:54
I ran into an issue with them and using anon-opauqes
because the anon-opaques (ala - the counter) use self.new_opaque() 16:56
which puts self in the o_class slot.,... which can be problematic because when I try to call get_attr on that opaque
luqui so audreyt, how are hashes stored in pugs?
stevan it looks for hte MRO,.. which is not always going to be there (depending upon the context in which the opaque was created) 16:57
gaal luqui: Pugs.Types.Hash
included into AST.Internals IIRC
luqui I mean, there's no VHash
there's only VList 16:58
oh... probably a ref
gaal type VHash = Map VStr Val
svnbot6 r8397 | stevan++ | PIL/Native/Bootstrap.pil
r8397 | stevan++ | - more Roles work, we have collect_all_roles() and does() now :)
r8397 | stevan++ | t/pil/metamodel/*
r8397 | stevan++ | - added test for does() and collect_all_roles()
integral hmm, isn't Data.Map actually a btree rather than a hash?
luqui yeah
gaal hmmm actually type VHash = Map VStr Val is wrong, isn't it? keys can be arbitrary objects 16:59
luqui yeah
audreyt yup, the minilang container type will fix that
integral I thought it was speced that they have a .hash method to turn themselves into the actual key to be used?
stevan audreyt: ok
audreyt: workarounds are fine for now,.. and I commented them heavily 17:00
I am going to implement the broken Role resolver for now,.. and then over the holiday work out exactly how the more trait-ish model shoudl work
gaal I was really amused when I learned that C# has a .hashval method in class Object, just like Java, so they obviosuly realized how important this was, but they didn't think it reason enough to add hashes to the language itself.
luqui I'm sure it's in a library 17:01
gaal sure, there's a HashTable type 17:02
with an oo interface
but no syntax for lookups etc.
(mm slices..)
brb
luqui why do you need syntax for lookups?
That was always an annoyance of perl to me, that hashes and arrays used different syntax 17:03
gaal huh? say %ENV<USER>
luqui Sure, perl has syntax for lookups, but why do you need it
gaal because you use it a lot? :)
luqui yeah, in a dynamic language you do 17:04
integral why have syntax for addition?
luqui static languages use hashes a lot less
integral luqui: how do you know that's not just because there's a lack of syntax for them?
luqui it's because a lot of what perl programmers use hashes for, static language programmers have to use records 17:05
gaal I don't see a reason off hand why staticness should have anything to do with it.
luqui because the values are of different type
gaal brb for real though.
integral oh, you mean for building objects? I usually use them to be able to look up records by some key
luqui "look up records by some key"?
I don't understand
integral luqui: I was processing a logfile the other day, and I used a hash to keep track of all the machine names I'd seen 17:06
so I was using a hash to lookup the record containing counters for that machine
luqui yeah, that's a place where a static language would use a hash too 17:07
my other point is, what's wrong with %ENV['USER']
in a static language, that is especially viable
integral I'd be surprised if you thought my use of hashes was uncommon.
luqui it needs to be more than 'common' to warrant its own brackets. 17:08
brackets are sparse and valuable
integral you haven't seen all the uses of two character brackets? eg. [: ... :], [| ... |] etc
luqui sure I have 17:09
but do you think hash lookups deserve one-character brackets?
okay, I want to get off syntax for a moment
er, not really. I want to get of the exact syntax for a moment
what's wrong with %ENV['USER']? 17:10
integral actually, I'm surprised nothing uses the function call syntax for it
luqui er, yeah, that too
gaal rehi. I just realized that Perl 6 can in fact unify lookup syntax; P5 couldn't.
audreyt %ENV('USER');
luqui gaal, how come?
integral luqui: I'd say nothing since we have different sigils for arrays and hashes, so they tell us about the different behaviour
luqui oh, I know
gaal varying sigils.
luqui yeah
integral, and even when we don't...
$var<key> 17:11
integral ugh. %{$var}<key> would solve that one
luqui well, I think the type of $var would tell you that
gaal what's that supposed to be, subscript on a symbolic lookup?
luqui but then you don't get autovivi 17:12
gaal isn't that $::($var)<key> ?
audreyt pugs.blogs.com/pugs/2005/02/day_1_pugs.html
luqui which I guess is the most important argument
gaal, he was just doing a hash lookup
integral gaal: I was taking it to be the same as ${$var}{key} in perl5
gaal riht.
but with a g.
audreyt: cute
is that the new home for your journal? 17:13
audreyt aye
integral feels a long time ago :)
audreyt probably still going to crosspost back to use.perl
wolv audreyt, 404 link in the newest post
gaal 302 actually
audreyt wolv: fixed 17:14
wolv hey, why can't I change my nick? argh, I hate services
luqui does somebody know how to clone a ref?
I mean, from Haskell level?
that is, I want to take a ref and put its contents into a new ref
gaal op3 "Object::clone"
luqui gaal, you're right! Except... that's what I'm currently writing 17:15
gaal heh
audreyt I thought we had that
luqui clone dies if you try to clone an array
audreyt ah. true
gaal but not a hash?
17:15 wolv is now known as wolverian
luqui and a hash 17:16
and an anything that's not a VObject
gaal I was wondering what the "p" arg was for...
luqui $obj.clone(attr => newval)
audreyt luqui: there's no way to clone a ref in the default runcore yet
luqui so I have to do it by hand? 17:17
Switch on IType?
audreyt er, that's the easy part
luqui hmmm?
audreyt the hard part is that you don't know which underlying storage is used
since each one is cloned differently
luqui Isn't that what I mean by "IType"? 17:18
audreyt yeah, but you can't switch on it, since it's existentially quantified
luqui oh
audreyt the only general way to do it is to add a clone method
luqui so I need to add a vtable method
audreyt to ArrayClass etc
yes
luqui I can do that
audreyt and lift it to Types.Object level as a general object_clone 17:19
excellent
do that then :)
stevan audreyt: nice to see the journal back :) 17:20
luqui hmm.. is it possible to create array_create, etc? 17:21
array_empty :: (ArrayClass a) => a
or will I run into a wall
audreyt luqui: and follow it by an array_store?
I think just _clone will be better
as readonly things can be cloned 17:22
which is just id
but if you do empty+store
then that's not gonna work
luqui hmm, yeah
I was just trying to factor out some code
audreyt nodnod
luqui If you clone a slice, does it lose it's association to the source array? 17:23
yes.
audreyt yes.
luqui ooh, that's a problem
array_clone :: a -> Eval a 17:24
Qiang stevan, where is the journal ?
luqui but that one would mean it's: array_clone :: IArraySlice -> Eval IArray
stevan pugs.blogs.com/
audreyt obra: please update the planets feed to point to pugs.blogs.com/ 17:25
stevan audreyt: would you mind if I added that to the title?
audreyt sure
luqui maybe clone is just (Array a) => a -> Eval IArray
audreyt I'm abandoning the "Day #xyz" format as well
luqui which would mean it wouldn't have to be a method
Qiang stevan, thanks.
stevan The Return of the Journal : pugs.blogs.com/ | pugscode.org | pugs.kwiki.org | paste: paste.lisp.org/new/perl6 or sial.org/pbot/perl6 17:26
luqui thinks that makes more sense 17:26
stevan Qiang: no problem
Qiang i would like to see a journal entry or short writeup on "where is pug now and where it is heading next" :-)
audreyt luqui: I agree.
Qiang: good, I'll do that :)
gaal audreyt: use.perl.org/~autrijus/journal/23918 is ported incorrectly to pugs.blogs.com/pugs/2005/03/index.html
possibly other long entries are truncated as well. 17:27
luqui thinks the hardest part about hacking on pugs is figuring out in which file to put stuff
Qiang audreyt, :)
audreyt gaal: </div> handling is broken 17:29
gaal audreyt: LJ gets that kind of thing right, but I guess you already made a new home :) 17:30
audreyt gaal: no, the scraping part of WWW::UsePerl::Journal
already fixed, reimporting 17:31
luqui hmm.. I can't figure this out 17:32
how do you create a new reference?
gaal LJ also has efficient backups.. but I'll shut up now :)
audreyt luqui: MkRef
luqui I doubt it
audreyt create anything that's an instance of ArrayClass
gaal luqui: eval "\my $x", :lang<perl5>
audreyt then MkRef (IArray that))
luqui That would mean my clone function would be the identity
audreyt huuh. 17:33
luqui I want to readRef, and then make a reference from what I read
oh.
audreyt you probably don't want readRef.
you want to use the native storage and clone from it.
luqui Why would I want to do that? 17:34
audreyt also see how eg. newArray is implementeed
stevan Horray, ... we have (slightly broken) roles!!!
audreyt stevan: !!
stevan resolve was really easy :)
audreyt luqui: because 3.clone should be 3?
or rather, \3.clone should be identity?
luqui should it? 17:35
it seems like cloning would get rid of constness
audreyt if so, then don't bother adding vtable... you can indeed switch on reftype and call newArray etc manually 17:36
luqui that's what I said a long time ago
audreyt readRef --> newArray
luqui newArray... that's what I was looking for
audreyt newHash too
luqui once it was a -> Eval IArray, there was no need for a vtable 17:37
audreyt aye
since you can case into a
luqui I wonder if .clone on stuff like Code should be identity 17:38
I guess there's no way to change Code, so it doesn't matter
audreyt er. 17:40
destructive .wrap does change Code.
Juerd 18:43 < luqui> I guess there's no way to change Code, so it doesn't matter
Never liked that :)
I've always seen subroutines as variables
And anonymous subs as values.
luqui that's not what I meant by change
audreyt in fact, you can destructively assign into Code using clever .wrap 17:41
Juerd And it'd be fun to be able to do &foo.unshift( { die if foo } )
Though we do get wrap.
audreyt so it only takes a simple reopened implementation of infix assignment
and the rest of array interfaces
all built on this .wrap thing. 17:42
luqui uh, except .shift
audreyt including .shift
which is unwrapping a preprocessor
luqui oh.
audreyt s/preprocessor/prehook wrapper/
luqui then you could definite all sub primitives 17:43
and build everything out of wrappers of the identity
and have mutable code
gee... I think they call that LISP
no wait 17:44
I think they call that functional programming
yeah, that's the ticket
very new research area
nobody knows whether it'll work yet
okay I'll stop
audreyt ;) 17:45
.wrap does assume something on the runtime
and you can't change the signature, just the body, I think
so it's somewhat constrained 17:46
luqui wait... why the heck am I writing this function? 17:49
how does \$x work!?
and why can't I find it in Parser.hs? 17:50
audreyt it's just a spre
symbolic prefix
in op1 "\\" on Prim
nothing special about it
luqui oh. I guess I was looking at the wrong optable 17:51
audreyt stevan: I grokked your code. I think we want new infixes.
luqui ahh, you took the "referential context" approach
audreyt $foo.bar; # userdefined dispatch
luqui which explains why \$x is so damn broken
audreyt $foo!bar; # userdefined priv dispatch
$foo->bar; # prim dispatch 17:52
stevan: the -> part can change...
luqui: er, right, I explained that in toronto, and I'm fixing it using fglock/iblech's container class now in the new runtime 17:53
luqui yeah, I seem to recall something like that
luqui looks forward to the new runtime
audreyt but at that time _nobody_ knows how container classes work
many weeks after larry ruled that $foo.method never goes to container 17:54
luqui except for the fact that I'll have to throw away all my pugs internals knowledge
man, that'll feel good :-)
audreyt but @foo.method always go to container
luqui s/after/before/?
audreyt and so invalidated the entire old runtime assumption
s/after/after toronto/
luqui oh, "many weeks after, larry ruled..." 17:55
audreyt yeah
and he introduced the special form variable($foo)
which can't be expressed in old runtime
luqui ahh
audreyt and I don't even know how to bind &variable except as a macro
etc etc :) 17:56
luqui macros are okay
audreyt they are, and I think it even desugars into something okay
luqui gives up on clone
but inexpressible? 17:57
audreyt variable($foo).method
what Exp does this turn to?
you need a new form of Var that does not look into value, or some such 17:58
luqui maybe it's the other way around
audreyt oh, you mean
say $x;
desugars into
say $x.value;
?
luqui uh huh
audreyt and it's entirely sigil-driven? 17:59
luqui yeah...
audreyt I think that can work, yes
luqui kinda goes along with the whole context-sigil thing
audreyt so $obj.method always becomes $obj.value.method
luqui and the cool thing:
say @foo; # where @foo is in list context
desugars to
say @foo.elems; 18:00
which is the defining property of the @ sigil
assuming context can always be known at compile time
can it?
audreyt mm, you assume compile time context knowledge
sub blah { @foo }
my $x = blah;
my @y = blah;
luqui right...
returns.
stupid things
It's a form of parametric polymorphism, come to think of it 18:01
audreyt it's crude return type polymorphism.
luqui this will be important to the coersion and context proposal I'm thinking about maybe starting to work on 18:02
:-)
audreyt cool... I look forward to it. for now I assume context is always passed in at runtime as an extra argument.
for function calls, that is
luqui that's probably a good bet; assuming the most dynamic of things
audreyt and if I can statically determine context later, that's just dead code elimination. 18:03
same applies to type based multiple dispatch.
luqui you just pass the types of the arguments?
audreyt (where types are passed in as arguments)
yeah
luqui sounds like Haskell's typeclass polymorphism :-)
audreyt oh, sure, that technique is entirely lifted from Jhc. 18:04
audreyt has been studying compilers :)
luqui good thing to study when you're writing one
(al: hint, hint)
man I'm mean 18:05
stop it luqui!
audreyt chuckles
stevan: thoughts about using differnt infix for priv/pub/prim methcalls?
stevan: of course, the pub methcall is just desugared to the "send" prim 18:06
not sure if we want a desugar prim for private meth calls
if we want one, maybe call it "smuggle"
oh, btw: pugs.blogs.com/audrey/
gaal: the </div> bug should be fixed now 18:22
luqui thinks that perl 6 should have an &id, er, &ident, er, &identity 18:31
there are too many good words that start with id 18:32
well, identifier and identify, and that's about it. But those are both good.
audreyt I like idle ideas myself. 18:33
luqui those aren't very good words in programming :-) 18:34
which was the implicit context
but I guess I forgot to pass it in
stevan audreyt: ping 18:36
audreyt: I think the different infixs are a good idea 18:37
I like . for user-public and ! for user-private 18:38
I am not sure about ->
we could go ole school Ada and use `
luqui what's -> ?
stevan for prim methods
get_attr, set_attr, etc. 18:39
audreyt stevan: I changed my mind already
luqui ahh
stevan LOL
audreyt: ok,... whats the new plan
audreyt $x.foo(1, 2); # native method call
$x:foo(1, 2); # desugars into $x.send('foo', 1, 2)
$x!foo(1, 2); # desugars into $x.send_private('foo', 1, 2)
stevan ok
luqui audreyt, it's fun being the language designer for a change huh?
audreyt luqui: the difference is I write implementation first :) 18:40
(already got the three implemented)
stevan audreyt: that works for me, when can I expect a commit?
audreyt: also, what about making o_class rw? 18:41
I would like to make all the anon-opaques inherit from a Null class, and Null should then be it's own class (like ::Class is) 18:42
ideally it would not have add_method either
or will this all be taken care of with the containers anyway so I shouldnt worry
audreyt just a bit... ::C desugars into :.send('C') now 18:45
probably not the best idea
everything wants the colon
stevan what is that for?
audreyt that's a bug.
a misfeature, even
I think we go back to Ada.
stevan ok
stevan starts to write his air traffic control system with the mini-language ;) 18:47
audreyt rofl
you want to make anonopaques inherit from Null
that's fine
stevan cool 18:48
svnbot6 r8398 | audreyt++ | * two sugar forms in PIL.Native: public method call as $x`foo
r8398 | audreyt++ | and private method call as $x!foo.
audreyt why again does that have to be rw?
stevan I suppose it doesnt if I have a ::Null class
audreyt can we call that class :: 18:49
?
literally null
or is it too cute :)
stevan ::.new_opaque()
audreyt yeah
stevan no I kinda like it,.. it wont clash with anything
audreyt committed. 18:50
svnbot6 r8399 | audreyt++ | * PIL.Native.Eval: class "null" is now bound to the 18:51
r8399 | audreyt++ | never-clash-with-anything name "::".
audreyt ::.new_opaque now works as of r8400 18:52
svnbot6 r8400 | audreyt++ | * er, typo.
audreyt anything you need before I finally go to sleep? :)
stevan nope,.. this will hold me till tomorrow :)
audreyt excellent :)
stevan muchas gracias
audreyt ditto
audreyt waves &
stevan adios 18:53
obra hi
stevan hey obra 18:54
obra hey stevan
audreyt: I'll update it. Why did you move your blog?
audreyt obra: much easier organization for one; meaningful categories for another; multimedia stuff; multiple updates per day; 18:55
separation of OT entries into another subblog (not to be syndicated by planetsix) 18:56
obra *nod*
all makes sense
audreyt eventual need of guess blogging or coblogging
_much_ better layout
et cetera :)
obra laughs 18:57
audreyt but the bottom line is that it makes me more motivated to journal
which is what counts :)
obra That matters.
audreyt s/guess/guest/
obra had guested
svnbot6 r8401 | luqui++ | Small redesign, half tests.
gaal lj users: www.livejournal.com/userinfo.bml?user=pugs_rss 19:16
svnbot6 r8402 | stevan++ | PIL/Native/Bootstrap.pil 19:27
r8402 | stevan++ | - full (but partially broken) Roles support 19:28
r8402 | stevan++ | - I really need to rethink some things about the role model
r8402 | stevan++ | t/pil/metamode/*
r8402 | stevan++ | - added roles.t to test basic role composition
audreyt stevan: ping 19:57
stevan: I'm thinking about reversing the roles of ` and . 19:59
stevan: both to agree with the surface syntax
and also because later on in Bootstrap most calls are to userdefined 20:00
also we can make `send() fallback to native method if not defined
because this does not (yet) break any of your code, I've committed it :) 20:06
20:08 knewt_ is now known as knewt
audreyt & 20:09
svnbot6 r8403 | audreyt++ | * PIL.Native: switch meanings of `method and .method: 20:10
r8403 | audreyt++ | $obj`method; # native call
r8403 | audreyt++ | $obj.method; # $obj`send("method")
r8403 | audreyt++ | This allows dynamic interpolation of methods:
r8403 | audreyt++ | $obj.$method; # legal
r8403 | audreyt++ | $obj!$method; # also legal
r8403 | audreyt++ | $obj`$method; # illegal
r8403 | audreyt++ | Adjust the pretty printer to recognize all three forms.
r8403 | audreyt++ | I wonder if we should introduce two extra node types
r8403 | audreyt++ | instead of depending on `send -- that of course depends
r8403 | audreyt++ | on whether we actually use dynamically interpolated
r8403 | audreyt++ | methods. Need more discussion with stevan++.
stevan audreyt: ping 20:22
Khisanth interpolated method calls or is that something else? 20:36
stevan Khisanth: it is for the mini-lang (aka PIL2) 20:38
audreyt: when you wake up we should talk about all this 20:45
I think you forgot to add "send" too, or at least I cannot see where is it implemented
also the last commit does not seem to do anything, everything only works with . still 20:46
but we can talk about this more when you awake
I think actually we could take this opportunity to rework the dispatcher, maybe even to move the user-defined method dispatcher into the mini-language 20:47
this would allow more flexibility maybe 20:48
or it might be insane,.. not sure which
luqui just heard himself say "It doesn't seem like multiplication would be a Syn" 21:07
but it is in some religions!
svnbot6 r8404 | stevan++ | PIL/Native/Bootstrap.pil 21:16
r8404 | stevan++ | - mostly just comments re: why Roles are incorrectly implemented
r8404 | stevan++ | and how. More on this later, I need to think some.
r0nny re 22:16
leo hi folks: what is the current P6 syntax for testing address equality? 22:20
luqui well, if things had "addresses", it would probably be better 22:24
do you mean spec or pugs?
leo, sorry, didn't say your name 22:26
leo spec or pugs (yes ;)
$a =:= $b # or some such? 22:27
but at Parrot level
both PMCs are at the same address
luqui well, =:= tests bindings 22:29
but you probably want ===
which tests referential equality (except for value types) 22:30
leo hmm
luqui that is: my $x = 1; my $y = 1; $x === $y; # true
Khisanth wonders if it is really better to have 4 different operators to test if something is equal
luqui we're trying to make value types referentially transparent
leo that's different and implementation dependant
luqui leo, how? 22:31
how is it implementation dependent?
leo you know python?
luqui a little
no details
but you mean "language dependent"?
leo id(2) = id(1+1)
luqui that's true? 22:32
leo id(200) != id(100+100)
luqui ack!
leo ==
svk_frank Python ! Rules
leo so how to test for the same value, if some are cached
i.e reuses
luqui well, anyway, in perl 6, === tests for value equality for value types 22:33
leo === looks to me just like ==
luqui visually?
or semantically?
leo no above
semantically
luqui it pretty much is. except it works on strings too 22:34
and Foo.new === 91875985 will *always* be false, even if that's where Foo lives
but that's perl 5 semantics anyway
uh... so, not sure if I answered your question 22:35
leo either it is assuming that the rhs constant is always the same, or it just is a compliated wqy to spell == or eq
luqui but in summary, there is no way to tell the difference between 1 and 1 in perl 6.
okay, um: Foo.new == Foo.new 22:36
coerces Foo.new to a number before comparing
=== does not, it just tests the reference
leo which ought to be different as these are generating 2 different objects?
luqui yes 22:37
leo ok
luqui (unless Foo is declared to be a value type, which it usually isn't ;-)
leo but still 1 === 1 is a can of worms
luqui leo, how so?
we do it not by testing address or id, but by overloading ===
leo a native int doesn't have and address
avar ?eval [*] 1..10 22:38
22:38 evalbot_8396 is now known as evalbot_8404
evalbot_8404 3628800 22:38
luqui right, and === doesn't tests "address equality", it tests "sameness"
for our definition of "sameness"
we want 1 to be the "same" as 1
leo ah ok
is there an address eq op?
luqui nope
value types are referentially transparent. you can't ever tell one from the other
(well, not without hackery) 22:39
leo okie then - that answered it - thanks
luqui sure
?eval sub foo (@a) { say @a.perl } foo([1,2,3]) 23:30
evalbot_8404 OUTPUT[[[1, 2, 3],] ] bool::true
luqui ?eval sub foo (@a) { say @a.perl } foo(1,2,3) 23:31
evalbot_8404 Error: No such sub: "&foo"
avar ?eval (1,2,3) 23:46
evalbot_8404 (1, 2, 3)
avar ?eval sub x(*@x) { say @a.perl }; x(1,2,3);
evalbot_8404 Error: Undeclared variable: "@a"
avar ?eval sub x(*@x) { say @x.perl }; x(1,2,3);
evalbot_8404 OUTPUT[[1, 2, 3] ] bool::true
avar there
you have to use *
luqui that's not what I was testing 23:48
but thanks anyway
avar mm 23:50