% contingencyplan has joined #parrotsketch % contingencyplan_ has left contingencyplan_!~contingen@cpe-76-186-27-146.tx.res.rr.com % rdice has joined #parrotsketch % allison has joined #parrotsketch % cotto_work has joined #parrotsketch % jhorwitz has joined #parrotsketch % Coke has joined #parrotsketch % barney has joined #parrotsketch % Infinoid has joined #parrotsketch Happy Tuesday, parroteers. happy Wednesday Eve, Coke % chromatic has joined #parrotsketch Good day everyone. ~~ good evening hi we have enough folks to start on the reporting. chromatic? Alrighty, let's begin. allison? ... I see what you did there. - Launched the Strings PDD out of draft. - Found Bob's message on inferior runloop, but haven't replied yet. - Working on the Concurrency branch, will have some tasks for chromatic (or others) tomorrow. EOR - Applied rotty's riaxpander patch to Eclectus. - Added nqp/bootstrap/t/harness. The '-files' import option for P::T::Harness broke unified languages testing for Eclectus. .eor I've spent my week optimizing. Rakudo's about twice as fast as it was. Also I've identified a few other slow parts, and we're removing some dead code as a result. Coke? Minor cleanups / code removals in progress: - cleanup op syntax patch - type_ids branch .eor Infinoid? * I've gotten a running start on the "M2 Bytecode format" milestone. * Working in the "pdd13pbc" branch, I've got stub PMCs in place, next step is to flesh them out. * I've posted my game plan to the list, and broken out the stages into RT tickets, if anyone is interested. * Meanwhile, in trunk: applied some stuff from RT: IMCC and OpenGL. Fixed some fallout from OpenGL. * Fixed a couple of minor breakages in lua and rakudo. Fix a couple of codingstd issues. * Several g++ fixups. Lots of weird stuff... typos in preprocessor macros, disappearing globals, symbol mangling, consting. * In the ongoing battle against g++, I've started consting the "SELF" parameter for a few vtable methods. * Not sure how far I should go with that, or even if its the right way to go. * Reserving a question ticket for that. 1; jhorwitz, are you here? just lurking today. returning to form after weeks of $DAYJOB monopolizing my time and a vacation. particle? released 0.6.1. too busy vacationing to keep up with parrot development last few days windows builds have been broken now it builds but tests are broken working on a fix .ned heh. pmichaud? * improved PGE code generation a bit * removed the saveall/restoreall opcodes, eliminated a lot of dead code * created a branch for removing the rest of the user stack ops, have already done it with no problems * however, DEPRECATED.pod indicates we don't remove those until post-0.7.0, so it'll have to stay in the branch for now * looking at improvements to bsr/ret, since PGE uses those opcodes very heavily * normally I don't get into parrot core stuff, but in this case I think it's useful because I'm also looking at PGE redesigns for longest-token-matching and it's helpful to know more about Parrot internals (and these are relatively straightforward thus far) * still need to push out the rakudo milestones document -- it's in my head but needs fingers to pound a keyboard. that should happen tonight. definitely by tomorrow afternoon. reserving two question tickets. eor tewk? Tene? PerlJam? Okay, let's go to question time then. Infinoid, go ahead. Ok. I've done some consting of vtable methods, and have some more to go. I've run into some cases that make me less sure of this approach. At first glance, isa(), get_class(), name(), type() appear pretty easy to const but some of the implementations of those vtable methods call, for instance, get_string() ...which I'm pretty sure shouldn't be consted. So I want some opinions. Should there be strict rules about what the above listed methods can call? Or is this the wrong approach entirely? Are you consting only SELF or other arguments? I am only consting SELF Why shouldn't get_string() be const? it might be generated lazily from an array, or read lazily from a network socket what if we did get_string() on a lazy.... right i really don't think any vtable methods should be const. but whatever... as long as it's documented in the pmc pdd. it's fairly easy to contrive a case for get_string being non-const I even have concerns about SELF being const also, an expensive stringification process might want to cache the result Is this const *SELF or const * const SELF or * const SELF? Infinoid: why did you start making SELF const? g++ was complaining? chromatic: const PMC *pmc (in the generated .c) allison: g++ was complaining, but so does gcc some functions in parrot are declaring themselves with a consted PMC pointer, and then turning around and calling VTABLE methods which violates the whole "const" contract. we certainly don't want to restrict what functions can be called from within various vtable functions agreed I posted RT #53066 about this, and was mostly warnocked. Andy had an implementation concern, but I feel its mostly a design question I'd push the bug back a level and say that any PMCs that call vtable functions shouldn't be const That's going to remove a lot of const from the rest of the system. its easy to back out the vtable consting work I've done so far. so far I'm hearing that backing it out is the way to go. right? ...and then start un-consting the stuff that calls vtable methods s/any PMCs/any functions/ chromatic: well, what's the benefit of adding const, when the vtable function can modify the PMC? oh, I see... "any PMCs" works too any function which can modify the PMC, or which calls something which can modify the PMC, really shouldn't be declaring that PMC as const. period. PMCs are never const. Yeah, but the argument seems to be in part "Oh, someone might someday eventually call something from here which might modify the pointer, so we can't ever use const." its about modifying the struct, not the pointer const PMC *pmc, not PMC * const pmc Right. the argument is only for cases that currently warn about const we can't const the vtable functions for some PMCs and not for others unless we want to declare certain vtable methods as definitively and always being const.... right and of course, those warnings turn to errors for g++ I'm fine with removing (or reviewing) const where we cast it away. That's pretty clear. so, we have to make a blanket decision for all vtable functions I just hate to make decisions based on an attempt to predict the future. allison: the question was whether certain vtable functions should be const, not whether vtable functions for certain PMCs should be const chromatic: true. Infinoid: right, but the fact is that since we can't distinguish between individual PMCs, then they can never be const, because we don't want to impose that decision on other PMCs chromatic: actually, the decision is to explicitly not try to predict the future makes sense. putting 'const' on a PMC doesn't say it can't ever be modified, it's simply a contract that the current function won't do anything that might modify it ok, I'll back it out. that'll solve some current warnings and give me a starting point for future work. (detecting currently casted-away consting issues will be fun.) the PMC could still be non-const to a caller yes, absolutely. for each function call boundary, const-ness should only increase pmichaud: right, but the problem here is with non-const vtable functions called by the function that const'd the PMC Does const PMC mean that we won't modify the contents of the struct directly or the contents of the contents of the struct? That is, can we assign to the struct pointed to by the data pointer of the PMC struct even if the PMC struct is const? allison: right -- if a function is calling a non-const vtable function, then it cannot const the PMC chromatic: good question. and if we presume that nearly all vtable functions are non-const (which I think is the correct assumption), then functions that call vtable functions should not be consting the PMCs yep, and I will be un-consting those. thanks! EOQ. When we're talking about modifying the PMC, we're probably not talking about modifying what it contains directly -- we're talking about modifying things accessible through its data pointer, which presumably we're not replacing. that's not 100% guaranteed let's hold off on that optimization for later, chromatic is it really an optimization? I tend to think of const a more of a defensive programming measure. (yes, I know that 'const' gives compilers room to optimize, but I don't think that's common in the cases we're discussing) the warnings gcc will emit just for having called the non-const function will be a good indicator that the PMC or values pointed to by the PMC may be modified so the warning will raise a flag for both I'm comfortable with backing out the vtable consting for now. ... provided we don't end up with messier code trying to work around g++ errors. show me a software project with no "const" at all, and I'll show you a project free of messy const warnings :) are we talking about "const PMC *foo" or "PMC * const foo"? the former, allison const PMC *pmc just checking, everything we said stands agreed, preparing to back out the const vtable patches and fix up the callers. thanks! Shall we move on to pmichaud's questions then? yes pmichaud, go ahead. q1: I was a bit surprised to see that the user stack ops are post-0.7.0 deprecated. Do we expect that to occur soon, or is there a strong reason for holding them a long time? mainly just a desire to save major feature changes for more major versions there's no reason 0.7.0 can't be the May or June release kill 'em yeah, I say go for it at any rate, I've removed and/or identified all of the user_stack opcode usage in trunk, so whenever we do decide to get rid of them it should be straightforward to do so kill them now (more) If we can roll the branch back in in the next week or two, I'm all for it. better to roll branches in quickly I was actually just going to remove the branch. the 0.7.0 designation in DEPRECATED was made from a previous release plan with where things are now, I can remove the user stack ops directly from trunk with no problem. i.e., it can occur at any point you all say it should. :-) we released 0.7.0 functionality in 0.6.0 so say we all particle: there is a big difference between adding and removing things early. . o O (allison is a Cylon) coke: we renumbered the releases but not the files that referenced the old release numbers I don't see a problem with it, just make sure it goes in the news with some kind of special notification that it was removed ahead of time. it's a documentation error just happens to be in an important file documentation error, but also a promise of sorts "these ops will exist until the 0.7.0 release". The fact that we renumbered releases isn't highly relevant that said, I'm greatly in favor of killing it. :-) Everyone working out of the tree knows the risks. removing the user stack ops is a significant change, and a good reason for a version bump Failed 45/580 test scripts. 216/11212 subtests failed. okay. So, I'm hearing we can go ahead and get rid of them now. these are the risks :) pmichaud: yes, do it they have been listed as deprecated, we're just doing it out-of-sync with the number releases so it's not like we're springing it upon people unawares okay, it will be done. Q2. I'm running into a couple of places where it will be useful to have a hash function (e.g., md5sum) there's already a MD5 library written in PIR in runtime/parrot/library/Digest/MD5 I'm fine with using this library -- however, it's currently written with global functions I would like to either (1) refactor the library to be OO, so we aren't polluting namespaces (2) decide that we're going to use a non-PIR based library for computing md5sums (3) figure out another standard way that we want to produce unique identifiers (end of options) I'm in favor of #1 for now. fperrad created a uuid library wasn't the md5 unique identifiers a temporary hack? he's using it for lua iirc happened last week allison: it may be a temporary hack, but I think it may end up being for largish values of temporary particle: right, but these identifiers have to be unique even between different runs of Parrot for the cases I'm looking at, I'm not worried about collisions % paco has joined #parrotsketch even across different runs of parrot even across different machines how does md5sum give you something unique across runs of parrot? it depends on what you're summing, of course as long as the possible colliding things produce unique md5sums, you're safe. back to the original question: global functions are evil and should die. OO PIR, or a C library, or a C PMC would all be an improvement #1 sounds easiest to me I can do OO pir fairly quickly, based on what we have now. oo pir pmichaud: then do that ... if OO pir is a goal of the libraries, there's a LOT of cleanup to do. further refactors can come later the only reason I consider the other options are speed, but the cases I'm looking at won't matter much (someone should write that down.) I'm also not trying to establish that all libraries should be OO -- just this one. coke: just not global, namespace polluting libraries Someone should write a ticket tracking system in OO PIR. we can make an md5 pmc in c if we need speed I thought we already had that with the crypto libraries. just write an md5 pmc in pir for now on every platform? most md5 implementations I've seen are already OO-ish, so this one ought to be as well particle: yeah, that would be the next stage of refactor I was a little surprised that it wasn't (but also know that the MD5 implementation was probably pre-OO-parrot) anyway, I have my answers. Thank you all. Any more questions? i have a comment about GSoC the final list is out and published tpf got six slots two are parrot projects, and one is perl 6 "Native Call Interface Signatures and Stubs Generation for Parrot" - tewk tewk++ "Incremental Tricolor Garbage Collector" - wknight8111 wknight++ "Flesh out the Perl 6 Test Suite" - adrian kreher also, i hear ASF (apache) has a project related to parrot too i don't have the exact title, but it's senaka, integrating the Harmony GC with parrot "Build a garbage collector for C/C++ programs on the top of Harmony" so, there's possibly some overlap with the gc projects we'll have to manage this summer that means we may each learn more than we want to about parrot gc * Infinoid has bought a nice thick GC book for this purpose. which one? "Garbage Collection: Algorithms for Automatic Dynamic Memory Management" ISBN-10: 0471941484 yeah, that's a good one Anything else? not here. not here. I've had too much fun already. thanks, all! Okay, thanks everyone. Same time next week. % Infinoid has left #parrotsketch % cotto_work has left #parrotsketch % allison has left #parrotsketch NotFound: quizas te interese el canal #parrotsketch del servidor que de tije alli, por lo visto ahi se dicute detalles de implementacion : "Incremental Tricolor Garbage Collector" - wknight8111 upss .. sorry % chromatic has left #parrotsketch not for this channel .. % barney has left barney!~bernhard@dslb-084-058-102-180.pools.arcor-ip.net % Coke has left #parrotsketch % jhorwitz has left #parrotsketch % rdice has left rdice!~richard_d@CPE0014bfafbbd5-CM0011e6ecf48a.cpe.net.cable.rogers.com % rdice has joined #parrotsketch % rdice has left rdice!~richard_d@CPE0014bfafbbd5-CM0011e6ecf48a.cpe.net.cable.rogers.com % cognominal has left #parrotsketch % cognominal has joined #parrotsketch % contingencyplan has left contingencyplan!~contingen@cpe-76-186-27-146.tx.res.rr.com % contingencyplan has joined #parrotsketch % particle has left particle!~particle@c-24-19-3-148.hsd1.wa.comcast.net