-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 |