|
Ingy Needs Your Help => apocalypse.kwiki.org | Pugs 6.2.8 released! | pugscode.org |pugs.kwiki.org | paste: sial.org/pbot/perl6 | www.geeksunite.net Set by ingy on 2 August 2005. |
|||
| obra | brentdax: you're putting perl6 on cpan? | 00:00 | |
| svnbot6 | r6060 | iblech++ | docs/talks/Anatomie_eines_Compilers_am_Beispiel_von_Pugs.latex: Fix date. | ||
| brentdax | obra: Yes. | 00:01 | |
| obra | That's an interesting predecent :) | ||
| brentdax | It needs to happen sooner or later. | 00:02 | |
| obra | Yes, once pause knows how to understand perl6 dists. | 00:03 | |
| brentdax | As far as PAUSE is concerned, this is basically a random tarball of files which includes a README, META.yml, a few other files, and a lot of *.pm files that don't seem to be Perl 5 modules. I don't mind that situation. | 00:08 | |
| stevan | iblechbot: re: Perl6.MetaModel | 00:16 | |
| it is somewhat behind the Perl6-MetaModel | |||
| iblechbot: I am currently trying to factor out all circularity and Perl 5 magic from the P5 version | 00:17 | ||
| which is partially inspired by how the JS version did things | |||
| so they will eventually converge | |||
| putter | sigh. 1hr+ cleaning up spam on the oz wiki. | 00:31 | |
| everyone knows about the perl6 curse, right? | |||
| QtPlatypus | putter: No | ||
| putter | "If you use perl6 to generate spam, great misforture will befall you in your life." | 00:32 | |
| It seems too late to pursuade folks of such a curse on p5, but with p6 we can start fresh. | |||
| ;) | |||
| QtPlatypus | Apprently that Russian spammer who was beaten to death was thinking of using perl6. | 00:33 | |
| putter | That's it! Incontravertable proof! :) | 00:34 | |
| QtPlatypus | If just thinking about it is that deadly, immaginin what fate will befell you if you accully spam. | ||
| putter | Oh, the horrors. They hardly bare thinking on. | 00:35 | |
| There is a story pattern, from some part of the planet which escapes me at the moment, that basically goes <minor topical thing goes wrong> <rapidly escalating chain of concequences> <"Everybody dies">. | 00:37 | ||
| Di42lo | pugs eq perl6 eq parrot or what ? | ||
| scrottie | Pugs is a Perl 6; Parrot is a Perl 6 (approximately...) | 00:38 | |
| putter | (pugs -lim-> perl6) > parrot | ||
| Di42lo | whats -lim ? | 00:39 | |
| QtPlatypus | Limit | ||
| Di42lo | anyways...is anyone gonna use thie language ? | 00:40 | |
| i dont see people use it | |||
| QtPlatypus uses it, expermenally. | |||
| putter | p6 is the language spec; pugs is a rapidly developing but still partial implementation of it; parrot is a vm, one backend of pugs, and perhaps to be the reference implementation of p6. | ||
| wolverian | Di42lo, as putter said, there is no complete implementation of it, yet. | 00:41 | |
| Di42lo | say there is complete implementation of it...will people use it ? | ||
| in your opinion | |||
| wolverian | in my opinion? yes. | ||
| putter | Di42lo: it didn't exist at all at the beginning of February. now much exists, but no-one things its currently ready for production use. | ||
| Di42lo | it should be the next generation of perl ? | ||
| putter | s/things/thinks/ | ||
| wolverian | I wouldn't mind if it was called something else than perl - but yes, it is certainly the next generation of perl. | 00:42 | |
| (grok that!) | |||
| Di42lo | the gonna change everything in this perl6 ? | 00:43 | |
| s/the/they/ | |||
| i mean ...the syntax | |||
| and the modules | |||
| etc.. | |||
| wolverian | it is not backwards compatible. it is not completely different. perl5 will run on parrot, as well. perl6 code will be able to use perl5 libraries, and vice versa. | ||
| putter | most p5 is still valid p6, with minor changes. p6 is largely a superset, but some p5 things have been altered, usually superficially, to keep it all manageable. | 00:45 | |
| Di42lo | and when it gonna be out ? | ||
| dudley | Christmas. | ||
| scrottie | Di42lo: do you program in Perl 5? | ||
| QtPlatypus | Before christmas | 00:46 | |
| wolverian | when it is done. :) | ||
| putter | to which the cannonical question is "Which Christmass?" and the answer is "Dont know yet!". | ||
| scrottie | long before it's done >=) | ||
| Di42lo | scrottie: yes i do | ||
| okay...i guess then cya in christnas :D | 00:47 | ||
| putter | Currently, I get frustrated at about ~1k lines of code. On that scale, I hit problematic bugs. I expect before the end of the year, I personally will be using p6 for real but non-mission-critical projects. | 00:49 | |
| scrottie | I can't just start using Perl 6. I have to go cold turkey and stop using Perl 5 first. | ||
| putter | Why? | 00:50 | |
| scrottie | Ever watch a PHP programmer try to learn Perl? About every five minutes they get frustrated, shout "but I know how to do it in PHP!" and march off. | ||
| Problem is, I know "how to do it" in Perl 5. | 00:51 | ||
| putter | Ah. Well, that's what we need "use PHP; ... no PHP;" for... :) | ||
| scrottie | heh | ||
| Too old to learn new languages. Trying to force myself to learn Haskell. Distraction sure is easy to find sometimes. | |||
| putter twiddles thumbs, whistles, and looks at something reeeaally interesting in the corner. "pugs a distraction? from a job search? who me?" | 00:53 | ||
| scrottie | If I'm ever forced to get a real job, I'm starting a commune so that no other free software programmer must befall the same fate. | 00:54 | |
| QtPlatypus llooks equilly guilty | |||
| wolverian follows suiit | |||
| er, one i less. | |||
| putter | Aside from full bore use OtherLanguage;, I hope we'll be able to also do use OtherishArrays;, which lexically makes, in this case, Array objects look like they have methods which behave consistently with what one expects in Other. | 00:55 | |
| scrottie | I mentioned that to The Conway once, and he gave me this disguested, contemptious scowl. | 00:56 | |
| putter | That's the other half of having domain specific languages... the objects participate. | ||
| scrottie | er, The Damian. | ||
| scrottie coughs | 00:57 | ||
| putter | Tough. You just can't scale nicely without it. And with p6, I can't be stopped... uuahhhhhahahaha. | 00:58 | |
| putter wonders what depths of linguistic and engineering insanity are going to be plumbed on p6... | 00:59 | ||
| That reminds me, I was going to write a ClassNameFromPath() macro, because I'm tired of having to both move a file and edit it every time I change a package/class name. Moving should be enough. | 01:01 | ||
| package ClassNameFromPath(); ... or class ClassNameFromPath()::Foo { ... } | |||
| Pity pods dont(?) have an interpolation mechanism. | 01:02 | ||
| Perhaps pods need a { <perlcode> } interpolation phrase, so you can Filter::Simple your pod text. | 01:04 | ||
| scrottie | have Makefile.PL template out the POD into its own file. | ||
| putter | or define pod as a simple language operating on a simple dom, with the option of embedded p5/6 direct manipulation of the dom. | 01:06 | |
| scrottie scowels | 01:07 | ||
| putter | Tcl has the nice capability to create a single executable file, with a read-writable filesystem overlay and databases inside. I tend to think of doing things with fewer files, rarther than more. | 01:08 | |
| Note that that's a stand-alone executable - no site installation required. | 01:09 | ||
| plpyrb just can't do stuff like that yet. | 01:10 | ||
| scrottie | That *is* nice. The Damian has a Inline::Files, but I'm not sure how that would work on databases, or anything complex | ||
| And doubtful it works if you generate a binary | |||
| putter | It's interesting how each language community picks a different set of things to focus on, and then with self-selection, wanders off in its own direction. | 01:11 | |
| shapr | There's a nice meta-community though. | 01:12 | |
| mugwump | Isn't PAR like that, putter ? | 01:13 | |
| putter | Sometimes. The prolog folks for instance, still, after wha, 20+ years, still cant agree on such challenging questions as, what shall we call chdir()? | ||
| scrottie | PARs extract themselves. | ||
| heh | 01:14 | ||
| putter | PAR? putter goes off to google... | ||
| scrottie | Perl ARchive | ||
| putter | Ah, neat! Yes, though it's not clear pars are easily self modifiable. | 01:16 | |
| tnx mugwump | 01:17 | ||
| Hmm... env PUGS_BUILD_OPTS=precompile_prelude=false make gives me a pugs, but without the Prelude. But perhaps my first interrupting the Prelude/Run compilation broke something. | 01:31 | ||
|
01:36
jiing_ is now known as jiing
|
|||
| putter | Hmm, and ./pugs -Isrc/perl6 -MPrelude doesnt do it... | 01:59 | |
| autrijus | putter: .par being .zip files can't modify themselves. | 02:08 | |
| but .exe built using pp can easily self modify. | |||
| lathos shipped a standalone httpd, firefox, database and a maybole app as a single .exe a while ago. | 02:09 | ||
| putter | :) are there details somewhere (you can trivially find)? | 02:14 | |
| svnbot6 | r6061 | putter++ | Pugs::Internals::rule_pattern and rule_adverbs now work on all VRules (thay hadn't on PCRE VRules). | ||
| autrijus | yes, the par documentation, also "perldoc par.pl" | 02:15 | |
| also the PAR tutorial. | 02:16 | ||
| putter | thank you. | ||
| autrijus | no problem. :) | ||
| $work & | 02:22 | ||
| iblech: if you are backlogging, PIL2 will gen code for class Foo exactly the same way as for sub Bar; namely anonymous class construction at BEGIN time, then bind to symbol table. | 02:23 | ||
| putter | hmm... did :g ever work on PGE or PCRE? (doesnt seem to currently) | 02:24 | |
| autrijus & | |||
| QtPlatypus | putter: I've never seen it working. | 02:25 | |
| autrijus | ?eval "aaa" ~~ m:P5<g>/(.)/ | 02:27 | |
| evalbot6 | 3 | ||
| autrijus | ?eval "aaa" ~~ m:P5:g/(.)/ | 02:28 | |
| evalbot6 | 3 | ||
| autrijus | ?eval join ',', "aaa" ~~ m:P5:g/(.)/ | ||
| evalbot6 | 'a,a,a' | ||
| autrijus | looks not exactly wrong | ||
| putter | ?eval my @a = ("aa" ~~ m:perl5:g/a/); @a | 02:30 | |
| evalbot6 | [] | ||
| putter | Ok, so PCRE side should work, though something I don't understand is happening with my tests. PGE-side clearly drops the flag, but that doesnt matter yet because PGE is still ignoring :i. | 02:31 | |
| ?eval my @a = ("aa" ~~ m:perl5:g/(a)/); @a | 02:32 | ||
| evalbot6 | [MkMatch {matchOk = True, matchFrom = 0, matchTo = 1, matchStr = "a", matchSubPos = [], matchSubNamed = {}}, MkMatch {matchOk = True, matchFrom = 0, matchTo = 1, matchStr = "a", matchSubPos = [], matchSubNamed = {}}] | ||
| beckheng | POEä½ ä»¬åØcygwinäøå®č£ čæå? | 02:33 | |
| putter | ?eval my @a = ("abab" ~~ m:perl5:g/(a(b))/); @a | ||
| evalbot6 | [MkMatch {matchOk = True, matchFrom = 0, matchTo = 2, matchStr = "ab", matchSubPos = [], matchSubNamed = {}}, MkMatch {matchOk = True, matchFrom = 1, matchTo = 2, matchStr = "b", matchSubPos = [], matchSubNamed = {}}, MkMatch {matchOk = True, matchFrom = 0, matchTo = 2, matchStr = "ab", matchSubPos = [], matchSubNamed = {}}, MkMatch {matchOk = True, matchFrom = 1, matchTo = 2, matchStr = "b", matchSubPos = [], matchSubNamed = {}}] | ||
| beckheng | sorry. | ||
| autrijus | beckheng: hey, #perlchina is the zh-cn language channel :) | 02:34 | |
| (and no, I havn't installed POE under cygwin.) | |||
| beckheng | autrijus: irc newbie. :( | 02:35 | |
| f0rth is new, too | 02:36 | ||
| putter | sigh. so in p5, /aa/ behaves like rx:p5/(aa)/ but /a(a)/ behaves like rx:p5/a(a)/ and not /(a(a))/ :( | 02:37 | |
|
02:38
beckheng_ is now known as beckheng
|
|||
| putter | err, all with g's. | 02:38 | |
| autrijus | putter: I think that's a simple bug in pcre handling code in Prim -- fixes welcome, I really gotta run. | ||
| putter | go go go! :) & | 02:39 | |
| autrijus | Prim.Match line 234. | ||
| putter | got it. go! :) | 02:40 | |
|
02:57
beckheng_ is now known as beckheng
|
|||
| dudley | gaal: ping | 03:12 | |
|
03:38
beckheng_ is now known as beckheng
03:40
beckheng_ is now known as beckheng
|
|||
| autrijus | rehi | 03:43 | |
| scrottie waves hi | 03:44 | ||
| autrijus | :) | 03:47 | |
| brentdax | Would it be appropriate to send the WWW::Kontent announcement message to perl6-announce? | 03:58 | |
| (Or one of the other perl6-* lists, for that matter.) | 04:00 | ||
| dudley | I would think so. perl6-announce could use a little more traffic :-) | 04:01 | |
| autrijus | yes :) | 04:02 | |
| brentdax: go for it | |||
| brentdax | Is it even possible to send to p6-a? lists.perl.org says it's a read-only list. | ||
| autrijus | I assume that it means that ask gets to moderate it. | 04:04 | |
| feel free to cc p6[cl] on your first announcement as well :) | |||
| brentdax | Alright. | ||
| svnbot6 | r6062 | Stevan++ | Perl6::MetaModel - | 04:06 | |
| r6062 | Stevan++ | * converting method object to single closure factory to create | |||
| r6062 | Stevan++ | the different kind of method types | |||
| r6062 | Stevan++ | - everything done except SubMethods need to work out the force_call() issues | |||
| r6062 | Stevan++ | * removed all deprecated ::Method files | |||
| putter | Hint request: How can I get a Val from a VMatch? | 04:11 | |
| brentdax | Okay, sent. | 04:13 | |
| pasteling | "putter" at 66.30.119.55 pasted "VList [match] isnt quite right" (21 lines, 712B) at sial.org/pbot/12216 | 04:26 | |
| putter | any thoughts before I call it a night would be appreciated... | 04:27 | |
| scrottie | here's a thought: stay awake a little bit longer ;) | 04:32 | |
| putter | ;) | 04:40 | |
| good night all. & | 04:41 | ||
| autrijus | hi Darren_D1ncan. | 04:47 | |
| Darren_D1ncan | hi Autrijus | 04:48 | |
| my lightning talk is tomorrow | |||
| autrijus | good luck :) | ||
| xinming | where to download the whole Synopsis in a package please? | 05:01 | |
| class MyStruct is rw {...}. so anyone here can tell me what "is rw" mean here? for a variable, I know. What about for the class definition? | 05:04 | ||
| autrijus | xinming: it means that `is rw` is applied to all member variables. | 05:05 | |
| it's just a shorthand | |||
| Darren_D1ncan | will do ... fyi, the building may close shortly ... if I go offline, don't worry, I should be back 10-15 mins later | 05:07 | |
| if I'm not, then worry | |||
| er sorry, I wrote this in the wrong IRC window | 05:08 | ||
| ayrnieu | We'll still worry about you. | 05:09 | |
| xinming | autrijus: thanks | ||
| autrijus | np :) | 05:10 | |
| xinming | hmm. I think if the after synopsis is finished. the perl 6 is "actually" out. | 05:11 | |
| dudley | aren't member variables rw by default? | ||
| brentdax | No, they're ro by default. | ||
| dudley needs to reread some synopses... | |||
| brentdax | (The ro/rw distinction only applies to the accessors.) | ||
| xinming: Take a look at Perl6::Bible. | 05:12 | ||
| xinming | brentdax: thanks. | 05:14 | |
| gaal | dudley, pong | 06:00 | |
| dudley | gaal: Just wanted to let you know that install_dir in config.yml installs the perl5 stuff in the right place, but the perl6 stuff goes wherever your perl5 install is. | 06:17 | |
| gaal | eek | ||
| Aankhen``, ping | 06:18 | ||
| dudley | I think passing PREFIX=whatever to Makefile.PL does the same thing | ||
| gaal | that was his patch | ||
| IIRC | |||
|
06:27
beckheng___ is now known as beckheng
|
|||
| nothingmuch will demo pugs in August Penguin 4 soon. | 07:06 | ||
| any special requests? | |||
| castaway_ | a song? | 07:10 | |
|
07:10
castaway_ is now known as castaway
|
|||
| nothingmuch | uh, sure, why not | 07:16 | |
| gaal | Aankhen``, ping | 09:43 | |
| Aankhen`` | Hi. | 09:44 | |
| gaal | hey :) | ||
| Aankhen`` | What's up? | 09:45 | |
| gaal | dudley reports some borkage with install_prefix | ||
| Aankhen`` | install_dir, you mean? | ||
| gaal | er, yes, sorry | ||
| Aankhen`` | OK. What's the borkage? | ||
| gaal | can you look into that? he says the perl6 stuff gets installed to the same place as p5 stuff | ||
| Aankhen`` | No way! | 09:46 | |
| What OS is he on? | |||
| gaal | dudley, about? | ||
| Aankhen`` | Oh $#@!. | ||
| It worked fine for me when I tried it. -_- | |||
| And I don't understand why /anything/ would be installed under anything except the PREFIX dir. | |||
| gaal | it is under prefix | 09:47 | |
| Aankhen`` | So he set the install_dir to the same thing as his Perl installation? :-S | ||
| gaal | but w/o differentiation between p5 and p6 parts (i think) | ||
| my fever is getting worse, i kinda can't debug anything right now :/ | 09:50 | ||
| Aankhen`` | Awww. :-( | ||
| Better rest. | |||
| gaal | yeah, started taking antibiotics today. this is, as they say, teh suck. | 09:51 | |
| Aankhen`` | Hmmm. | 09:52 | |
| Could you add a line to INSTALL warning that if install_dir is specified in config.yml, /everything/ will be installed under that directory? | |||
| gaal | sure | 09:53 | |
| Aankhen`` | (and so, if you specify your Perl directory, files in there may be overwritten) | ||
| Thanks. | |||
| My SVK is still b0rked. | |||
| gaal | ok | ||
| castaway mumbles something about openfoundry and opera | 09:54 | ||
| gaal | is the NOTE about PREFIX in INSTALL yours? | ||
| Aankhen`` | No. | ||
| Hrm, I think that was dudley. | |||
| gaal | svn praise confirms. | 09:55 | |
| okay, i'll add the warning. please be on the lookout for him and investigate this together? | |||
| Aankhen`` | A'right. | 09:56 | |
| gaal | thanks! | ||
| Aankh|Clone | In the Makefile, I can't find anything that installs anywhere except under my Perl directory (this is without using PREFIX). | 10:00 | |
| gaal | added; bbl & | 10:02 | |
| svnbot6 | r6063 | gaal++ | warnings about PREFIX and install_dir until issues are fully understood. | 10:06 | |
| Aankh|Clone | I have to go shower, BBIAB. | 10:07 | |
| clkao | Aankhen``: what went wrong with your svk? | 10:08 | |
| Aankhen`` | clkao: The Perl bindings for Subversion on my computer appear to be b0rked, so SVK is b0rked as a result. | 10:55 | |
| I keep getting a message about `set_path` not being a method of SVN::Ra. | |||
| # whenever I run `svk sync` | |||
| clkao | Aankhen``: win32? i got the same report. bad package builder | 11:03 | |
| Aankhen`` | Yes. | ||
| Package builder? | |||
| clkao: Is there any way to fix it? | 11:08 | ||
| clkao | Aankhen``: er, rollback to older version of svn ? | 11:17 | |
| Aankhen`` | SVN, not SVK? | ||
| clkao | yes, it's svn/perl problem. provided by the svn package | ||
| Aankhen`` | Alright. | ||
| Doesn't seem to help. :-\ | 11:31 | ||
| clkao | (!) | 11:32 | |
| if you kill the svn and back to the svk1.0 win32 binary ? | 11:33 | ||
| Aankhen`` | That'd probably work... I was hoping to be use 1.02, though. I had the 1.00 binary earlier, which was working fine. | 11:34 | |
| s/be use/use/ | 11:37 | ||
| clkao | find matthewd on #svk and see if he can make a new win32 binary? | 11:38 | |
| Aankhen`` | OK. | ||
| Thanks for the help. :-) | |||
| meppl | @blubb.end and @blubb[-1] dont seems to work. is there still anything prefab to find out the last peace of an array? | 11:43 | |
| Aankhen`` | Last peace? :-S | 11:44 | |
| Oboy, nearly a hundred revisions to sync. | 11:47 | ||
| clkao++ | |||
| meppl | last array-index | 11:49 | |
| Aankhen`` | Ah. | ||
| Dunno of anything prefab; what about `@blubb[@blubb - 1]`? | 11:50 | ||
| notThis | Hi. Can anyone give me the url of the subversion repository that includes the official perl6 docs (synopses etc)? | 11:51 | |
| svnbot6 | r6064 | Aankhen++ | r6092@tef-base: Aankhen | 2005-08-04 17:24:18 +051800 | 11:56 | |
| r6064 | Aankhen++ | * Prelude: added explicit invocants for IO, Iter methods. | |||
| notThis | Nevermind, I found it: svn.perl.org/perl6/doc/trunk | ||
| meppl | aankhen, it returns always nothing | 12:00 | |
| not like perl5 | |||
| Aankhen`` | How so? | 12:06 | |
| pugs> my @foo = (1, 2, 3, 4); @foo[@foo - 1] | |||
| 4 | |||
| autrijus | rehi! | 12:22 | |
| Pugs 6.2.9 released | pugscode.org | pugs.kwiki.org | paste: sial.org/pbot/perl6 | www.geeksunite.net | 12:23 | ||
| Aankhen`` | Hi autrijus. :-) | 12:24 | |
| autrijus | hey. how's life? | ||
| autrijus is back from $work and into another typhoon | |||
| Aankhen`` | Pleasant. | ||
| It's raining outside, so it's cool. | |||
| autrijus | yup | ||
| Aankhen`` | And clkao suggested I rollback SVK to 1.00 for now, so I did, and now it's working. | 12:25 | |
| autrijus | cool. | 12:26 | |
| Aankhen`` | And I just finished listening to Reanimation. | ||
| autrijus | looks interesting. | 12:27 | |
| Aankhen`` | Oh, cool, I just understood what svn:keywords is for. | 12:28 | |
| svnbot6 | r6065 | iblech++ | * Perl6::Pugs: Grammar fix. | 12:53 | |
| r6065 | iblech++ | * util/livecd/mklivecd.pl: Adjust default initrd size again. | |||
| r6065 | iblech++ | * PIL2JS: PIL::Parser: Unbreak parsing of escaped strings (e.g. \n, \\, etc.). | |||
| meppl | aankhen, sorry, i had some problems with my router. did you say something to me apart from @blubb[@blubb -1]? | 13:29 | |
| Aankhen`` | [17:30:33] <meppl> not like perl5 | ||
| [17:30:40] * kolibrie (~kolibrie@cworth.org) has joined #perl6 | |||
| [17:36:18] <Aankhen``> How so? | |||
| [17:36:18] <Aankhen``> pugs> my @foo = (1, 2, 3, 4); @foo[@foo - 1] | |||
| [17:36:18] <Aankhen``> 4 | |||
| meppl | +1 | ||
| autrijus | ?eval my @foo = (1..4); @foo[@foo.end] | 13:30 | |
| evalbot6 | \4 | ||
| Aankhen`` | meppl: You sure you don't have an outdated Pugs? | ||
| wolverian | ?eval ("a".."c").end | 13:34 | |
| evalbot6 | 2 | ||
| svnbot6 | r6066 | iblech++ | PIL2JS: Infrastructural support for Perl6.MetaModel. | ||
| r6066 | iblech++ | * PIL2JS.pm: The --pugs option wasn't properly honoured, fixed. | |||
| r6066 | iblech++ | * PIL2JS.js: Die if the MetaModel wasn't loaded. | |||
| r6066 | iblech++ | * pil2js.pl: Support linking the MetaModel in. | |||
| r6066 | iblech++ | * jspugs.pl, README: Add option to set the path to the MetaModel. | |||
| r6066 | iblech++ | * PIL: Very minor cosmetic fix. | |||
| wolverian | hmm. is there a .last, or so, to get the element directly? :) because [-1] is so hard to type... | ||
| autrijus | whoa, the metamodel is in for js? | 13:35 | |
| wolverian: sadly &last is taken to mean loop control | |||
| ?eval multi last (@x) { @x[-1] }; (1..4).last | 13:36 | ||
| evalbot6 | \4 | ||
| wolverian | hmm, good point. wouldn't be good to overload the meaning. | ||
| autrijus | there you go | ||
| wolverian | s,meaning,word, | ||
| thanks :) | |||
| autrijus | :) | ||
| Limbic_Region | s/last/end/ | 13:37 | |
| @array.end in p6 == $#array in p5 | 13:38 | ||
| which with autoderefing makes $aref.end so much nicer than $#$aref | |||
| ?eval (1..4).end | 13:40 | ||
| evalbot6 | 3 | ||
| Limbic_Region | which is obviously not the last element - duh | ||
| autrijus | right :) | ||
| Limbic_Region crawls back under a rock | 13:41 | ||
| svnbot6 | r6067 | scook0++ | * Initial stab at some Haddock docs for Parser.hs | 13:46 | |
| r6067 | scook0++ | * Formatted CodeGen.hs' poem for Haddock :-) | |||
| r6068 | fglock++ | * documentation updates | |||
| meppl | so | ||
| it does not work with attributes which i gave no value | 13:47 | ||
| but thats correct? | |||
| (class-attributes) | |||
| # pugs -e 'class La {has int @.s; method la() {say @.s.end;}}; La.la' | 13:51 | ||
| *** No compatible subroutine found: "&end" | |||
| at -e line 1, column 42-49 | |||
| -e line 1, column 54-59 | |||
| cognominal_ | ?eval $_ = "toto" s/.*/if (1) { 2 } else { 3}/e; print | 13:52 | |
| evalbot6 | Error: unexpected "s" expecting operator, ">>=><<", "\187=>\171", "=>", "::=", "**=", "xx=", "||=", "&&=", "//=", "^^=", "+&=", "+|=", "+^=", "~&=", "~|=", "~^=", "?|=", "?^=", ":=", "~=", "+=", "-=", "*=", "/=", "%=", "x=", "Y=", "\165=", "|=", "^=", "&=", "=", postfix conditional, postfix loop, postfix iteration, ";" or end of input | ||
| cognominal_ | oops | 13:53 | |
| ?eval $_ = "toto"; s/.*/if (1) { 2 } else { 3}/e; print | |||
| evalbot6 | Error: unexpected "e" expecting term postfix, operator, postfix conditional, postfix loop, postfix iteration, ";" or end of input | ||
| cognominal_ | hum, I am not sure how to specify a perl5 s/// | 13:54 | |
| wolverian | s:Perl5/// | ||
| cognominal_ | I was wondering if "if() {} else {}" would still act as an expression (ie returning a value unlike a C statement) | 13:57 | |
| wolverian | the perl6 way to do that is: s/foo/{ if 1 { 2 } else { 3 } }/ | 13:58 | |
| { }s interpolate as code in regexes and strings automatically | |||
| (the s there is a plural marker, not a perl flag :) | |||
| as a block returns the last expression evaluted in it, foo is replaced by either 2 or 3 | 13:59 | ||
| meppl | # pugs -e 'class La {has int @.s; method la() {@.s = (); say @.s.end;}}; La.la' | 14:02 | |
| -1 | |||
| wolverian | ?eval @foo.end | ||
| evalbot6 | Error: Undeclared variable: "@foo" | 14:03 | |
| wolverian | ?eval my @foo; @foo.end | ||
| evalbot6 | -1 | ||
| wolverian | right. should work with 'has' too | ||
| (I think. :) | |||
| meppl | ?class La {has int @.s; method la() {say @.s.end;}}; La.la | 14:05 | |
| aeh | |||
| whatever | |||
| meppl # pugs -e 'class La {has int @.s; method la() {say @.s.end;}}; La.la' | |||
| meppl *** No compatible subroutine found: "&end" | |||
| eval | |||
| autrijus | ok, ok, I'll import the metamodel :) | 14:06 | |
| autrijus proceeds to do so | 14:08 | ||
| svnbot6 | r6069 | iblech++ | * PIL2JS: pil2js.pl: Fix Perl6.* module loading. | ||
| r6069 | iblech++ | * Perl6.MetaModel: Perl6.Class, Perl6.Object, Perl6.MetaModel, Perl6.MetaClass: | |||
| r6069 | iblech++ | Added if(Perl6.ModuleToBeLoaded == undefined) guards around require()s. | |||
| r6069 | iblech++ | This is because require() uses document.write("<SCRIPT..."), which of course | |||
| r6069 | iblech++ | doesn't work when running under Spidermonkey's bin/js. | |||
| r6069 | iblech++ | All Perl6.MetaModel tests still pass; additionally ./runjs.pl -e 'say "Hi"' | |||
| r6069 | iblech++ | loads the MetaModel now (but doesn't use it yet). | |||
| meppl | :-P | ||
| stevan | iblechbot: feel free to remove the "require()" stuff in the metamodel | 14:09 | |
| it was mostly for my testing convience | |||
| autrijus | stevan: so, anything I should watch out before importing? | 14:10 | |
| or are you not_quite_done yet? :) | |||
| stevan | autrijus: I will never be "done" :) | ||
| autrijus | okay then :) | ||
| stevan | and to be honest, it would be helpful to have other people looking/working on it | ||
| autrijus | noted | 14:11 | |
| stevan | it helps me be sure I am on the right path | ||
| autrijus | the mmd is only hinted at 80_code, right? | ||
| stevan | autrijus: yes, and Lukes Class::MultiMethods::Pure actually finished that thought too | ||
| autrijus | very well :) | 14:12 | |
| you think luqui's approach is sound? if yes I'll look into importing it too | |||
| stevan | I have to do some source diving on it, I only skimmed the docs | ||
| I think luqui's approach is an attempt to prove to Damian that luquis approach works :) | 14:13 | ||
| LordNlkon | sial.org/pbot/12233 | 14:16 | |
| Can somebody help me ? | |||
| stevan | LordNlkon: you might have better luck on #perl | 14:28 | |
| this is for Perl 6 | |||
| castaway notes the sneaky use of "might" there | 14:29 | ||
| LordNlkon | i know | 14:31 | |
| i just found a way to resolve it | |||
| :P | |||
| needed an module for LWP | |||
| thx anyway | 14:32 | ||
| stevan | autrijus: Class::MultiMethods::Pure seems logical, but to be honest, some of this stuff goes over my head | 14:48 | |
| autrijus | nodnod. | 14:49 | |
| I'll deal | |||
| stevan | ok, I will be around for the next 8 hours or so if you have any questions :) | ||
| autrijus: it might make it easier to port things if you do not try to bootstrap it initially | 15:02 | ||
| svnbot6 | r6070 | autrijus++ | * symbol formalism. | ||
| stevan | see: JS and Java versions | ||
| both are based on the perl versions | 15:03 | ||
| and so theoretically can end up being bootstrapped | |||
| iblech: we can remove the namespace hacks in the JS metamodel too | 15:07 | ||
| svnbot6 | r6071 | autrijus++ | * snapshot checkin of PIL.hs before importing metamodel. | 15:13 | |
| autrijus | stevan: ok. some very meta questions | 15:18 | |
| stevan | autrijus: fire away | 15:19 | |
| I will try to give very meta-answers | |||
| autrijus | I'm coming from the haskell side, so lots of purity related issues first | 15:20 | |
| stevan really wishes he had starting documenting this stuff earlier | |||
| autrijus | I understand that the attributes themselves are mutable cells. | ||
| stevan | how do you mean attributes? | ||
| instnace attributes? | |||
| autrijus | yes. | ||
| stevan | yes | 15:21 | |
| the metaclass holds attribute definitions | |||
| autrijus | also, there is an "environment" | ||
| stevan | hola iblech :) you are just in time for the meta-discussion | ||
| autrijus | that is also mutable | ||
| for example by _apply_class_to_environment | |||
| are there other mutable cells in this game? | |||
| stevan | yes, but this is to allow for perl5 sugar | ||
| it could likely be removed | 15:22 | ||
| however an "object environment" which supports class lookup by name is not a bad idea | 15:23 | ||
| stevan is pondering the "other mutable cells" question | |||
| autrijus: I dont think there are any other mutable cells | 15:24 | ||
| however this is conditional on the bootstrapping | |||
| autrijus | ok. so persumably all the pop/shift/etc can be gather/take'ized | ||
| since they are lexical in nature | |||
| stevan | because the metaclass is just an instance like what is created by Perl6::Object->bless | ||
| autrijus | yes I understand :) | ||
| what do you think about bootstrapping the environment? | |||
| that is, the package space. | 15:25 | ||
| stevan | I am not sure how one would go about that? | ||
| you mean create a Package Class? | |||
| that is possible | |||
| mugwump was going along those lines in the early metamodel | |||
| autrijus: much of the push/pop stuff is in 2 contexts | |||
| 1) manipulation of container types | 15:26 | ||
| 2) support for things like $?CLASS and $?SELF and next METHOD | |||
| which were hacked in there | |||
| and probably should not work in the same way in the Haskell version | |||
| although that is your choice | |||
| autrijus | ok. | 15:27 | |
| (I'm talking also about perl6 version) | |||
| stevan | I see ?$CLASS and $?SELF as lexicals which are rebound for each method execution | ||
| autrijus | nod. | ||
| stevan | they are not globals since they are not accessible outside of their context | ||
| but they change for each execution | |||
| so however you can accomplish this in Haskell is likely better than my cheap Perl5 hack ;) | 15:28 | ||
| next METHOD, as described in A12, is just a next to a label | 15:29 | ||
| but this requires the label search to go outside the method itself, and back up to the dispatcher, then to the resume a loop | |||
| this was just not possible in p5 (at least AFAIK) | 15:30 | ||
| autrijus | that is easy to accomplish with coro | ||
| stevan | so my choice was to use a stateful dispatcher | ||
| if you can do it with a coro, then you can likely simplfy the dispatcher to be just a simple dispenser | 15:31 | ||
| mugwump hovers in hyperspace | |||
| stevan looks up nervously at mugwump, and hopes nothing falls | 15:32 | ||
| autrijus | another meta q | ||
| the immutable fixed layout in P6::MetaClass | 15:33 | ||
| stevan | ok | ||
| autrijus | that is the lifting point of bootstrapping right? | ||
| stevan | that is the basic instance layout | ||
| yes, it needs to be created first | |||
| once it is bootstrapped (which occurs at the bottom of Perl6::MetaModel) | |||
| then all other metaclasses are built in the normal way | 15:34 | ||
| only Perl6::MetaClass and Perl6::Object's Metaclass are built using that new() | |||
| autrijus | bottom of metamodel? | ||
| stevan | metamodel file | ||
| autrijus | ::dispatch(::meta('Perl6::MetaClass'), 'superclasses', [ ::meta('Perl6::Object') ]); | ||
| stevan | yes | ||
| autrijus | this? | ||
| okay, makes +Inf of sense. | |||
| stevan | that make Metaclass->isa(Object) | ||
| autrijus | yup | ||
| stevan | :) | ||
| I was thinking of create a construct_instance() function last night | 15:35 | ||
| autrijus | ok. let's go thru the prim layout one by one | ||
| stevan | to centralize the layout of the instance sturcutre | ||
| prim? | |||
| autrijus | primitive metaclass layout | 15:36 | |
| stevan | ok | ||
| autrijus | class => 'Perl6::MetaClass', | ||
| stevan | yes, an instance must hold the class it is created from | 15:37 | |
| autrijus | what about reblessing? | ||
| stevan | this is partially why having an object env with string->class mapping is good | ||
| reblessing? | |||
| autrijus | in p6 bless is a class method | ||
| that takes a candidate | |||
| and returns a blessed object | 15:38 | ||
| it looks like it is not mutable now | |||
| i.e. it doesn't modify the candidate in place | |||
| in p5, you can do | |||
| bless(bless({}, 'Class1'), 'Class2') | |||
| stevan | yes, but that is silliness :P | ||
| which should go away | |||
| autrijus | that is, overwrite the "class" field | ||
| stevan | yes | ||
| autrijus | okay. so I hold the class field to be immutable. | ||
| stevan | hoestly I think it should be | 15:39 | |
| autrijus | you have it using a name here. | ||
| but as we know, class objects may be rebound. | |||
| Khisanth | well hopefully things like inheriting constructor are a bit easier now so you don't need that kind of thing? :) | 15:40 | |
| autrijus | (::Int, ::Str) := (::Str, ::Int); # hat trick | ||
| stevan | ok | ||
| autrijus | are the former Int instances still bound to whatever class they were bound? | ||
| I'd think yes | |||
| stevan | yes, I think messing with class objects like that should produce undefined results | ||
| autrijus | they don't suddenly assume Str behaviour | ||
| stevan | the CLOS spec defines things like this as having "undefined results" | 15:41 | |
| autrijus | okay. | ||
| stevan | meaning you can do it, but we are not responsible for what it might make happen | ||
| autrijus | okay. | ||
| stevan | I think manipulating the metamodel in such a way is very hard to predicte the outcome of | 15:42 | |
| autrijus | sure, paint token | ||
| I mean, point taken | |||
| stevan | :) | ||
| I prefer paint token | |||
| autrijus | mm dylsexic | 15:43 | |
| stevan | so back to the class => "Perl6::metaClass" thing | ||
| I use a name, because I can in perl5 | |||
| autrijus | the name/version/authority section is apparently immutable as well | ||
| stevan | ideally that would be a class object | ||
| autrijus | I've written that already :) | 15:44 | |
| stevan | but then again, str -> class object lookup is a good thing IMO | ||
| ok | |||
| name, version authority could be mutable | |||
| autrijus | back up a bit | ||
| stevan | name should likely not be | ||
| ok.. sorry | |||
| autrijus | instance_data | ||
| stevan | yes | ||
| autrijus | it's a map from member names to values | 15:45 | |
| stevan | yes | ||
| it is constructed from the attribute objects in the metaclass (and all the superclasses) | |||
| autrijus | when you reopen a class | ||
| stevan | Perl6::Object->CREATE shows an example | ||
| autrijus | to add new member names | ||
| stevan | yes | ||
| you either need to do 2 things | 15:46 | ||
| 1) have the instance value accessing function (_() in the MetaModel) check the metaclass first | |||
| and create the new slot in the instance_data structure | |||
| or 2) use some kind of autovivification | |||
| sorry that didnt make much sense | 15:47 | ||
| ok | |||
| you need to proxy access to the instance variables | |||
| that proxy should check the metaclass for each access | 15:48 | ||
| for various reasons | |||
| autrijus | wait wait. | ||
| stevan | ok | ||
| autrijus | say my class is P6::MC | ||
| stevan | yes | ||
| autrijus | and my instance_data is $.name and $.version. | ||
| stevan | yes | ||
| autrijus | ideally, my instance data is just a IntMap | ||
| that is a perl5 array | 15:49 | ||
| and my class should give me the mapping from $.name to 0 | |||
| and $.version to 1 | |||
| stevan | ok | ||
| autrijus | and the bound that that it's at that | ||
| stevan | sure, that is how CLOS does it | ||
| autrijus | when I reopen it, I magically get 2 as a valid key | ||
| but otherwise it's an out of bounds. | |||
| that sounds cleaner | |||
| stevan | but hashes are more expensive in LISP then perl :) | ||
| ok | |||
| autrijus | well no, it's about sharing a keymap. | 15:50 | |
| that way when I reopen a class and throw new methods in | |||
| I mean, members in | |||
| existing instances automagically gets them | |||
| without me walking thru their instance_data | |||
| stevan | ok | ||
| autrijus | in perl5 this style is known as... pseudohashes | ||
| (which sadly is going away for dubious reasons) | 15:51 | ||
| stevan | yes | ||
| autrijus | ok. | 15:53 | |
| at this moment I have | |||
| data Class = MkClass { clsMembers :: Name -> Id } | |||
| coral | pseudohashes! | ||
| autrijus | data MetaClass = MkMetaClass { objClass :: Class , objData :: Id -> Container } | ||
| stevan | BTW - I locked keys in the P5 version only for myself, not as a design descision | ||
| autrijus | nod | ||
| stevan | to keep my sanity when I was debugging :) | ||
| and bootstrapping | |||
| ok, that looks good | |||
| but MetaClass is basically an object | 15:54 | ||
| autrijus | yes | ||
| stevan | so you could inherit from Object maybe? | ||
| autrijus | so it's really | ||
| data Object = MkObject { objClass :: Class , objData :: Id -> Container } | |||
| stevan still doesnt know enough Haskell | |||
| autrijus | haskell has no monomorphic subtyping :) | ||
| stevan | data MetaClass = MkObject() | ||
| autrijus | it's like erlang. | ||
| (there is only roles, not classes, so to speak) | 15:55 | ||
| but anyway | |||
| stevan | yes, I remember that part :) | ||
| grokking it is another story, but I remember it :) | |||
| autrijus | so a class is a mapping from Name to Id, that is the member fields | ||
| stevan | yes | 15:56 | |
| autrijus | what else does a primitive class do? | ||
| stevan | nothing really | ||
| well actually there is one thing missing here | 15:57 | ||
| autrijus | okay. in that case, do we ever need to reopen a primitive class? | ||
| stevan | an instance points to it's class | ||
| a class needs to point to it's metaclass | |||
| I use the symbol table to store it currently | |||
| autrijus | okay. | ||
| stevan | see ::meta() in the MetaModel.pm file | ||
| autrijus | its metaclass is an object? | ||
| stevan | the BUILD submethod of MetaClass handles that | ||
| every class has a metaclass instance | 15:58 | ||
| the metaclass instance actually defines all the stuff the class does | |||
| the class object is just a bridge | |||
| autrijus | data Class = MkClass { clsMeta :: Object , clsMembers :: Name -> Int } | ||
| stevan | between the meta space and the user space | 15:59 | |
| autrijus | data Object = MkObject { objClass :: Class , objData :: Int -> Container } | ||
| stevan | yes those look sane | ||
| if you make each class an instance of a Class object, that would work as well | |||
| if that makes things easier | |||
| so each instnace has-a instance of a Class | 16:00 | ||
| autrijus | prolly not | ||
| stevan | ok | ||
| yeah it worked in the JS version, but no in the P5 version | |||
| if we want to be really cyclical you could define Class as an Object too | 16:01 | ||
| but that is just insane | |||
| and only Smalltalk does that kind of insanity | |||
| actually CLOS does it too, sort of | 16:02 | ||
| either way, that is something which can be dealt with later I think | |||
| autrijus | ok. | ||
| what's the metaclass of Perl6::MetaClass | |||
| ? | |||
| stevan | an instance of Perl6::MetaClas | 16:03 | |
| autrijus | is this the same instance that is the bootstrap? | ||
| i.e. it forms a cycle | |||
| stevan | yes | ||
| only the new() and add_method() need be defined | |||
| in the normal class way | |||
| autrijus | normal class way? | ||
| coral | stevan: Class::Method in perl5 lets me do my $class = new Class::Method; bless $obj, $class; $obj->extend(add => sub { $_[0] + $_[1] }); # all objects in the $class support adding now | 16:04 | |
| stevan | in p5 terms: in the package symbol table | ||
| coral | which i found quite handy for my putterings about with AI | ||
| stevan | coral: the metamodel will allow that | ||
| simply do this: | |||
| coral | three disclaimers - (a) i wrote it (b) it uses Devel::Pointer and (c) scalarified overloading of $class under bless doesn't work yet | ||
| stevan | Perl6::Object->meta->add_method('add' => sub { ... }) | 16:05 | |
| coral | neat, perfect | ||
| stevan | :) | ||
| coral | :) | ||
| stevan | autrijus: new is needed to create the first few instances of MetaClass | ||
| until we have the Perl6::Object boostrapped in | 16:06 | ||
| autrijus | right. | ||
| let me think about it a bit | |||
| stevan | and _add_method must be created, so that we can add methods into the metaclass structure | ||
| but once _add_method adds itself (line 95 of MetaClass) we can add all other methods | |||
| and the dispatcher then can find them | |||
| or rather ::dispatch() can find them | 16:07 | ||
| coral | i am very cheered to see this being implemented in p6 somehow | ||
| coral bows to stevan | |||
| stevan | the early metaclasses need to have a special dispatcher which avoid all method calls | ||
| otherwise you get infinite loops | |||
| autrijus | yes. | ||
| still thinking | |||
| stevan | coral: thank you, but I am only an implementation monkey :) | ||
| coral | i am only a cheerleader | 16:08 | |
| stevan | autrijus: it might help to not bootstrap the first time around | ||
| coral | check out my enormous pom-poms | ||
| coral does a cheer | |||
| autrijus | stevan: nah, I think I need to grok it in one sitting :) | ||
| stevan | to define MetaClass by hand, and not as a MetaClass instance | ||
| autrijus | let me try it once at least :) | ||
| stevan | sure | ||
| coral: :) | |||
| autrijus | ok. so at the very very beginning | ||
| stevan | yes | ||
| autrijus | we have a map of meta info | ||
| that is the three metadata, MRO, superclasses, etc | 16:09 | ||
| stevan | yes | ||
| autrijus | so it has undef for both name and authority? | ||
| stevan | yes | 16:10 | |
| autrijus | funky | ||
| stevan | I added the default version, that may not be the best | ||
| it is a blank slate when you begin | 16:11 | ||
| autrijus | nod. | ||
| gnosis :: Map Int Container | |||
| gnosis = Map.fromList . constify $ [ ("$.name", constScalar Undef) , ("$.version", constScalar Undef) , ("$.authority", constScalar Undef) ] | 16:12 | ||
| stevan | nice name :) | ||
| autrijus | the object is called demiurge :) | ||
| stevan | LOL | ||
| autrijus | ok. what's this @:MRO doing? | 16:13 | |
| stevan | it stores the calculated C3 MRO | ||
| autrijus | it's a cache? | ||
| stevan | you can safely remove it if you like,.. | ||
| yes | |||
| autrijus | ok. I'll replace it with hash consing | ||
| stevan | Demiurge A deity in Gnosticism, Manichaeism, and other religions who creates the material world and is often viewed as the originator of evil. | ||
| originator of evil :) | |||
| autrijus | that's right. | 16:14 | |
| actually, it's not evil | |||
| stevan | meta-evil actually :P | ||
| autrijus | more like defect, imperfection | ||
| but it's not time for metaphysical mishmash right now :) | |||
| stevan | LOL | ||
| autrijus | now, @:superclasses. | ||
| stevan | ok, so @:superclasses is the superclasses of the class | ||
| autrijus | this is likely mutable | 16:15 | |
| stevan | a list of meta-class instances | ||
| yes | |||
| autrijus | but add-only | ||
| I persume | |||
| stevan | well | ||
| coral | um | ||
| stevan | hard to say | ||
| i think it should be | |||
| autrijus | at least in S12 I see no way to remove a "is" relationship. | ||
| stevan | but again, manipulating the superclasses list at runtime should have undefined behavior | ||
| coral | oooh | ||
| autrijus | undefined behaviour is the bane of QuickCheck :) | 16:16 | |
| (which is built out from invariant specifications) | |||
| coral | rats :( | ||
| stevan | removing from superclasses is just insane | ||
| IMO we should not support it | |||
| it breaks too much | |||
| autrijus | k. | ||
| stevan | adding to it is insane as well | 16:17 | |
| autrijus | class Foo is reopened is Bar {...} | ||
| stevan | since it can both change the MRO and instance mapping | ||
| autrijus | but that's okay | ||
| I think | |||
| it invalidates caches | |||
| but that's about it | |||
| it doesn't invalidate compile time assertions | 16:18 | ||
| (I think) | |||
| stevan | ok | ||
| again, in CLOS, this is undefined behavior | |||
| aka - virgin territory | |||
| if we can define it, great, but that may not be possible to deal with 100% | 16:19 | ||
| autrijus | ok. | ||
| coral | o/` classed for the very first time o/` | ||
| autrijus | , ("@:superclasses", constArray []) -- appendArray in the future? | ||
| stevan | ok | 16:20 | |
| autrijus | %:private is immutable for gnosis I gather | ||
| , ("%:private", constHash [ "methods", mutableHash [] ]) | 16:21 | ||
| stevan | I think all the method and attribute slots are mutable | ||
| oh yes, that is immutable | |||
| autrijus | the "methods" hash is mutable | ||
| stevan | it is the sub-slot of methods which is mutable | ||
| yes | |||
| autrijus | but not the "%:private" | ||
| stevan | yes | ||
| autrijus | good :) | ||
| stevan is dangerously low on caffinee | 16:22 | ||
| autrijus: it might make sense to have attribute in the %:private slot | |||
| but I am not sure | |||
| I think private attribute are local to the class, like methods are | |||
| autrijus | but it's not currently implemented that way? | 16:23 | |
| stevan | no, because private methods are a very new addition | ||
| autrijus | ok. | ||
| stevan | as was the %:private slot | 16:24 | |
| autrijus | ok | ||
| I'll add both in then | |||
| stevan | however, the behavior is still the same | 16:25 | |
| within the instance structure | |||
| autrijus | , ("%:private", methodAttrHash) | ||
| , ("%:class_definition", methodAttrHash) | |||
| , ("%:class_data", methodAttrHash) | |||
| where | |||
| methodAttrHash = constHash | |||
| [ "methods", mutableHash [] | |||
| , "attributes", mutableHash [] | |||
| ] | |||
| stevan | accessing a private attribute should only take place in a method defined in the class which the private attribute is defined in | ||
| yes, that looks sane :) | |||
| autrijus | okay, we have gnosis. | 16:26 | |
| demiurge :: Object | |||
| demiurge = MkObject | |||
| { objClass = MkClass | |||
| { clsMeta = demiurge | |||
| , clsMembers = fromKeys (Map.keys gnosis) | |||
| } | |||
| , objData = gnosis | |||
| } | |||
| sane? | |||
| stevan | give me a moment to grok the haskell | 16:27 | |
| autrijus | sure | ||
| autrijus praises infinite data structures without references | |||
| stevan | yes that looks sane I think | ||
| autrijus | ok | 16:28 | |
| what's this? | |||
| _build_meta() unless $params{'$.name'} eq 'Perl6::MetaClass'; | |||
| ah, it's so that :meta('Perl6::MetaClass') doesn't recurse? | |||
| stevan | yes | 16:29 | |
| autrijus | clever | ||
| stevan | remember Perl6::metaClass::new() is used exactly twice | ||
| first to create the structure for MetaClass | |||
| then to create the structure for Obejct | |||
| autrijus | right. | ||
| stevan | s/structure/instance structure/ | ||
| autrijus | so the second time it's | 16:30 | |
| class 'Perl6::Object' => { | |||
| stevan | creating Object is actually what creates the MetaClass instance for MetaClass | ||
| lazy loaded | |||
| autrijus | 'class' => { | ||
| methods => { | |||
| 'new' => sub { | |||
| etc. | |||
| which inits the MC | |||
| stevan | yes | ||
| look in Class->_apply_class_to_env | |||
| there is a special case conditional for Perl6::Object | 16:31 | ||
| autrijus | ok. I'll not call the first object as yhwh. | ||
| stevan | LOL | ||
| autrijus | okay, I think I'll call it pneuma | 16:32 | |
| stevan | nice | ||
| stevan is really working Google's defintion feature today :) | 16:33 | ||
| autrijus | explain this | ||
| # XXX - this might move up the MetaClass at some point - per $Larry | |||
| I grok the rest | |||
| mugwump | autrijus, you are writing a tangram schema! :) | ||
| 04:19 < autrijus> 'class' => { | |||
| 04:19 < autrijus> methods => { | |||
| 04:19 < autrijus> 'new' => sub { | |||
| autrijus | mugwump: that's stevan's code | ||
| stevan | autrijus: where is that comment from? | 16:34 | |
| autrijus | I'm far more lazy than that :) | ||
| stevan: it's in 'bless' => sub { | |||
| stevan | ok, looking | ||
| yes, $Larry spoke once of having the metaclass handle blessing on some level | 16:35 | ||
| but I dont think that is sane IMO | |||
| autrijus | "Jesus says to the Samaritan woman: 'Pneuma o theos' -- God is Spirit. Notice that !Theos.isa(Pneuma), Theos =:= Pneuma" | ||
| I don't see how that could work. | |||
| stevan | however, I only implemented p6opaque here | ||
| mugwump | Did anyone ever write tests for $Larry's approval of $.foo =:= ./foo() ? | ||
| stevan | autrijus: it Object::new would just dispatch to Object->meta->new | 16:36 | |
| s/new/bless/ | |||
| autrijus | reexplain? | ||
| stevan | autrijus: I suggest we punt, I think it is a non-issue in the end | ||
| autrijus | ok. | 16:37 | |
| stevan | I think bless() in the sense of tagging a reference is best in the interpreter core | ||
| but bless() in the object sense is best in Object | |||
| maybe with some help from MetaClass later on, but I see no immediate need for that now | |||
| stevan *must* get some more coffee, bb in two shakes of the lamb of gods tail (to keep the religous theme going) | 16:38 | ||
| autrijus | ok. | ||
| :D | |||
| ok, so we have gnosis, that is logos, which was with demiurge, in the beginning. the pneuma, that is the first object, the light that shines | 16:40 | ||
| autrijus is translating Perl6::Object | |||
| hm, Perl6::Class is never defined. | 16:41 | ||
| I wonder why. | |||
| is it not yet lifted? | |||
| stevan | autrijus: no, it is nothing but a shell | 16:42 | |
| a means to connect between the user world and the meta world | |||
| autrijus | okay. so in a sense, Perl6::MetaClass is the shape of Perl6::Class | ||
| stevan | uhm, yes | ||
| autrijus | in the perl6 space | ||
| i.e. user world | |||
| it's the metaverse's means to shapw how the Class is perceived by the mortals | 16:43 | ||
| stevan | any questions asked of Perl6::Class instances are passed up to their metaclass instance | ||
| autrijus | right. | ||
| stevan | yes | ||
| autrijus suppresses the obvious "channeling" jokes | |||
| stevan thinks maybe there should be a "meta" song, so we can have something to sing when things make sense :) | 16:44 | ||
| autrijus | ok. so to evaluate pneuma, we need to turn to the channel | ||
| that is perl5/Perl6-MetaModel/lib/Perl6/Class.pm | |||
| it's called with | 16:45 | ||
| Perl6::Class->new('Perl6::Object', {...}); | |||
| stevan | yes, that is what class => 'Perl6::Object' does | ||
| see Perl6::MetaModel::class() | |||
| autrijus | yes | 16:46 | |
| ignoring _validate_params for now | |||
| stevan | yes | ||
| good idea | |||
| autrijus | so it's essentially | ||
| bless({name => 'Perl6::Object', params => \%theos}, 'Perl6::Class') | 16:47 | ||
| or rather | |||
| bless({name => 'Perl6::Object', params => \%theos}, __PACKAGE__) | |||
| since we don't make use of inheritance | |||
| in the underlying runtime | |||
| stevan | yes | ||
| svn.openfoundry.org/pugs/perl5/Perl.../Object.js might help | |||
| autrijus | looks rather identical | 16:48 | |
| stevan | yes | ||
| autrijus | just with less @_ shipping around | ||
| stevan | but not seeing it in perl, sometimes helps | ||
| autrijus | ok. let's tease the methods apart | 16:49 | |
| we ignore _validate_params already | |||
| stevan | yes | ||
| _apply_class_to_environment? | |||
| autrijus | that leaves us _apply_class_to_environment _get_class_meta_information _build_class | ||
| stevan | _get_class_meta_information is simple, just breaks up the name | ||
| autrijus | that's easily a helper sub | 16:50 | |
| not warranting a method | |||
| stevan | yes | ||
| autrijus | what's _build_class ? | ||
| (I know all the magic is in _apply) | |||
| stevan | it converts the $params hash to a metaclass | ||
| autrijus | aha | ||
| it's the channel from static data into live mixes | |||
| stevan | mostly it just populates the metaclass created in _apply | ||
| autrijus | right. | 16:51 | |
| okay. which brings us back to _apply | |||
| stevan | yes | ||
| ok the eval part | |||
| just sets up the p5 magic | |||
| look at Perl6::Instance for a second | 16:52 | ||
| autrijus | already there | ||
| stevan | it defines all the UNIVERSAL:: methods | ||
| isa, can and AUTOLOAD | |||
| autrijus | it's the sugar | ||
| stevan | yup | ||
| autrijus | ok, safely ignored | ||
| stevan | and it makes the $MyClass::META entry in the symbol table | ||
| which we can ignore since we strore it in the Class | |||
| autrijus | yes. | ||
| stevan | next, it aliases the full name to the short name | 16:53 | |
| more p5 sugah | |||
| autrijus | so the entire chunk vanishes in a puff of logic | ||
| stevan | yes | ||
| then creating the metaclss | |||
| autrijus | that's the real magic | ||
| stevan | Perl6::Object is a special case | ||
| it must be created by hand | |||
| autrijus | right. | ||
| stevan | using the Perl6::MetaClass::new() function | ||
| autrijus | ahh. so _that_'s what it's for | ||
| stevan | and then installing the resulting meta into the $META | 16:54 | |
| autrijus | but wait | ||
| we don't use $META anymore no? | |||
| stevan | yes | ||
| you need to store it in the class | |||
| just change ${"${name}::META"} = $meta; to $class->{meta} = $meta | |||
| and you ahve the same thing | |||
| of course Class::new should create the "meta" slot then | 16:55 | ||
| autrijus | yup | ||
| ok. so the $meta there | |||
| stevan | yes | ||
| autrijus | is not the demiurge metaobject | ||
| stevan | in the non-special case | ||
| autrijus | nono | ||
| stevan | ok | ||
| autrijus | I'm talking about the special one | ||
| stevan | :) | ||
| autrijus | the special one is like demiurge | ||
| but with an additional clause | |||
| that is _build_meta | 16:56 | ||
| because its name is now P6::Obj | |||
| not P6::MC | |||
| stevan | yes | ||
| which basically then inits the P6::MC's metaclass instance | |||
| autrijus | which throws in a whole bunch of dispatcher | ||
| yup | |||
| autrijus sees the entire metacircular light! | 16:57 | ||
| stevan | :) | ||
| autrijus | beautiful :) | ||
| stevan does the meta-dance | |||
| Odin- | Yo, MC Perl in da house! | ||
| Aankhen`` | meppl: `has Int @.s;` declares an instance variable, not a class variable. | ||
| ?eval class La { has int @.s; method la () { say @.s.end; } }; La.new().la() | 16:58 | ||
| evalbot6 | Error: No compatible subroutine found: "&end" | ||
| autrijus drinks a potion of gain level | |||
| Aankhen`` | ?eval class La { has @.s; method la () { say @.s.end; } }; La.new().la() | ||
| evalbot6 | Error: No compatible subroutine found: "&end" | ||
| autrijus bootstraps and floats up, through the ceiling! | |||
| Aankhen`` | ?eval class La { has @.s; method la () { @.s = <a b c d>; @.s.end; } }; La.new().la() | ||
| evalbot6 | 3 | ||
| stevan | autrijus: it is not unlike a rube goldberg machine, in that each little thing trips of the next thing until suddely, you catch the mouse | ||
| Aankhen`` | Ah, that would be why it wasn't working. | 16:59 | |
| No elements in @.s. | |||
| autrijus | stevan: indeed | ||
| stevan | meta-circularity++ | ||
| Aankhen`` | Dinner. & | ||
| stevan | Aankhen``: ooh, anything good? | ||
| autrijus | stevan: why can't _build_meta be called the 1st time around? | ||
| stevan | because there is _build_meta calls new() | ||
| to create the Metaclass's metaclass instance | 17:00 | ||
| autrijus | ah right | ||
| stevan | careful, cycles abound | ||
| autrijus | ok | ||
| so it _is_ called the 1st time around | |||
| stevan | the first it can be called | ||
| and no sooner | |||
| autrijus | yes. | ||
| stevan | or later for that matter | ||
| autrijus | and not again | ||
| meppl | aankhen, yes, i said that i though. but why does normal variables work without | ||
| stevan | yes | ||
| one time use :) | 17:01 | ||
| autrijus | ok. so in our model | ||
| meppl | ?eval my $a; $a.end | ||
| evalbot6 | Error: No compatible subroutine found: "&end" | ||
| autrijus | we'll use a lexical $META | ||
| meppl | oh | ||
| stevan is very excited to see the metamodel moving to Haskell | |||
| autrijus | and then stuff it into Perl6::Object's clsMeta. | ||
| stevan | sure | 17:02 | |
| meppl | ?eval my $a; say $a.end | ||
| evalbot6 | Error: No compatible subroutine found: "&end" | ||
| autrijus | does the MetaClass for the Perl6::Object class has a name? | 17:03 | |
| meppl | asdhg | ||
| ?eval my @a; @a.end | |||
| evalbot6 | -1 | ||
| stevan | how do you mean "name"? | ||
| $.name? | 17:04 | ||
| autrijus | I know its $.name is Perl6::Object | ||
| stevan | I am not understanding then | ||
| autrijus | the metaclass object for P6::Obj | ||
| let's call it theos, for the lack of a better name | |||
| stevan | in the p5 it is stored in $Perl6::Object::META | 17:05 | |
| autrijus | I have | ||
| -- The Original Perl6::Object | |||
| pneuma :: Object | |||
| pneuma = MkObject | |||
| { objClass = MkClass | |||
| { clsMeta = theos | |||
| , clsMembers = fromKeys (Map.keys logos) | |||
| } | |||
| } | |||
| (objData not there yet) | |||
| i.e. it's objData = logos too, but I hadn't transcribed logos | |||
| stevan | ok | ||
| why would it need a name? | 17:06 | ||
| integral | autrijus++ # fantastic names :) | ||
| autrijus | mm, it's only used by pneuma | 17:07 | |
| never reused as anybody else's metaclass object | |||
| so it can stay anonymous | |||
| i.e. not referenced elsewhere | |||
| stevan | yes, all classes have a metaclass instance | ||
| autrijus | it's available as Perl6::Object.meta | ||
| stevan | 1 to 1 | ||
| yes | |||
| autrijus | hm, except for demiurge | 17:08 | |
| clsMeta (objClass demiurge) == demiurge | |||
| stevan | which one is that agina? | ||
| autrijus | the original Perl6::Object metaclass | ||
| stevan | you mean the Perl6::MetaClass's metaclass? | ||
| autrijus | yes. | ||
| stevan | it is an instnace of itself | 17:09 | |
| Perl6::MetaClass is defined as an instance of itself | |||
| autrijus | right | ||
| stevan | the cycle at the top of our object model | ||
| otherwise we keep meta.meta.meta.meta-ing | 17:10 | ||
| autrijus | mmm parthenogenesis | ||
| but yeah, I think I grok that now | |||
| stevan googles that one | |||
| yes, metaclass is essentially the virgin birth | 17:11 | ||
| coral | hee | ||
| autrijus | ok. back to Class.pm lin 57 | ||
| stevan | yes | ||
| autrijus | we create an instance of the primitive Perl6::MetaClass | 17:12 | |
| stevan | yes | ||
| autrijus | its instance data is like the blank state | 17:13 | |
| except its $.name which is set to P6::Object | |||
| stevan | at that point (line 57) yes | ||
| autrijus | but otherwise it's the same | ||
| stevan | the same as? | ||
| autrijus | as the gnosis... i.e. the thing you call P6::MetaClass::new() with no states | 17:14 | |
| stevan | yes | ||
| autrijus | the layout for the parthenogenesis | ||
| ok | |||
| stevan | _build_class then populates it | ||
| _build_meta is like _build_class | |||
| autrijus | right. | ||
| stevan | but for the MetaClass | ||
| autrijus | but _b_class is reusable | ||
| stevan | yes | ||
| autrijus | every time you call class{} you _b_class | 17:15 | |
| but _b_meta is one shot | |||
| stevan | yes | ||
| bootstrap | |||
| basically you throw away most of the bootstrap once it is in place :) | |||
| autrijus | right. | ||
| stevan | but I dont need to tell you that :P | ||
| autrijus | ;) | ||
| stevan | careful, cycles abound | ||
| autrijus | let me finish logos and pneuma. just a sec | 17:16 | |
| stevan | it is very easy to think about one thing, and follow it further and realize you are back where you started | ||
| many things depend upon them being there before they exist | |||
| chicken and eggs and all that | |||
| autrijus | right, but you see... in haskell that's just fine :) | ||
| note how I referred to demiurge before it completes itself | 17:17 | ||
| stevan | CLOS (or at least in Clossett in The Art of MOP) bootstraps in 10 steps | ||
| I have not counted how many steps I take | |||
| yes, laziness++ :) | |||
| as always the LOC of the Haskell version will be something less than 10% of the total LOC of the perl version | 17:18 | ||
| autrijus | :) | ||
| Aankhen`` | stevan: Kadai chicken, rice, beans, roti, daal, and raita. Any of that familiar to you? | 17:20 | |
| sili | i think it's time to learn haskell | ||
| stevan | Aankhen``: yes :) | ||
| Aankhen``: I was once a waiter at an indian resturant | |||
| Aankhen`` | Ah, cool. | ||
| stevan | I was the token white boy :) | ||
| Aankhen`` | In that case, you can form your own opinion. ;-) | ||
| stevan | home cooked indian food++ | ||
| after we closed the resturant, they staff would always make a big "home-style" dish | 17:21 | ||
| yummmmm | |||
| Aankhen`` | Yeah, I wish I could get some home cooked Indian food. Instead, I have to put up everyday with... uh... oh. | ||
| stevan | my favorite was the corn roti and spinach, i think it was a punjabi winter dish | 17:22 | |
| Aankhen`` | I haven't had corn roti. | ||
| I don't like spinach much, though. | |||
| stevan | it is very good | ||
| Aankhen`` | (I am an extremely finicky eater) | ||
| stevan | saag++ | ||
| Aankhen`` | Back in February, I would not even have eaten beans. | ||
| stevan | I think my overall favorite is Chicken Bhuna | 17:23 | |
| Aankhen`` | (Tandoori chicken)++ | ||
| (Kathi Kebabs)++ | |||
| stevan | I used to go out drinking with the Tandoori chef all the time | ||
| Aankhen`` | Lucky you. :-) | 17:24 | |
| dudley, you around? | |||
| stevan ponders the "good old days" before he knew about meta-models and life was much simpler | 17:25 | ||
| Aankhen`` | LOL. | 17:26 | |
| stevan++ # work on Meta-Model is amazing | 17:27 | ||
| stevan | Aankhen``: thanks :) | ||
| Aankhen``++ # for braving the depths of CGI and libwww | 17:28 | ||
| cognominal_ fears Meta-Stase | 17:29 | ||
| Aankhen`` | Heh. | ||
| CGI is scary. | |||
| LWP isn't so much so. | |||
| cognominal_ | on the other hand a Meta-Stas would be usefule for mod_perl | ||
| autrijus | yay it works! | 17:31 | |
| just for the 0th stage | |||
| stevan | nice | ||
| Aankhen`` | What does? | ||
| autrijus | I'll leave the rest to tomorrow... need to write notes :) | ||
| Aankhen``: this | |||
| stevan | auuuh | ||
| autrijus | -- The Original Perl6::MetaClass class (and metaclass!) | ||
| demiurge :: Object | |||
| demiurge = MkObject{ objClass = cls, objData = dat } where (fld, dat) = splitMap (gnosis Undef) -- no $.name cls = MkClass{ clsMeta = demiurge, clsFields = fld } | |||
| er | |||
| with better layout: | |||
| demiurge = MkObject{ objClass = cls, objData = dat } | |||
| stevan | this means I have to do $work now | ||
| autrijus | where | ||
| (fld, dat) = splitMap (gnosis Undef) -- no $.name | |||
| cls = MkClass{ clsMeta = demiurge, clsFields = fld } | |||
| Aankhen`` | Very cool. | ||
| autrijus | stevan: thanks so much for hand holding :) | 17:32 | |
| stevan | autrijus: a pleasure as always :) | ||
| autrijus praises lazy evaluation again | 17:33 | ||
| in p6, we'd need to use later-populated refs or thunks to tie the knot | |||
| but that's fine, just more verbose | 17:34 | ||
| stevan | yes | ||
| autrijus is suitably excited at the sheer madness | 17:35 | ||
| a MOP fully exposed at language level is so very sick :) | 17:36 | ||
| stevan is just happy to have the company over here in the meta-land | |||
| autrijus | I think I really need to learn SBCL well :) | ||
| stevan | SBCL? | 17:37 | |
| autrijus | steel bank common lisp | ||
| the soft typing thing that can do compile time inferencing and assertion | |||
| descendent of cmucl | |||
| stevan | ah | ||
| autrijus | stevan: | 17:39 | |
| stevan | autrijus: | ||
| autrijus | S12: Every class is an instance of its metaclass. You can get at the metaclass of any object via the ".meta" method. | ||
| this looks like the reverse of the world picture | |||
| which we just put together | |||
| stevan | S12 is wrong | ||
| autrijus | thank you! | ||
| stevan | every class has an instnace of a metaclass | ||
| autrijus | yup | ||
| stevan | why would a class be an instance of its metaclass | 17:41 | |
| both are singletons anyway | |||
| you never have 2 instance of class(Foo) | |||
| and you never have 2 instance of meta(class(Foo)) | |||
| a has-a chain just makes more sense | 17:42 | ||
| autrijus | nod. | ||
| in scala, one can write a singleton definition just by writing | |||
| (paraphrased) | 17:43 | ||
| object Foo { has $.foo = "x"; has $:bar = "y" }; | |||
| i.e. just by switching "class" to "object" | |||
| stevan | interesting | ||
| autrijus | they also have case classes, which looks like (paraphrases) | ||
| class Tree {...} | 17:44 | ||
| case class Branch { has Tree $.l; has Tree $.r } | |||
| case class Leaf { has Int $.v } | |||
| then you can write | |||
| my $tree = Branch( Branch( Leaf(3), Leaf(4) ), Leaf(5) ); | |||
| and then | 17:45 | ||
| stevan | hmmm, how very SML-ish | ||
| dudley | Aankhen``: ping | 17:46 | |
| Aankhen`` | Pong. | ||
| autrijus | sub count (Tree $t) { given $t { when Branch { count(.l) + count(.r) } when Leaf { count(.v) } } } | ||
| etc. | |||
| the difference with perl6 is that the .l/.r binding is compile time, that is if you've written .v there it won't typecheck. | 17:47 | ||
| er, count(.v) should be .v, obviously | |||
| I find that to be quite attractive :) | |||
| Aankhen`` | dudley: Hi. You reported some problems with install_dir? | ||
| autrijus | (for data-centric problem domains) | ||
| dudley | The problem with the install is: lib/perl5 respects PREFIX (or install_dir) but lib/perl6 gets installed to wherever my original perl5 installation is | 17:48 | |
| Aankhen`` | Wha? | 17:49 | |
| What OS are you on? | |||
| dudley | mac os 10.4 | ||
| Aankhen`` | That's weird. | ||
| Hmm. | |||
| Where is lib/perl5? | |||
| Or are you talking blib and blib6? | |||
| Talking about, even. | 17:50 | ||
| dudley | I mean the stuff that gets installed to PREFIX/lib/perl5 or lib/perl6 | 17:52 | |
| Aankhen`` | Ah. | 17:53 | |
| dudley | I set install_dir to /Users/dudley/something and end up with /Users/dudley/something/lib/perl5/, but /opt/loca/lib/perl6 | 17:54 | |
| Aankhen`` | Can you open up the Makefile for a sec? | 17:55 | |
| dudley | yep | ||
| Aankhen`` | What is the value of INST6_ARCHLIB (it's towards the end)? | 17:56 | |
| dudley | blib6/arch | ||
| Aankhen`` | OK. | 17:57 | |
| Now a few others: INSTALLDIRS, PREFIX, PERLPREFIX, SITEPREFIX, VENDORPREFIX | |||
| dudley | INSTALLDIRS=site, PREFIX=/Users/dudley/pit, rest = $(PREFIX) | 17:59 | |
| Aankhen`` | Hum hum hum. | ||
| dudley | ah, here it is. | 18:00 | |
| Aankhen`` | Could you nopaste the `pure_site_install` and `pure_vendor_install` targets? | ||
| dudley | in Makefile.PL, pure_site_install gets its info from $config | ||
| sure, from Makefile or .PL? | 18:01 | ||
| Aankhen`` | Makefile. | ||
| wolverian | what does TSa use to make those ASCII diagrams? heh. | 18:02 | |
| gaal | TheDraw? :) | 18:03 | |
| hello | |||
| Aankhen`` | util/PugsConfig.pm appears to be the culprit. | 18:04 | |
| pasteling | "dudley" at 70.179.213.96 pasted "Makefile snippets" (23 lines, 1.2K) at sial.org/pbot/12236 | ||
| Aankhen`` | What the heck is util/generate_config? | ||
| dudley: Thanks. | 18:05 | ||
| dudley | np | ||
| gaal | Aankhen``, do you see the problem? | 18:06 | |
| svnbot6 | r6072 | iblech++ | * Usual svn props. | ||
| r6072 | iblech++ | * PIL2JS: Step 1/2 in integrating Perl6.MetaModel. | |||
| r6072 | iblech++ | * PIL2JS.js: Removed Object.prototype.toPIL2JSBox, as it breaks | |||
| r6072 | iblech++ | Perl6.MetaModel. | |||
| r6072 | iblech++ | * PIL2JS.js: Modified PIL2JS.call to be able to call methods on Perl6.* | |||
| r6072 | iblech++ | objects. | |||
| Aankhen`` | gaal: Not really... am I supposed to? | 18:07 | |
| Hrm, those snippets don't appear to mention INST6_* anywhere. | |||
| gaal | you said PugsConfig is the culprit... | ||
| Aankhen`` | One sec. | 18:08 | |
| wolverian | gaal, hmm. thedraw looks nice :) | ||
| Aankhen`` | I'm examining it. | ||
| gaal | wolverian: ol' BBS days :) | ||
| dudley | doh, wrong targets | ||
| wolverian | gaal, I'm too young. :/ | ||
| pasteling | "dudley" at 70.179.213.96 pasted "more makefile snippets" (18 lines, 1K) at sial.org/pbot/12237 | 18:09 | |
| Aankhen`` | Thanks, dudley. :-) | ||
| dudley, did installing there overwrite any Perl 5 modules? | 18:11 | ||
| dudley | No, everything that got installed to my perl5 dir was under perl6/ | ||
| Aankhen`` | Ah, okay. | ||
| dudley | PugsConfig.pm is getting it's data from perl5's Config.pm, right? | 18:12 | |
| Aankhen`` | Appears to be. | ||
| autrijus | stevan: this gotta be the most wacky function I wrote today | 18:20 | |
| -- Bootstrapped MetaClass - suitable for applying to environment | |||
| theos :: Object | |||
| theos = metamorph demiurge | |||
| ;) | |||
| autrijus proceeds to check things in | 18:21 | ||
| dudley | yay! | ||
| Metamodels are much sexier than build systems | 18:23 | ||
| svnbot6 | r6073 | autrijus++ | * Undef is a Val... I think now | ||
| autrijus | my head is still spinning :) | 18:24 | |
| Aankhen`` | dudley: Definitely. | ||
| svnbot6 | r6074 | autrijus++ | * New PIL runcore: First step of the Perl 6 Theology. | 18:25 | |
| r6074 | autrijus++ | Er, I mean, MetaModel... | |||
| dudley | did I just describe an abstract compsci concept as sexy? | 18:26 | |
| dudley hangs his head in shame | |||
| stevan | dudley: it's okay, we are all friends here | ||
| pasteling | "Aankhen``" at 203.101.5.19 pasted "Makefile.PL patch" (51 lines, 1.7K) at sial.org/pbot/12240 | ||
| Aankhen`` | dudley, could you try that patch? | 18:27 | |
| dudley | I could. | ||
| Aankhen`` | You do that. :-D | ||
| And let me know if anything blows up. | |||
| stevan | autrijus: it's like surfing along the edge of a whirlpool, always soooo close to being sucked down in | ||
| Aankhen`` | After 10 minutes, that is. I'll be gone till then. | ||
| dudley | It'll take a little longer than that :-) | 18:28 | |
| autrijus | stevan: verily, verily | 18:30 | |
| ingy's slide24 rings so true. | 18:32 | ||
| Perl 6 is a completely Insane Language: Perl 6 makes the easier things even easier / And the hard things become truly weird! / No good idea has been left behind... / It is a language that is almost impossible to implement. | |||
| stevan | :D | ||
| autrijus | but then in the next slide he shows how an even more sane group of people who ignored the impossibility anyway :) | 18:33 | |
| I mean, even more insane. | |||
| freudian slip. | |||
| wolverian | ewwww at larry's zip() message on p6l :( | 18:34 | |
| autrijus | wolverian: yeah, but it's consistent for quite some time now | 18:35 | |
| wolverian | yes, I just hate overloading ; | ||
| autrijus | maybe we can learn from ocaml and separate statements with ;; | ||
| then ; is free for other uses | |||
| </troll> | |||
| Khisanth | ... | ||
| wolverian | nah. just use \n | ||
| Khisanth | ewww no | 18:36 | |
| wolverian | :) agreed. | ||
| Khisanth | ;; would be better, it's not like people aren't using long enough lines as it is | ||
| wolverian | I'd rather use a different multi slice character | 18:37 | |
| autrijus | hmm, like, ;; :) | ||
| wolverian | or fix the signature system so that we can specify zip() without ; | ||
| well. yes. :) | 18:38 | ||
| dudley | Aankhen``: \$(INST6_SCRIPT) \$(DESTDIR)/man/man1 \\ | ||
| Aankhen`` | Yus? | 18:39 | |
| dudley | shouldn't that be \$(INST6_SCRIPT) \$(DESTDIR)/bin \\ ? | ||
| Aankhen`` | Urk, it should. | ||
| Is the rest of it working right? | |||
| Khisanth | it's zip(@foo;@bar;@baz) ? | ||
| wolverian | yes. | 18:40 | |
| maybe we could use :: ... oh, that's taken :( | |||
| autrijus | strange as this seems, it's not quite as crazy as the `unit idea. | ||
| Khisanth | Unicode to the rescue! | ||
| autrijus | I'm still waiting for a spec on that one. | 18:41 | |
| wolverian | I tentatively like `unit | ||
| Khisanth | zip(@foo'@bar'@baz) :P | ||
| wolverian | (hard to say more without knowing how they're constructed) | ||
| autrijus | nod. maybe it's just a shorthand for single-parameter constructors. | ||
| wolverian | that's almost what I guessed in my reply to Larry. :) | 18:42 | |
| (which went unanswered, I guess he hasn't yet designed it.) | |||
| autrijus | then I'd like it to be a module :) | ||
| wolverian | hm. do you have interface ideas? | 18:43 | |
| coral | zip? | ||
| autrijus++ # even more sane | 18:44 | ||
| autrijus | wolverian: coercion based, I think like search.cpan.org/~jettero/Math-Units...alValue.pm | ||
| wolverian | coral, zip(1..3;"a".."c") == (1,"a",2,"b",3,"c") | ||
| coral | oh, interleave() | ||
| wolverian | right. | ||
| coral | bad name, good idea | ||
| autrijus | you can't zip 1..Inf though. bad idea :-/ | ||
| coral | weave() or braid() would be better | ||
| heh | |||
| wait, so zip doesn't handle iterators? | |||
| autrijus | no, it bias toward longer | 18:45 | |
| not the shorter | |||
| ayrnieu | hah, I just wrote INTERLEAVE in CL. /me has never liked the 'zip' family. | ||
| coral | oog | ||
| so what function DOES zip iterators? | |||
| wolverian | autrijus, hm, why? | ||
| autrijus | wolverian: why what? | ||
| wolverian | why does it bias towards longer? | ||
| autrijus | I have no idea at all. | ||
| larry did mention a possibility of a YY short-circuiting version | 18:46 | ||
| that bias toward shorter | |||
| ayrnieu | that's unlike actual physical zippers, even :-) | ||
| wolverian | hmm, right. | ||
| autrijus | yeah, but repeated symbol carry short circuit metaphor | ||
| coral wonders what unicode for interleave is | |||
| wolverian | yen | 18:47 | |
| autrijus | in any case, the Array.kv interface does reduce the need of 1..Inf zip | ||
| Ā„ | |||
| wolverian | yes. | ||
| Aankhen`` | dudley: Ping. Any progress? | ||
| wolverian | but coral's question is interesting | ||
| is there a builtin zip() for iterators? | |||
| coral | if i want to interleave two infinite sets, how do i? | ||
| set1 = 1,3,5,7,... | |||
| set2 = 2,4,6,8,... | |||
| Khisanth | use Set; ! :) | ||
| autrijus | =$set1 Y =$set2; | ||
| and pray that it returns a generator from list fusion | 18:48 | ||
| dudley | Aankhen``: it's installing to lib/* instead of lib/perl6/* | ||
| Amnesiac | uhm.... | ||
| Amnesiac sets a set | |||
| coral nearly parse fails, but makes a saving throw for random math knowledge | |||
| Aankhen`` | To your Perl's lib/*? :-S | ||
| coral | incidentally what's the notation to create an infinite set of 0..inf by 2's | 18:49 | |
| autrijus | 0..:by(2); | ||
| 0...:by(2); | |||
| dudley | Oh, no, sorry, to the prefix I specified (/Users/dudley/pit) | ||
| coral | does that return a generator from list fusion? | ||
| Aankhen`` | Whew! | ||
| Khisanth | not 0..Inf:by(2)? | ||
| Aankhen`` | Don't scare me like that. :-P | ||
| autrijus | coral: yes, I'd say so | ||
| wolverian | Khisanth, that works too. | ||
| autrijus | Khisanth: that works too | ||
| Aankhen`` | Khisanth: That could work. | ||
| wolverian | heh. | ||
| dudley | Aankhen``: Sorry :-S | ||
| Aankhen`` | ... is easier, though. | ||
| autrijus | ok, it works triply | ||
| coral | ?eval =1..2 Y =3..4 | ||
| evalbot6 | Error: Can't use readline() or getc() in safemode. | ||
| coral | eh? | ||
| wolverian | pugs's = is for handles only, I think | 18:50 | |
| autrijus | coral: 1..2 is a generator already | ||
| coral | oh, ok | ||
| ?eval 1..2 Y 3..4 | |||
| evalbot6 | (1, 3, 2, 4) | ||
| Aankhen`` | ?eval =(1..2) Y =(3..4) | ||
| evalbot6 | Error: Can't use readline() or getc() in safemode. | ||
| autrijus | = turns iterator into a list gen | ||
| Aankhen`` | Ah. | ||
| coral | ?eval 1..:by(2) Y 2..:by(2) | ||
| evalbot6 | () | ||
| coral | ?eval 1...:by(2) Y 2...:by(2) | ||
| evalbot6 | Error: unexpected ":" expecting operator, postfix conditional, postfix loop, postfix iteration, ";" or end of input | ||
| autrijus | coral: adverb to infix is :todo | ||
| coral | wow | ||
| oh, ok | |||
| Aankhen`` | I thought putter got that to work? | 18:51 | |
| wolverian | hmm. | ||
| coral files away for "try again next week" | |||
| wolverian | (1... Y "a"...) :by(2) | ||
| Aankhen`` | Or did he only get it working for certain categories of operators? | ||
| wolverian | should that work? | ||
| coral | so wouldn't zip be akin to .pick() for interleaved sets? | ||
| like, a meld of the interleave and pick operators | |||
| eh | |||
| coral shuts up | |||
| fglock | mmm - 2...:by(2) could be implemented using Span.pm or Recurrence.pm | ||
| autrijus | fglock: verily | 18:52 | |
| wolverian | hmm. what AES would iterators go in, numerically? | ||
| (and generators) | |||
| (and laziness in general :) | |||
| autrijus | wolverian: it's all p6l | ||
| wolverian | (although I guess the last goes in every AES) | ||
| autrijus | and most of them post-hackathon | ||
| wolverian | autrijus, right, I'm wondering about a future AES | ||
| autrijus | S02 | 18:53 | |
| S02:Lists | |||
| wolverian | right. thanks! | ||
| Aankhen`` | dudley: I take it the patch didn't break anything? | 18:54 | |
| dudley | Nope. | 18:55 | |
| Aankhen`` | OK. | ||
| gaal: Ping. | |||
| gaal | pong | 18:59 | |
| Aankhen`` | Hola. :-) | ||
| How're you feeling? | |||
| gaal | hey :) | ||
| feverish, but less so than earlier. :) | |||
| Aankhen`` | Good. | 19:00 | |
| Er, one sec. | |||
| D'oh. | 19:01 | ||
| Hmm, hmm, hmm. | |||
| Where is the Perl 6 stuff installed by default? | |||
| gaal | i never ran make install :) | ||
| Aankhen`` | Could you check the Makefile and tell me what you see under the last pure_site_install? | 19:02 | |
| gaal | # /usr/lib/perl6 i think? | ||
| Aankhen`` | OK. | ||
| dudley | it depends on where your perl5 is | ||
| gaal | c:\perl6\site\lib on my box | 19:03 | |
| dudley | PERL_PREFIX/lib/perl6 | ||
| Aankhen`` | I see. | ||
| I need to provide a default DESTDIR. | |||
| Trying to figure out how to do that. | |||
| iblech | stevan: Hi :) How do I add a new method to an already existing class with Perl6.MetaModel? | 19:05 | |
| stevan: Ah, classobj.meta().add_method(...). | 19:07 | ||
| gaal | all this ping / pong on the channel.... crass.on.ru/flash/pingpong.html | 19:14 | |
| Aankhen`` | Oi! Stop looking at videos of guys playing ping pong and try and think of a way to specify a sane default DESTDIR! | 19:16 | |
| autrijus | stevan: my journal will be up soonish containing a very rough writeup | 19:17 | |
| if I'm seriously mistaken, please deliver me :) | |||
| journal up. good night! /me waves & | 19:21 | ||
| Aankhen`` | Sleep well! | ||
| gaal | Aankhen``, won't makemaker_args work, like you did for PREFIX? | ||
| Aankhen`` | The problem is figuring out a sane default. :-) | ||
| gaal | or is the problem choosing what to put ther? | ||
| ah | |||
| dudley | isn't the current default sane? | ||
| gaal | the current default is empty | 19:22 | |
| why should you change it though, A? | |||
| dudley | Oh, right. I mean installing to the same path as the currently installed perl | ||
| Aankhen`` | gaal: My patch makes everything use $(DESTDIR). | 19:23 | |
| gaal | url? | 19:24 | |
| Aankhen`` | sial.org/pbot/12240 | ||
| With a small change to fix INST6_SCRIPT being installed into /man/man1. | |||
| gaal | ah, instead of prefix, i see. | 19:25 | |
| dudley | biab | ||
| gaal | how about / ? | 19:26 | |
| Aankhen`` | gaal: `DESTDIR=/`? Are you serious? | ||
| gaal | if i understand what destdir does, it's prepended to PREFIX | 19:27 | |
| if prefix used absolute paths, / is a noop | |||
| Aankhen`` | But PREFIX doesn't enter the picture at this stage... | 19:28 | |
| gaal | i guess i don't understand this then. why do you need destdir at all? | 19:29 | |
| Aankhen`` | Dunno, that's just what was there in the first place, so I used it. | 19:31 | |
| gaal | what's wrong with the current default for it? ("") | ||
| (i'm taking this in small steps) | |||
| brb | 19:32 | ||
| Aankhen`` | I'm not sure how that works when you have this: $(NOECHO) $(MOD_INSTALL) $(INST6_LIB) $(DESTDIR)/lib | ||
| As I understand, that would install everything under /lib. | |||
| (assuming DESTDIR wound up containing "") | |||
| gaal | ah, right, because you aren't using p5's paths | 19:34 | |
| right | |||
| okay, maybe you should s/// p5's paths for your defaults? | 19:35 | ||
| Aankhen`` | ? | ||
| gaal | isn't that how we generate blib6? | ||
| Aankhen`` | Not as far as I know; blib6 seems to be hardcoded... | 19:36 | |
| gaal | i'm looking for some p5 install dir in the makefile.... | ||
| see add_path in PugsConfig | 19:38 | ||
| it peeks at p5 config and looks for a p6 equiv | 19:39 | ||
| Aankhen`` | Ah, right. | ||
| I'll work on that in a while. | |||
| Gotta take a berak. | |||
| Break, even. | |||
| gaal | so maybe you should keep using those configs, but do the tweaking there | ||
| i had better get to bed | 19:40 | ||
| good luck :) | |||
| iblech | YAY! Perl6.MetaModel mostly integrated into PIL2JS :) | 19:55 | |
| stevan++ # Excellent work | |||
| stevan++ # Very readable code | 19:56 | ||
| stevan | iblech: ping | 20:18 | |
| iblech | stevan: pong | ||
| stevan | autrijus: BTW - your journal is (in)sane and correct | ||
| iblech: I am glad the Metamodel is working for you | |||
| feel free to change anything in it you need to | 20:19 | ||
| iblech | Excellent work, really. | ||
| stevan | thank youy | ||
| that one is not self bootstrapping though | |||
| however that will probably not affect your end much | 20:20 | ||
| iblech | Right. | ||
| stevan | where can I look to see the intergration? | ||
| svnbot6 | r6075 | iblech++ | * t/builtins/arrays/elems.t: Added tests for the subroutine form of elems. | 20:22 | |
| r6075 | iblech++ | * PIL2JS: Integrated the MetaModel. | |||
| r6075 | iblech++ | * PIL::Subs, PIL::Params: method declarations emit proper addmethod calls. | |||
| r6075 | iblech++ | * PIL2JS.js: Use the Perl6.MetaModel. | |||
| r6075 | iblech++ | * README: Added section about the metamodel. | |||
| r6075 | iblech++ | * Still outstanding: Perl 6's $obj.meta has to intercept .add_method so one | |||
| r6075 | iblech++ | can store methodrefs (i.e., boxed Functions with special calling | |||
| r6075 | iblech++ | conventions). | |||
| iblech | There you go :) | ||
| stevan | :) | ||
| iblech++ | |||
| iblech | stevan++ # you did the real work :) | ||
| stevan | iblech++ # my work is but an island, your work is the bridge to the mainland | ||
| iblech | Most magic is in PIL2JS.js:PIL2JS.call (line 396) | 20:23 | |
| stevan++ # but without the island, I couldn't build the bridge :) | |||
| stevan | iblech++ # :P | 20:24 | |
| iblech | stevan++ # We'll have to stop this eventually :D | ||
| stevan | autrijus++ # without him, we would not be here | ||
| iblech | autrijus++ # Indeed | ||
| coral | autrijus++ # sane | ||
| stevan is really very very excited seeing the metamodel being integrated | 20:25 | ||
| iblech | It does need some work on the -CPIL side until we actually see the oo/ tests passing, I think. | 20:26 | |
| stevan | ok | ||
| it wont handle all the oo tests | 20:27 | ||
| but it is the foundation for them I think | |||
| iblech | Right. | ||
| stevan | either that or my design is horribly off mark :P | 20:28 | |
| ohhhh : PIL2JS.new_empty_class("Item"); | |||
| bootstrapping into the type system :) | |||
| I am like a proud father today | 20:29 | ||
| my baby (metamodel) is going off to college | |||
| or kindergarten maybe is a better metaphor | |||
| iblech | :) | ||
| stevan | iblech: sehr gut # my german is very rusty | 20:31 | |
| iblech | Thanks :) | ||
| svnbot6 | r6076 | iblech++ | PIL2JS: PIL2JS.js: Added comments about the metamodel stuff. | 20:33 | |
| r6077 | iblech++ | * PIL2JS: README: Minor fixes. | 20:59 | ||
| r6077 | iblech++ | * PIL2JS: PIL2JS.js: Unbreak methods on hashes and pairs. Note to self: Never | |||
| r6077 | iblech++ | assign to .prototype, it breaks obj.constructor == checking. | |||
| Aankh|Clone | G'night. | 21:01 | |
|
21:11
Maddingue__ is now known as Maddingue
|
|||
| stevan | use.perl.org/~Stevan/journal/ :P | 21:14 | |
| today was a good day :) | |||
| of course now I have to do the $work I have been neglecting all day | |||
| dudley | yay stevan++ | 21:16 | |
| dudley hopes to catch up on the metaland festivities this weekend | |||
| stevan | dudley: I think the JS version is probably the most readable | 21:17 | |
| mostly cause it does not bootstrap | |||
| dudley | cool... | 21:18 | |
| of course, I'll probably end up lisping all weekend if the Art of MOP shows up tomorrow... | 21:21 | ||
| kolibrie | stevan: congratulations on the metamodel stuff | 21:32 | |
| I've been too busy with $work to pay attention here | |||
| iblech | stevan: class Foo {...}; say Foo.ref; say ::Foo.ref; say Foo.meta.ref # what should these print? | 22:14 | |
| svnbot6 | r6078 | iblech++ | * PIL2JS: | 22:39 | |
| r6078 | iblech++ | * PIL2JS.js: Added ::Routine, ::Block, etc. | |||
| r6078 | iblech++ | * PIL2JS.js: Made classes stringify to "<class>" and SomeClass.ref to "Class" | |||
| r6078 | iblech++ | (but only temporarily, awaiting correction). | |||
| r6078 | iblech++ | * t/builtins/strings/length.t, t/data_types/anon_block.t: Added try {} blocks | |||
| r6078 | iblech++ | (pending p6l confirmation of undef.chars). | |||
| r6078 | iblech++ | * t/data_types/pair.t: Commented 6 tests (pending p6l confirmation of | |||
| r6078 | iblech++ | $pair[0], $pair[1]). | |||
| r6079 | iblech++ | * New test: t/oo/methods/not_found_fails.t: ""method not found" errors "fail" | 23:21 | ||
| r6079 | iblech++ | instead of "die"" (www.nntp.perl.org/group/perl.perl6....ge/22598). | |||
| r6079 | iblech++ | * t/data_types/pair.t: $pair[0] does, according to Luke | |||
| r6079 | iblech++ | (www.nntp.perl.org/group/perl.perl6....ge/22597), not work (this | |||
| r6079 | iblech++ | confirms my understanding), so s/is/dies_ok/. | |||
| r6079 | iblech++ | * t/builtins/strings/length.t: Changed test to reflect methods/not_found_fails.t. | |||
| iblech | Night all :) | 23:27 | |