% particle has left particle!~particle@144.81.84.156 % particle has joined #parrotsketch % leo has joined #parrotsketch prehi hi chip not to have a pre-meeting meeting or anything, but that whole newclass-derived-from-Integer thing has short-circuited my frontal lobes in a good or bad way? well, it's always good to be in touch with reality, but it's a bad reality. so I'll call it a draw. :-) also "poke" on the mail I send you yeah. I have to decide whether to give up on basic types morphing or on user classes deriving from them, or come up with a solution to that. Then I can move on to the namespace roundup etc. Riddle me this, since you understand MMD better than I: Assume PIR code which does something like the Perl 6 'my Integer $x = MAXINT; $x++' *if* $x morphs into BigInteger, will the MMD mechanism actually break, or will it follow the new type on the next dispatch? all method calls and MMD will dispatch as BigInt thereafter figured as much. wondered whether there was any caching by PMC* or only by type# that is both Integer and BigInt must have the very same methos/MMDs it would be user error to design a class that morphs into something less capable the current MMD cache is a 2-D table, but we can't keep it as that (too big) OTOH, even if BigInt isa Integer, the extra Manhattan Distance could throw off a user's carefully designed MMD system yep Also, if a ParrotClass lists itself as isa Integer, even if the internal Integer instance morphs, it will still claim to be isa Integer (right?) after morph to BigInt MyInt isa BigInt and BigInt doesn't claim to be an Integer at all which is probably correct as all the internals are different so from parrot's POV a Integer->BigInt morph is as big as e.g. Integer->Complex grr the whole type system is morph-averse btw, ISTR that the ParrotClass has an explicit list of type IDs, it's notional @ISA how does the morphing of the internal Integer object change that? s/Class/Object/ I mean if the details are too big for IRC then never mind, it's not important np, but the ParrotObject doesn't do the math - the value does it well, we'd need 2 type ids, one for the perl6ish Int and one for the value ok the ParrotObject is the thing you get in Perl6 with 'my Dog archie;' (but it's not exposed as such in Parrot yet) what do you mean "as such"? the lexical $archie isn't tagged as "I'm guaranteed to be isa Dog"? there is no way to get a PMC for that 'proto-object' % allison has joined #parrotsketch I see no proto-object here you can only get a real object my archie .= Dog.new(); oh wait, I think I remember now, the proto-object is ... yeah, but you didn't do it right. I tihnk it's my Dog $archie; $archie .= new() yeah - missing '$' - sorry the key is that you don't say "Dog", not the missing "$" once you declare Dog you don't have to repeat yourself (in p6) yep but we can't do the first step yet can't that be done with a P6-specific pmc? I think that's gonna be Audrey's job. Perl6 lexicals will either be a special ParrotObject or there'll be some fancy handwaving when the target of a .= is PMC null just what i was thinking we need some more syntax for that, maybe just a method my Dog $spot will be implied my Dog $spot = Perl6PseudoObject(Dog.typeid) * chip & # afk wait! when will you be back, chip? obra: you shut the barn door too late ;) next time: shackles parrotsketch roll call! who's here? * allison is here I see: leo, audrey, particle, cognomial But are they at their keyboards? ;) asdf dunno about audrey leo's cat is yup audreyt vanished off to $work recently, I think but we'll see % pmichaud has joined #parrotsketch hi patrick Hi all. Shall we get cracking? hiya, particle * obra looks around the room and points at.... particle. How are things? well. i've been extending pge's rule compiler, in prep for the bnf parser it can also redirect output, to make makefiles happier noticed that the rt queue is growing larger, some triage/cleanup should probably be done soon EOR Anything that can be done to make your parrot-life more fun? we could delete a bunch of TODOs that aren't actually tickets :) pay me :) wish I could :) actually, with money comes hassles. i'm maxed out on fun, for the time i have ok. allison? mainly PDDing I sent I/O off to chip, but still need to expand it in some places I'm going to run through today or tomorrow and do very quick first versions of events, exceptions, and threads will's been taking off on APL/Punie (it would probably be less confusing if he stopped calling it Punie, though :) he's had the occasional question EOR AFAICR ok. is speccing fun? or at least interesting in that eats-your-brain way? Are there PDDs you'd like someone else to take a first stab at? I'm having fun let's see... any unicode experts? well, not expert, but ... * obra wonders if we could draft kogai-san there's a further qualification, though, and that's the ability to not hold to tightly to any one plan that is, it's chip's decision, and what we need more than anything is a summary of the options nod that, and the willingness to dig into Parrot and see how it works now ok. I'll see him next week in japan cool and poke ok. chip? even if he doesn't want to write the PDD, we can pester him with questions sure recruitment == good ok. chip's net is broken leo? * finished major parts of namespaces as far as pdd21 is grokable for me. Todo: - how (un-)typed is Parrot's default namespace? - interaction of .namespace [] and newclass/subclass still waits for confirmation * added namespace_dump.pir example showing current state * more PIR codegen brainstorming with Audrey, Hackathon ended Wed. * did some code cleanup, e.g. remove dead opcodes (chip is working to restore his net) EOR what's next on your list? dunno yet just those two todos? nod. stick on your list: updates to the parrot milestones document :P (I'm starting to get poked about our april 1 update to the sponsors) well, the (un)typed thingy has many implications but chip is aware of that ok some internals need to be layed out too, it looks like e.g. var/value behavior of PMCs or perlish str vs Str so I'm basically blocking a bit on chip now ok. Is it worth going back to the things we think are done for milestone 2 and poking at them to make sure they're still at the "Done" state? while you wait a base implementation is there for almost everything threads are currently deactivated due to calling conv changes, though leo, which bits of milestone 2 have we paid for so far? don't ask me ;) We can poke ovid/dave for the list I'm told chip is back. Let's move forward with the reports chip? % Coke has joined #parrotsketch *poof* close. not quite, though (chip msged to say he was back. but failing chip, patrick?) hello, all. Busy week here I added "return values" to PGE, consistent with the late-february updates to S05 thus closures can return a value into a match, and the match object uses the return value (instead of the string actually matched) for various return operations I'm also about this ---> <--- close to being able to publish a perl 6 parser (more) but I discovered that parsing list ops is a bit of a challenge in the operator precedence parser, so I'm redesigning it slightly to try to handle it if it doesn't work out, then Larry has said it'll be okay to do that portion of the parse using top-down parsing, but I still want to make the attempt at bottom-up in fact, during discussions yesterday on #perl6, I decided that the bottom-up parser could use some refactoring and improvements, so that's basically what I did yesterday even if the refactored bottom-up parser doesn't end up working out for parsing listops, it's going to be a lot less complex and more efficient than the one we have now Allison, Will, the changes to the bottom up parser might affect Punie and APL, but I'll try to update those as well or work with you to resolve any issues ok k. I don't mind a little shake up for progress :) Last week I spent the better part of a day trying to figure out why PGE was having trouble on my x86_64 platform; it kept being unable to find symbols in the global namespace. I suspect this is related to the namespace changes Leo was making everything worked fine (as in "all tests pass") on 32-bit x86, so I switched over to that for development until I could get x86_64 working again I checked this morning and all tests pass on x86_64 again, so I'm guessing (hoping) whatever was causing the issues is now gone jesse, I still owe you updates to the milestones document, and will do that. Hope you don't mind if I prioritize code over document for another day or so ok pmichaud: last time I checked x86_64, it was ok again - please report if it's still failing leo: yes, that's what I got as well this morning. If I run into problems I'll just file an RT ticket saying "it's happening again". (more) It's very difficult to write good test cases for when it fails, and I can empathize with the difficulty of being able to solve problems you can't reproduce :-) I've an x86_64 box that I can ssh into - np the changes I'm making now should give things a good workout, so we'll know by tomorrow :-) end of my report, I think cool. I have one question, unless Coke asks it first :-) sounds like you're cranking through. we still have a couple reports left audreyt: you here? coke: you here? chip: you here? pong. you win! what's new? Committed what is basically a placeholder for APL at the moment. Got some progress on converting punie to APL (which is basically what I am at the moment.) Some issues with reading in utf8 files (which leo has pointed to a fix for, but I'm hoping someone more C-capable will take). Doing some research on syntax, etc. end of line cool chip: audreyt: if you appear, feel free to report otherwise, it's Question Time! pmichaud: go for it coke alluded to it already -- reading utf8 files (more) this is going to become fairly important for the perl6 compiler as well, since there are at least a few utf8 characters that can appear in source code (RT#38733) sounds good. I suspect that there can be a quick fix, but it may also point to the need to have the io PDD available and implemented on a quicker timeline (I don't know what the other priorities are at the moment) ack. fiancee is locked out of the house. I need to run. Apologies. I'll see logs later, obra that's my one question for now. I'll just track the RT ticket pm, allison: does pge's return object mean that pge now overlaps with tge's functionality? sort of it means that you can use pge in place of the first transformation ooooh nice :-) glad I implemented it pmichaud := megalomaniac :) (that is, if I understand correctly that you can return a custom object for every node, completely eliminating PGE::Match objects) :) allison, that's how i understand it, too. but i understand pge better than tge, so i asked it doesn't eliminate them, it just means that the return value is used for stringify, numerify, and coercion ops tge and pge are very similar the main difference is the input format pge takes string input, tge takes tree input tree as in objects? hmmm... then I'd say pge doesn't replace the first transformation, but it can simplify the job of the first transformation I remember another comment I wanted to make, which is that if any of you have anything you'd like to see different in PGE's parsing (especially the operator-precedence part), now would be a very good time to let me know :-) particle: tree as in objects, hashes of hashes, arrays of hashes, etc * chip is back, has short report & Q for Allison does the operator parser deal with monadic, dyadic, and ternary operators? * allison is virtual obra pge still has to return match objects because they still have to be able to report ".text", ".from", ".to", etc., as well as have places for storing positional and named captures coke: yes, as well as operators with optional terms patrick: that makes sense pm, allison, thanks. that clears matters up a bit for me. looking forward to tighter pge/tge integration, too let's go with chip's report and then resume questions Last week's discussion of value types vs. mutability led to a discussion of morphing, which led to me finally noticing a schism in Parrot's value model Given C (sorry for the pidgin Perl 6), it's obvious that for consistent MMD it's very important that the manhanttan distance (MD) between MyInt and Integer remain 1. But that goal can't be achieved while also doing the right thing <$mi = MAXINT; $mi++>. Without morphing, ++ doesn't work, += doesn't work, and even '=' doesn't work. But with morphing, the MD becomes inconsistent. * particle suggests harnessing wormholes it's close to that you need a special case distance function for promotion We either have to cheat on MD ("I'm really a BigInt but dispatch me like an Integer") or cheat on ++ ("$x++" is syntactic sugar for "$x = $x + 1"). Both of these are serious disruptions. In other words, you can't have a consistent MD and also preserve value on mutation. because consistent MD forces a limited range for the type, and if you want to store a value that doesn't fit in the range, the irresistable force meets the immovable object. allison: what does Perl 6 say about C? s/Integer/Int/ ;) Perl 6 intrinsically supports big integers and rationals through its system of type declarations. Int automatically supports promotion to arbitrary precision. [...] (from S02) aye Good background info but not an answer, I'm afraid. afaik, $x++ is $x = $x + 1 I agree, not an answer (I'm not sure I'm clear on the question) according to audreyt the variable $x get's a new value, which happens to be a BigInt in that case allison: after $x++, is typeid($x) guaranteed not to have changed? also, after $x++, is \$x unchanged (i.e. is it guaranteed still to be the same object it used to be [modulo tying anyway])? [leo's answer says "no" on the first one] ah the question is about autopromotion mutation generally, though autopromotion is one common case $x has still the type 'Int' for the built in objects, particularly built in low-level types, you have no guarantee that the type will stay the same leo vs. allison: FIGHT integers may be autopromoted to BigInts :) well, one is parrot level, one is P6 level - we can't mix that fight ;) allison: in p6, BigInt isa Int? yup, they're entirely separate there isn't a BigInt in P6 it's just 'Int' I'd say BigInt does Int leo: well, for now I'm asking about Perl 6, if Parrot issues aren't directly relevant please delay that is, there isn't an inheritance relationship but you will have some way of checking "does this thing fulfil the need to store an integer"? To summarize: Int is a role. as long as a value does Int then it's OK for the runtime to store a valu eof that type in $x. And the type can change, and the actual value identity can change, on a mutation op like ++ or += or .= or ... this is the Perl 6 way. yup (leo is correct that the synopses don't seem to make any mention of bigint. This again doesn't answer the question posed, but thought I'd mention it.) it's Perlish don't depend on implementation details But it totally dismissed the magic variable model. but do the right thing how so? The Perl 6 equivalent of $| implements $|++ ina way that might end up storing a value that isn't a BufferMagic. ... but of course you're doing your operatoins with MMD. So you would never get to that point, right? hmm... I figured the particular class would decide whether it's mutable if it's done by roles, then $| can 'does' a role that's not mutable ...what allison said... who decides whether a class/role is mutable? Is the mutation externally imposed? Or does the object mutate itself when the situation demands? The latter is closer to Perl 5's string->int->float type of mutations. my Intenet is so bad I've switched to my cell phone particle: whoever implements it the object mutating itself is what I've been planning on all this time, from Topaz forward mutability has to be builtin into the thingy e.g. array, but in the pugs model, the scalars are immutable that is, if you're implementing a tied class, then you know it can't mutate to another class without problems What I'm seeing now is that the type tree for Perl 6 and the type tree for Perl 5 will be 100% disjoint. We can't use Perl 6 behaviors in a Perl 5 environment, ande vice versa yep MMD on Perl 5 values will not be effective becaues they will have to morph to maintain the Scalar symantics we've come to know and/or love (tying in particular, but there are other cases) well, that makes sense the semantics of MMD are language-dependent you can't use MMD from one language to another it's worse than that MMD only works when you havea consistent type, and Perl 5 (with its 'tie' and autoconverstion string/int) doesn't match well that model (and can't use MMD in a language that doesn't use MMD) allison: as the CLR example teaches us, all languages that run on a VM will be extended to use the VM's features, even if the original language dialect didn't contemplate them the autoconversion string/int is sticking around in Perl 6 perhaps nicholas could provide a sanity check with that MMD may yet be a useful implementation technique for the Perl 5 language targeters all this says to me is that we don't have our MMD model speced out yet allison: autoconversion is no biggy when you have a value object model, which is probably why Larry chose it, despite its performance hit (in the most common data types (which I would not have tolerated)) Well. It does seem to me that types should advertise whether they mutate, and if they do, they shouldn't be allowed as base classes. that is, we've identified that one of the requirements is to provide at least limited MMD to other languages they can be allowed as base classes the inheriting child just needs a way to override the mutation if they don't want it to happen allison: it's not so bad as you may think< I believe.. For example, if all Perl 5 scalars are arranged to be isa perl5::core::scalar, then MMD on that type will mostly work (if they want it to happen, they just inherit the mutation code) allison: methods that could cause mutation must be overridden in the derived class? can be overridden, not must be if the parent class had the mutation, there's likely a good reason for it, and the child may have the same reason for mutation But mutation doesn't really work that way. in the sense that mutation happens at a lower level than method calls? if Cog isa Dog and isa Cat, and the Cat class knows how to morph into a HissingDemon, how can the Cog class permit that? What does it become? When you're composing to do MI, the whole odesn't mutate when the part does. It subverts the composition in the first place. in that case, the Cog doesn't want to inherit the mutation, so it overrides it mutation isn't a thing to inherit. It's like a print statement. It can go anywhere based on arbitrary circumstances. It's an action, not a property. somewhere there is code that says "here's how you mutate a Cat into a HissingDemon" well, yes, but the point I think I'm not being clear about is that there are several different mutations tha tmay all be possible, and their triggers can be arbitrary "forbidden" and "allowed" are pretty much the only two mutation states I think a class has. Once you allow it, I don't see that you'd want to be more specific (because in some cases you probably can't) cf. Perl 5 tie BTW, you're way beyond normal end of meeting and I think I probably took enough time I do understand Perl 6 better and that can only bee good chip: I think we're very glad for any time you can take :-) * chip grins ruefully leo: Anything Parrot-internals-oriented you think I'm missing or misrepresenting? especially when dealing with a flaky net connection :) nothing besides the already mentioned stuff OK well, a release name/number for the next one is a thing you could figure out in the next days Well, I guess the answer is that the two models can't be reconciled in the same language, so we just have to enable both and let the users deal with the impedance mismatch in between. Hopefully this won't make C impossible leo: thanks for letting me take the easy one I don't think it will be impossible I think we're probably making it out to be harder than it really is maybe so. trying to see the crevasse before we fall in it, is all (though there are some assumptions and consequences we need to think through) yup any other questions? I'll be in Portugal around the first week of April, release will be before neat. leo++ releases sounds like we're drawing to a close a-firmative thanks everybody, and talk to you next week! cya yeah - me's implementing some food in the meanwhile ciao l8ter % pmichaud has left #parrotsketch % Coke has left #parrotsketch % allison has left allison!~chatzilla@sub17-30.member.dsl-only.net argh, missed the sketch :/ * audreyt is surprised to hear about "BigInt" being a class in P6 -- it's not mentioned anywhere. audreyt: a bit ;) audreyt: yep - that's what I've said (well, alluded to in very very early A12, but not in synopses nor discussions) I still think the one-bit-toggle between 31bit-int and BigInt is the correct way to go for Perl6 "Int" at least that's the synopses's semantics. that's an implementatio detail the thing is that promotion wouldn't changge typeid. otoh, the "BigInt does Int; int does Int" model doesn't quite make any sense :/ * audreyt is for complete elimination of morphing (under p6 context) -- but you already know that :) yeah its of courese strongly related to values and Str is slightly special e.g. appending one char to a string of length 1M ... how does morphing help here? I've no troubles with Int/Num at all not morphing but having immutable values or mutable Strs in that case but that's fine, as buflen allows sharing (to a degree) if you append 256+ bytes then it has to be realloced underneath it's kinda similar to tuples you think, strings within the alloced mem area can still be shared? sounds like a plan in combination with COW I don't see why not... it's just COW yeah ok - but that still is implementation detail & optimization - Q is: Str is an immutable value at P6 surface? surely is "moose"++ # dies chip: ping ;) chop("foo") # same I think these facts are still well hidden in S*.pod S09 stipulates that Str is intrinsically immutable S02 says "List" is (but lazily evaluated; "Tuple" is the fully evaluated form) and all above are immutable yeah, spread about several S* in at most one sentence that's why we need Perl6::API :/ * audreyt will work on it next week in .jp S02 should state that very clearly * audreyt discovers that she has a commit bit to S02 but that might be a tradition in perldocs that it's utterly unclear, where what is doced ;) heh indeed :) * leo thinks that perldoc perlre is the first doc that is mentioning p5 string escapes ;) (the first being that one, when you go through perldoc perl) sleep - bbl :) g nite % leo has left leo!lt@feather.perl6.nl % leo has joined #parrotsketch