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 |