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