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