|
weekly Rakudo status meetings with phase transitions: Tue 19:00 UTC | IR clogs at irclog.perlgeek.de/phasers/today Set by moderator on 20 September 2010. |
|||
|
04:45
ash_ left
17:11
ash_ joined
17:59
ash_ left
|
|||
| moritz_ | prepasting report, because I can: | 18:13 | |
| * worked a lot on the book; would like to encourage others to contribute too | |||
| * worked on the backtrace printer, simplified it in one case, made it smarter about warnings | |||
| * cut the compiler release | 18:14 | ||
| * implemented a basic version of require | |||
| * a few doc improvements | |||
| .EOR | |||
|
18:39
masak joined
18:46
masak left
18:47
masak joined,
masak left
18:57
masak joined,
masak left
18:58
masak joined
|
|||
| Util | Pre-pasting report, because #parrotsketch has the right idea. | 18:59 | |
| * Posted 2 more Perl 6 solutions to RosettaCode tasks: Topological_sort and Equilibrium_index = also translated Ruby solution of Sudoku task into Perl 6, but am not happy with it yet. | |||
| * Gave a Perl 6 talk at Atlanta.pm = Rationals = .perl & :pairs vs p5's Data::Dumper = meta-operators ( X Z Xop Zop, [op] ). | 19:00 | ||
| .end | |||
| (trying again) | |||
| Pre-pasting report, because #parrotsketch has the right idea. | |||
| * Posted 2 more Perl 6 solutions to RosettaCode tasks: Topological_sort and Equilibrium_index | |||
| = also translated Ruby solution of Sudoku task into Perl 6, but am not happy with it yet. | |||
| * Gave a Perl 6 talk at Atlanta.pm | |||
| = Rationals | |||
| = .perl&:pairs vs p5's Data::Dumper | |||
| = meta-operators ( X Z Xop Zop, [op] ). | |||
| .end | |||
| moritz_ | Util++ | ||
| pmichaud | My report, and then I have to (alas) depart on some errands: | 19:01 | |
| * Some minor bugfixes and code explorations | |||
| * I'm still working on getting feedback on cpan6 design details -- will report next week. | |||
|
19:01
ash_ joined
|
|||
| pmichaud | * Will cut the next R* release later today | 19:01 | |
| EOR | |||
| afk for about 30 mins | 19:02 | ||
| moritz_ | and now it's #phasers time! | 19:03 | |
| masak | seems the meeting has begun now. | ||
| moritz_ | jnthn? masak? sorear? any reports? | ||
| sorear | Hello moritz_ | ||
|
19:03
diakopter joined
|
|||
| moritz_ | (non-rakudo reports are also welcome) | 19:03 | |
| masak | not much here. I've been present, but haven't done anything of note. | 19:04 | |
| jnthn | writing my report, ready in a moment :-) | ||
| sorear | niecza/mm is right about ready to merge | ||
| jnthn | someone else can go while I finish typing :-) | ||
| sorear | niecza is now generating meta-objects at compile time, mostly, instead of generating a giant BEGIN/PRE-INIT sub | 19:05 | |
|
19:05
colomon joined
|
|||
| sorear | (ok we still make a giant sub to thaw the objects :/) | 19:05 | |
| moritz_ | \\o colomon | 19:08 | |
| colomon | o/ | ||
| guess I can report quickly while we wait on jnthn. | 19:09 | ||
| moritz_ | +1 | ||
| colomon | basically vacationed and got a cold. | 19:10 | |
| I've been working on getting the ABC module to actually do something useful. | |||
| sorear just broke the $*FOO test, so the merge isn't likely to happen *right now* | |||
| colomon | adding actions to the parser, etc. | ||
| sorear | What is ABC supposed to do? | ||
| colomon | generated some blog posts on it, will generate some more as soon as I have the tuits, I'm very eager to accomplish something here. | ||
| sorear: ABC is a simple music notation. | 19:11 | ||
| I'm working on getting the grammar to translate from ABC notation to Lilypond's music handling. | 19:12 | ||
| s/handling/notation/ | |||
| so in terms of perl 6, it's just something interesting to me implemented in perl 6 | 19:13 | ||
| sorear | I see. | ||
| colomon | learning my way around writing actions for a grammar, getting practical experience writing roles, etc. | ||
| jnthn ready, btw | |||
| colomon | .eor | ||
| jnthn | colomon: Get well soon! | 19:14 | |
| moritz_ | jnthn: go ahead then | ||
| jnthn | Last week | ||
| * Gave 6model on .Net support for attribute storage (get and bind) | |||
| * Finished porting all the representations I'll need for now to Parrot's 6model implementation | |||
| * Filled out the KnowHOW much more in the Parrot implementation | |||
| * Ported many of the JnthnNQP changes into nqp-rx | |||
| * knowhow Foo { ... } stuff now works | |||
| * Got attributes working on 6model on Parrot impl too. | |||
| * Was quite nice to run the same code snippet on Parrot and .Net, both compiled (well, one cross-compiled) through NQP and using two implementations of the same meta-model design. :-) | |||
| * Started to stub in ClassHOW | |||
| * Got some thinking time on how natively typed attributes and stuff could look, dynamic method caching techniques, etc. | |||
| This week | |||
| * Focus on getting to a basically functional ClassHOW on nqp-rx | |||
| * Try switching NQP's class keyword to use it, and start dealing with the fallout | |||
| * Try and get multi-dispatch stuff prototyped in the .Net implementation | |||
| Blockers | |||
| * Broken body clock due to doing lots of on-site work at the moment. "Patches welcome." ;-) | |||
| * Brain cycles - the coding is pretty easy, most of the time... | |||
| END | |||
| moritz_ | colomon.health++ | 19:15 | |
| colomon++ | |||
| jnthn++ | 19:16 | ||
| sorear++ | |||
| moritz_ has one thing to discuss | |||
| currently it feels rather lonely to hack on the book | |||
| colomon | let's not forget moritz_++, as he seems to be the main rakudo commiter at the moment. :) | ||
| moritz_ | sometimes people read through it, and complain that things aren't explained well | 19:17 | |
| which is great | |||
| but it seems that often I'm the only one working on actually fixing it | |||
| so, what can we do about it? | |||
| sorear | * niecza/mm is now merged. | ||
| Util | I can tackle more of the "things that aren't explained well" | 19:18 | |
| moritz_ | ++Util | ||
| colomon | moritz_: do we have some sort of list of what needs to be done on the book? | ||
| sorear | pmichaud: Did anything become of your plot to contact obra, scwern, Alias? | ||
| masak | moritz_: I have a fair number of things to contribute, but somehow I've never gotten around to starting. | ||
| moritz_: there was a point at which I couldn't build the book any more, and my contributions dropped off after that. | 19:19 | ||
| moritz_ | colomon: there's a bug tracker on github, and some TODOs in the code | ||
| Util | colomon: github.com/perl6/book/issues | ||
| masak | I guess I should start by trying to make the book build locally again... | ||
| apologies for the lags at my end. | |||
| moritz_ mostly considers the .pod files onlz | 19:20 | ||
| jnthn | moritz_: I paid attention to the subs-n-sigs chapter tickets, but didn't get to fix them yet. Mostly it's trying to fit it in amongst everything else. I'll try and at least commit *something* this week. | ||
| moritz_ | *only | ||
| masak | moritz_: that works fine for some of the changes I have in mind. | ||
| moritz_: as the book nears 100% ready, though, the rendered aspects of it become increasingly important. | |||
| moritz_ | masak: I consider rendering aspects mostly the job of our publisher | 19:21 | |
| at least the finer points | |||
| masak | be that as it may -- I looked over the book last weekend and found I had tens of minor things I could improve about the book pdf. | 19:22 | |
| it's mostly a matter of finding the time to do it. | |||
| colomon | Util: those seem to be mostly "bugs" -- I was thinking more of sections that still need to be written... | 19:23 | |
| moritz_ | anyway, it's good to get some positive feedback | ||
| colomon: we need a section on statements | |||
| colomon | moritz_: for what it's worth, I've been using the book while working on the ABC project. :) | 19:24 | |
| masak | for what it's worth, I still consider the book at most half-way done, in terms of work. | ||
| colomon | it's been helpful. | ||
|
19:25
ash_ left
|
|||
| colomon | hmmm.... should we set some sort of goal for the next Rakudo release? I mean, more than "fix whatever random bits we can"? | 19:25 | |
| moritz_ | masak: I agree :( | ||
| colomon: you mean book goals for the rakudo release? | |||
| colomon | I meant rakudo goals -- wanted to get the thought in before my cold-adled brain wandered off -- but book goals would be good too, I guess. | 19:26 | |
| masak | moritz_: from the bright side, I see a lot of good work being done on it that I didn't expect. | 19:27 | |
| moritz_: I am impressed by what you've contributed so far, and I'll try my best to make your efforts less lonely :) | |||
| moritz_ | :-) | ||
| colomon: I'm currently in a phase of increasing meatspace stress, so any goals we set would be highly speculative from my side - I don't know if there's a benefit in definining them | 19:28 | ||
| masak | I do think there's a benefit in setting goals, even if we don't meet all of them. | 19:29 | |
| colomon | moritz_: it just feels a bit to me like we were much more focused when we were working for the first R* release. Understandable to rest a bit after that, but it feels to me like we need something to carry forward. | ||
| jnthn | From my side, I think that the sooner the new meta-model stuff lands, the better. | 19:30 | |
| colomon | moritz_: of course, you're doing pretty well moving forward yourself. it's the rest of us (especially me) I'm worried about. :) | ||
| moritz_ | colomon: I've pretty much always worked on random stuff just within my reach | ||
| jnthn | Thus, I'm focusing the Perl 6 part of my attention span pretty much fully on that. | ||
| moritz_ | colomon: but if you want some goals, we should find some | 19:31 | |
| jnthn | That *is* going to mean I'm less visibly active in the stuff that lives in the Rakudo repo. | ||
| For now, anyway. :-) | |||
| sorear | Unexpectedly, niecza/mm seems to be much faster | ||
| colomon | jnthn: sure, you and sorear are both being amazingly productive elsewhere. :) | ||
| masak | hm. thinking out loud: it'd be nice to have a file somewhere marking for each chapter the perceived "done-ness" of that chapter: how well it covers its topic, how well-reviewed it is, how well-polished it is. | ||
| then we'd have a central place to go to for the "status" of the book. | |||
| sorear | STD.pm6 is back to being 90+% of runtime | ||
|
19:32
ash_ joined
|
|||
| jnthn | colomon: Aye, but the aim is that this all joins up with Rakudo in the not too distant future. :-) | 19:32 | |
| Well, the bits I'm doing, anyways. :-) | |||
| masak | also, it'd have the psychological benefit of putting a concrete number on something quite nebulous. | ||
| colomon | masak: +1 | ||
| jnthn | sorear: Faster is good. \\o/ | ||
| moritz_ | masak: +2 | ||
| jnthn | masak: +1 | 19:33 | |
| masak | optionally, people can sign up for specific tasks of making the book better in small ways. | ||
| sorear | niecza/mm is now merged and passing all 520 remaining tests | ||
| masak | think Advent Calendar success. | ||
| ok, I volunteer to commit a skeleton for such a file. | 19:34 | ||
| ash_ | btw, the framework for try.rakudo.org tutorials is setup and i am sorta hacking on it when i have time, but anyone that wants to help is welcome to | ||
| masak | ash_++ | ||
| ash_: try.rakudo.org is very long-term important. you're a hero. | 19:35 | ||
| ash_ | i'll work on them some when i have time, but currently school has me swamped, and i need to get my GSoC parrot NCI changes merged into trunk eventually (i just need to write tests for my code) | ||
| Util | ash_: I mentioned try.rakudo.org in my talk. Monger: "that only works for one-liners, right?" Util types multi-statement example into actual website; "Nope!". Crowd: Ooos and Ahhs. ash_++ | 19:38 | |
| ash_ | lol, not all of those are guaranteed to work, since it is the real repl | 19:39 | |
| masak | that implication arrow did not make sense to me. | 19:41 | |
| but nevermind. | |||
| Util | moritz_: .pdf snapshot to be updated on github.../downloads soon? | ||
| moritz_ | Util: I can do that tonight, if there's demand | 19:42 | |
| Util | Just noticed that it is >1 month old. | ||
| moritz_ | will do | 19:51 | |
| anything else we need to discuss? | |||
| jnthn doesn't have anything | |||
| pmichaud | back again | 19:52 | |
| masak | the enums patch went in, but in a significantly less effective form than I originally wrote it. | 19:53 | |
| maybe #perl6 is a better forum for that, though. | |||
| I recently figured out why I felt the need to instantiate the anon class in my original patch. removing that made fewer things work in the current one. | |||
| jnthn | o/ pmichaud | 20:00 | |
| pmichaud | yes, 2h00 | 20:06 | |
| er, 20h00 | |||
| jnthn | It's about that. | 20:07 | |
| Is today still good? | |||
| pmichaud | I either need new keyboards or new fingers or both :-( | ||
| diakopter | new sprixel -3.0 gained ("gained" over perlesque, at least) nested evaluation environments, which paves the way for nested compilation units, BEGIN, use, etc. | ||
| pmichaud | sure, today still works out well | ||
| we can discuss here, or in #phasers, or wherever you wish :) | |||
| oh, we're in #phasers | |||
| maybe today isn't so good :-P | 20:08 | ||
| sorear | pmichaud: How did your chat with obra, Alias, etc go? | ||
| pmichaud | sorear: I mentioned earlier that I'm still working on that. | ||
| sorear | ah | ||
| pmichaud | I'll report again next week. | ||
| jnthn | pmichaud: #phasers probably avoids too much noise in #perl6 | ||
| pmichaud: And means it's logged for the curious. :-) | 20:09 | ||
| pmichaud | (I got seriously sidetracked on non-perl6 tasks this last week. On the plus side, I now have some steady income again :) | ||
| #phasers is my preference also | |||
| jnthn | OK, great. | ||
| sorear | things I'd generally like to persue in niecza in the coming weeks: | ||
| colomon | steady income++ | ||
| jnthn | pmichaud: That's good to have taken care of. :-) | 20:10 | |
| sorear | * detangle CgOp from the CLR and try to sane-ify the back back end | ||
| * gradual typing stuff (vtables etc) | |||
| * roles | |||
| * multi methods | |||
| * bootstrapping | |||
| jnthn | pmichaud: heh, sorear is kinda listing my roadmap... :-) | ||
| <grin> | |||
| pmichaud: Maybe best is if I give a quick status update on where I've got so far? | 20:11 | ||
| Then there's some context for what needs to come along next. | |||
| pmichaud | jnthn: sounds like a good starting point | ||
| jnthn | OK | 20:12 | |
| I started out by prototyping a bunch of meta-model stuff in .Net, and wrote enough runtime support around it to actually be able to run some simple NQP programs. | |||
| It's turing complete, at least. ;-) | |||
| Did a bunch of profiling, re-working (not just performance, but design issues), etc. | |||
| A couple of weeks ago I dug into the Parrot port. | 20:13 | ||
| It really has been a fairly direct port in that you can look at the two side by side and see they're just about the same thing, aside from what they build on top of and C vs C#. | |||
| In terms of the meta-model primitives, I have the two just about neck and neck now. | 20:14 | ||
| In the model there's essentially three things. | |||
| 1) Representations. These all implement an API. They're responsible for how we store an object in memory. They'll also play an important part in packed arrays, compact structs, etc. | 20:15 | ||
| The API in the Parrot implementation is mostly the same as in the .Net one apart from the Parrot one has to co-operate with the GC whereas the C# one just gets it thanks to there being no unmanaged parts (yet). | 20:16 | ||
| 2) Meta-objects that implement the HOW API (or some subset of it). This has the declarative and introspective bits. | |||
| There is one meta-object that is implemented at "low level", which is KnowHOW (HOW being a convention postfix for things you'd get back from a .HOW). | 20:17 | ||
| It just provides a pure prototype-ish thingy. That is, no inheritance - it's completely flat. You could almost see it as a concrete role too I guess. The main thing is that it's easy to implement. | |||
| And to bootstrap. | |||
| 3) Shared Tables. Every object starts with an STable pointer. The rest of the object is under the control of the REPR. We have on STable per (HOW, REPR) pair. | 20:18 | ||
| The STable is also where the v-table will be kept cached to do gradually typed dispatches. | 20:19 | ||
| That's pretty much *it*. Everything else - classes, roles, meta-attributes, etc - can be built on top of this. | |||
| I'm pretty much at the "build that stuff" stage now. | |||
| sorear | Of importance is to note that HOWs are just Perl 6 objects. | 20:20 | |
| pmichaud | this all sounds like exactly where we wanted to be at this stage | ||
| jnthn | sorear: Correct | ||
| sorear | In particular, every method call involves a call to .^find-method | ||
| jnthn | The only thing in this whole design that are not first-class objects are the STable and the representation implementations. | 20:21 | |
| Everything else is just an object. | |||
| diakopter listens keenly | |||
| jnthn | sorear: Apart from where we cheat thanks to gradual typing optimizations, but yes. | ||
| sorear | I'm taking niecza in a slight different direction; instantiatable classes are represented using a special type which extends into the C# domain and is about as primitive as Sub | ||
| ClassHOW will probably subclass this thing; RoleHOW will be entirely based on normal Perl6 primitives | 20:22 | ||
| jnthn | sorear: Does that allow for repr polymorphism, or is that something you're putting aside for the time being? | ||
| Oh, I think I mis-understood. | |||
| (What you just said about ClassHOW made me understand a bit more what you were thinking.) | 20:23 | ||
| pmichaud: That's pretty much the current state. Any questions before I give you the things I want input on? | 20:24 | ||
| sorear | jnthn: I think I'm allowing for repr polymorphism, but I won't really know for sure until #perl6 understands repr polymorphism better | ||
| I am thinking that as your work progresses we'll have a better understanding of what features "REPR polymorphism" requires | |||
| in particular, once the apps hacking starts | |||
| jnthn | sorear: fwiw, REPRs aren't really something I expect hardly anyone to write, unlike custom HOWs and stuff which I bet a lot of folks will write. | 20:25 | |
| pmichaud | jnthn: no questions so far | ||
| jnthn | oh gah, double negatives! | ||
| s/aren't/are/ | 20:26 | ||
| pmichaud: OK. | |||
| pmichaud: So one of my next steps is going to be to get an implementation of classes written. | |||
| e.g. ClassHOW | |||
| sorear | jnthn: I'd like to see how many people are writing fully custom HOWs | ||
| jnthn | I'd then switch nqp-rx to compile its class keyword stuff in terms of making calls to this. I currently have both old-model and new-model stuff in the actions.pm, and it chooses by the package declarator (so I didn't break classes when adding knowhow - it seemed a bit more gentle that way :-)). | 20:27 | |
| sorear | I expect most people will be writing roles here and composing them into anonymous ClassHOW subclasses | ||
| jnthn | sorear: Yes, that'll be the common case, I think. I guess until we give people an implementation where they can write fully custom HOWs, we won't really know. | 20:28 | |
| sorear | (Moose requires all meta objects to be subclasses of Class::MOP::Class and I don't see anyone complaining) | ||
| jnthn | pmichaud: At that point, I'll hit a migration issue. | 20:29 | |
| pmichaud: That is, there'll be some things that are inherited from that use P6object. But as you pointed out yesterday, there may be less of those than I first feared (e.g. hardly any). | |||
| Should the general approach to be to migrate such things into the nqp-rx repo? | 20:30 | ||
| pmichaud | p6object was merely intended to provide a perl6-compatible mop api | ||
| afaik, nothing in nqp-rx relies on the inner workings of p6object | |||
| if it does, we should replace/fix it | |||
| jnthn | Well, it's more reliance on Parrot's object model too. | ||
| nqp-rx today (not in my nom branch) doesn't ever make an add_method call. | 20:31 | ||
| pmichaud | oh, right. | ||
| jnthn | It relies on Parrot's Class PMC magically slurping things up marked :method. | ||
| pmichaud | I'm totally fine with switching nqp-rx to work in terms of add_method | ||
| instead of relying on the :method compile-time flag. | |||
| jnthn | OK, phew. :-) | 20:32 | |
| I'm not quite so sure about the stuff we have that's written in PIR, mind. | |||
| I mean, what gets more interesting is when I want to get the grammar package declarator switched over. | |||
| Does that have inheritance dependencies outside of the nqp-rx repo? | |||
| pmichaud | yes, that makes things temporarily slower, by converting what was compile-time to loadinit-time. But I'm expecting to make that up with serialization later anyway. | ||
| jnthn | Same. | 20:33 | |
| pmichaud | 'grammar' simply means that we inherit from Regex::Cursor, iirc. | ||
| jnthn | Which is in nqp-rx repo? | ||
| pmichaud | yes. | ||
| src/Regex/Cursor.pir | |||
| jnthn | And in PIR? | ||
| Right. | |||
| pmichaud | I'm okay with switching those to be written in nqp also. | ||
| jnthn | How would a first pass involving wrapping Q:PIR inside NQP method declarations sit with you? | 20:34 | |
| Then the NQP re-write can take place a bit at a time. | |||
| Rather than the whole file in one go. | |||
| pmichaud | I don't have a problem with that. | ||
| jnthn | OK. | ||
| I'm tempted to do that and have a compiler write the boilerplate for me. ;-) | 20:35 | ||
| (rather than write all the add_method calls out in a PIR loadinit...) | |||
| pmichaud | I'm thinking of something slightly different, though | ||
| (still forming in my head -- give me a couple of minutes to chase it down) | 20:36 | ||
| jnthn | OK :-) | ||
| pmichaud | actually, I need a 5-min break to take care of house-things... bbi5 | ||
| then I have a counter-suggestion or two | |||
| jnthn | I'll be right here. :-) | 20:37 | |
| sorear | jnthn: How will non-instantiable types work? | ||
| jnthn: after role Foo { }, what is Foo? is it defined? does it have a distinct WHAT and HOW? | |||
| jnthn | sorear: To make sure we're talking about the same thing, what's your definition of "non-instantiable"? | ||
| Oh, roles... | |||
| Foo is undefined, since it's a type object. | 20:38 | ||
| I think the trick with roles is that whenever you call a method on one, the method dispatcher puns a class and calls it on the pun. | |||
| (And caches the pun) | |||
| sorear | There will never be a defined object whose .WHAT is a role | ||
| or a subtype | |||
| jnthn | Heh...yes. :-) | 20:39 | |
| sorear | that's what I mean by non-instantiatable | ||
| jnthn | Anyway, for roles the non-instantiability will drop out of the fact that any call to .new (or any other method which may make an instance) will end up re-dispatched to a punned class. | ||
| pmichaud | back again | 20:40 | |
| jnthn | So RoleName.new never actually tries to end up instantiating the role, but instead is more like (class :: does RoleName { }).new | ||
| sorear | Do you have any plans for PackageHOW or ModuleHOW? | ||
| pmichaud | okay, what strikes me about this is how very similar it feels to the nqp-rx rewrite and migration I did last year | ||
| jnthn | But that anonymous class gets cached in the role meta-object. | ||
| pmichaud | my guess is that we're going to come up with a completely new nqp-rx that is (mostly) syntactically identical to the one we have now, but has completely reworked internals | 20:41 | |
| jnthn | sorear: I'm still working through exactly what those would look like. My first thought is "yes, but they don't have a great deal of methods", e.g. there's probably a .ver and a .auth... I'd be curious to know what you think on that. | 20:42 | |
| pmichaud: Yes, that's my feeling too. | |||
| pmichaud: Especially so if we're going to also end up with Perl 6 multi-dispatch in it. | |||
| pmichaud: And I think we can't *not* have the multi-method dispatch otherwise NQP won't even be able to properly stringify type objects... :/ | 20:43 | ||
| sorear | jnthn: S10 thinks that .ver and .auth are methods on the .WHO, not the .HOW | ||
| jnthn | (e.g. we need multi-dispatch that can distinguish on the :D/:U stuff) | ||
| sorear: Hm | |||
| sorear | which are essentially distinct objects in Niecza, not sure about rakudo | ||
| pmichaud | oh, we can certainly have the stringify method do its own internal "multi dispatch". | ||
| jnthn | pmichaud: True. | ||
| pmichaud | I mean, I do that already for handling autoviv in Rakudo. | 20:44 | |
| jnthn | pmichaud: And ACCEPTS | ||
| Yeah | |||
| pmichaud | So, that's not an absolutely necessity. | ||
| jnthn | It's a hack though. | ||
| pmichaud | *absolute | ||
|
20:44
ash_ left
|
|||
| pmichaud | you're correct that it's not as elegant | 20:44 | |
| jnthn | Yeah...I guess if I'm struggling on the multi-dispatch and want to push forwards I can take that route. | ||
| sorear | pmichaud: Why did adding rx to nqp require a complete rework? | ||
| pmichaud | sorear: there were a large number of reasons | 20:45 | |
| sorear: some technical, some other | |||
| jnthn | pmichaud: Thanks, that's actually a simple but very helpful point. "Why didn't I think of that?" :-) | ||
| pmichaud | we could even get p6object to do the same hack (and remove the subclassing role) if we felt it was important. | 20:46 | |
| p6object doesn't absolutely require that its protoobjects be subclassed -- that was just the initial guess at how it would work. | |||
| jnthn | *nod* | ||
| Yeah, but that approach is also what gives the undefinedness. | 20:47 | ||
| pmichaud | sorear: the main reason for rewriting nqp-rx from scratch was because pge needed protoregexes, and it was far easier to rewrite that from scratch than to try to fix the existing pge (more) | ||
| also I wanted to rewrite pge to make use of PAST | |||
| instead of generating code directly | 20:48 | ||
| moritz_ | (but don't forge that nqp-rx still misses some PGE features) | ||
| pmichaud | moritz_: I haven't forgotten that -- but for the most part those features haven't bubbled up to critical need. <Otherclass::regex> is an important exception, I grant. I did figure out a way to resolve that, I think. | 20:49 | |
| jnthn | pmichaud: Given that I basically agree that we're getting - in a less radical way than nqp-rx - a new nqp, what's the practical upshot? | 20:50 | |
| moritz_ | pmichaud: not critical, but partially very annoying for users | ||
| pmichaud | jnthn: I'm thinking I need to brainstorm a few hours about the larger implications of that. | ||
| in the same way I had to brainstorm to come up with the original nqp-rx plan | 20:51 | ||
| jnthn | pmichaud: OK. Can I push a coulple more things onto your brainstorming stack? :-) | ||
| pmichaud | yes please | ||
| jnthn | One thing that needs to be figured into this is that nqp-nom now has dynops/dynpmcs. | ||
| Just needs a little thought on how they are pushed over to the Parrot world. | |||
| A bigger thing though...is the serialization. | 20:52 | ||
| As I wrote in my blog post, I can go two quite distinct ways on that. | |||
| pmichaud | I'm actually happy that we have dynops/dynpmcs. I'm thinking I can make the regex stuff much faster if I can have some custom dynops. | ||
| jnthn | Here's one really big worry that I've had since I wrote that post. | 20:53 | |
| pmichaud | I re-read the serialization stuff earlier | ||
| jnthn | Today our bootstrap for nqp works like this. | ||
| pmichaud waits for the worry | |||
| jnthn | We make PIR files. | ||
| And we then start bootstrapping by compiling those. | 20:54 | ||
| *If* I build the serialization stuff on top of Parrot's existing freeze/thaw, that means we end up freezing the stuff in the constants table. | |||
| That means that we're kinda forced to go all the way to PBC, not PIR. | |||
| Which means we have a big problem, because as soon as the Parrot folks break bytecoe compat (like, regularly) then the bootstrap is hosed. | 20:55 | ||
| *bytecode | |||
| pmichaud | agreed, that's guaranteed breakage | ||
| jnthn | IIUC, every new Parrot release is a new bytecode version today. | ||
| With the PIR, at the *very* worst we stand a chance of hand-patching it if something gets really, really messed up (but that's hard to imagine needing to do). | 20:56 | ||
| With a PBC, that's impossible. | |||
| (...says the guy who tried to binary patch PBCs to bet relocatable Windows installs...) | |||
| *get | |||
| sorear | jnthn: include a copy of the correct version of Parrot in the bootstrap? ;) | ||
| jnthn | ;-) | 20:57 | |
| sorear: That actually still doesn't help. (more) | |||
| The old Parrot would write old-version bytecode files. | |||
| sorear | yeah, because Parrot doesn't support cross-PBC-compiling | ||
| jnthn | Right. | ||
| pmichaud | my guess is that .pbc as a serialization format is a non-starter for us for quite a while. | ||
| sorear is happy that CLR bytecode files are a lot more stable | 20:58 | ||
| jnthn | s/bytecode files are/is/ ;) | ||
| pmichaud | unless you want to clean up Parrot's bytecode handling. | ||
| (and I'm guessing "not really") | |||
| jnthn | I think I'd stand a decent chance of integrating bounded serialization stuff. | 20:59 | |
| But having to implement bytecode version compatibility...well...ouch. | |||
| Not to mention that I probably have to get consensus rather than just commit. :-) | |||
| pmichaud | for the time being, I'm guessing that PIR remains our serialization format, unless/until NQP creates its own. | ||
| jnthn | And not break the deprecation policy. | ||
| What does PIR as a serialization format look like? | 21:00 | ||
| (more) | |||
| sorear | Bytecode is not covered under deprecation. | ||
| pmichaud | PIR as a serialization format looks like it does now :) | ||
| jnthn | One option is to just emit PIR that builds up the data structures. | ||
| pmichaud | i.e., instead of generating bytecode/constants, we generate PIR that creates the constants. | ||
| "emit PIR that builds up the data structures" === PIR as a serialization format :) | |||
| jnthn | That's...exactly what I was hoping to not have to do. :| | 21:01 | |
| pmichaud | I agree | ||
| sorear | jnthn: You'd prefer to create a custom, second language just for the purpose of constructing objects? | ||
| jnthn | How would some kinda "blob" stored in the PIR that gets shuffled off to a decoder work out? | ||
| pmichaud | which means the choices are to figure out how to work within parrot's existing .pbc (and figure out how to stabilize that), or come up with a different serialization format. | ||
| jnthn | sorear: Yes. | ||
| sorear: "langauge" :-) | 21:02 | ||
| sorear | We have a perfectly good decoder. It's called runops. | ||
| jnthn | More like binary format. | ||
| pmichaud | "blob stored in the PIR and shuffled off to a decoder" is still PIR as a serialization format. :) | ||
| it doesn't have to be PIR instructions that build the data structures | 21:03 | ||
| jnthn | Oh, OK | ||
| I was reading "PIR as a serialization format" as just that. | |||
| (e.g. PIR instructions that build 'em.) | |||
| pmichaud | that's one way | ||
| my point is more that I don't think we can rely on .pbc as a bootstrapping mechanism, as you pointed out | |||
| jnthn | OK | ||
| pmichaud | so we have to go to something that is guaranteed to be compatible across parrot versions | 21:04 | |
|
21:04
ash_ joined
|
|||
| jnthn | Which almost certainly precludes extending Parrot's freeze/thaw. | 21:04 | |
| pmichaud | and the only choices there are going to be PIR, or some other serialization structure that we borrow (json?) or define ourselves. | ||
| jnthn | OK | 21:05 | |
| pmichaud | since we're creating dynops, we can certainly come up with our own thaw/freeze opcode equivalents (more) | ||
| jnthn | I do wonder if I can come up with a common one. | ||
| pmichaud | since we have our own REPR, we can certainly build an internal method that does thaw/freeze the way we need | ||
| jnthn | Oh, yes, I was expecting this would fit in very closely with the REPR API bits. | ||
| pmichaud | I'd even be okay if we compiled the resulting constants down to C code that gets compiled, similar to the way pbc_to_exe works now. | 21:06 | |
| sorear | maybe something link BSON or ASN.1 BER | ||
| like | |||
| jnthn | Er, by common one I mean, something that looks kinda the same - or even identical - accross our multiple backends... | ||
| pmichaud | yes, sure | ||
| jnthn | sorear: Will look those up, thanks. | ||
| pmichaud | I'd _really_ like that. | ||
| sorear has dabbled with a proper compact JSON at several points | 21:07 | ||
| jnthn | pmichaud: "that"? | ||
| pmichaud | "something that looks kinda the same..." | ||
| jnthn | OK :-) | ||
| Me too ;-) | |||
| pmichaud | in some sense I'm not a fan of creating yet another serialization format | ||
| jnthn | Not least because it means I don't have to prototype it in C first... :-) | ||
| pmichaud | but at the same time, I'd like us to not be trapped here forever | 21:08 | |
| jnthn | True, but in a sense it's hardly one that we're going to advocate for use outside of Rakudo implementation. | ||
| pmichaud | jnthn: I'm not sure about that last part, though. | ||
| if other people start targeting nqp as a platform for building dynamic languages.... | |||
| jnthn | Well, OK, maybe I'm being a bit too narrow. | ||
| Right. | |||
| Let me try and say it better. | |||
| It's not something we'd seek to design so we could advocate it as a general purpose serialization format. :-) | 21:09 | ||
| pmichaud | but yes, this gets directly at the strategic sorts of questions I need to brainstorm about nqp-rx itself (more) | ||
| jnthn | Yes, I'm well aware that there's a larger context to all of this. | ||
| pmichaud | until now, nqp has defined itself as a syntactic front end for creating parrot code | ||
| the changes we're looking at tend to make nqp into its own virtual machine platform | 21:10 | ||
| jnthn | Yes, that seems to be the way things are heading. | ||
| pmichaud | I'm not at all opposed to that -- indeed, it's something I explicitly expected could happen when I started thinking about nqp-rx last year -- but I want to think about some of the larger implications now that we're getting to that point. | ||
| to bring this back down to more immediate terms (more) | 21:11 | ||
| jnthn | I think the fact that porting Rakudo implies porting the compiler toolchain = an interesting opportunity. :-) | ||
| pmichaud | I'm thinking we're on the same page that we're working towards a new self-hosting nqp that uses the new object model instead of p6object as a base | 21:12 | |
| and that we're also on the same page as far as porting more of the Parrot Compiler Toolkit into nqp | |||
| jnthn | *nod* | ||
| pmichaud | afaict, I don't have any "sacred cows" as far as trying to keep things tied to the existing p6object or past implementations | 21:13 | |
| i.e., I fully expect we completely replace p6object with the new stuff | |||
| I also am not terribly worried about trying to retain compatibility with parrot's existing object implementation | |||
| so, if we can no longer use the :method flags (or any other PIR flag, for that matter), I'm not going to lose any sleep over it. | 21:14 | ||
| jnthn | Me either, but I've been keeping reasonably quiet about that for now. | ||
| pmichaud | same goes for Parrot namespaces, btw | ||
| in fact, one of the first objects we really need to have available is a better namespace mechanism (you may have this already :-) | |||
| jnthn | I've not really done anything here yet. | ||
| I would say this | |||
| It's easier to prototype in 6model | 21:15 | ||
| :-) | |||
| pmichaud | I have no doubt about that | ||
| jnthn | In 6model I just didn't do namespaces anyway. | ||
| There's lexicals and that's it. | |||
| pmichaud | it wouldn't suprirse me much if the new nqp implementation that we don't use parrot namespaces at all. | ||
| jnthn | There's no global root namespace. | ||
| Hmm | |||
| I hadn't been bargining on that, but I'm willing to go with that if you're happy to help out on that part. | 21:16 | ||
| sorear | pmichaud: I just got done writing a new namespace implementation for niecza | ||
| jnthn | (e.g. I hadn't foreseen it as part of this set of changes, but rather a later thing) | ||
| pmichaud | well, where does Perl 6 need something like Parrot namespaces? | ||
| (I don't think it does.) | |||
| jnthn | I agree, I just have a tendancy to think in small, achievable leaps. :-) | 21:17 | |
| pmichaud | Parrot namespaces are one of those technical debts that we'll have to address at some point... this might be the point. | ||
| jnthn | If we want to choose this "next nqp" as the time we move away from Parrot namespaces, though, then I'm fine with that. | ||
| pmichaud | I'm also wondering if I should look at also getting a Hague grant to do some work assisting with the migration. | ||
| jnthn | +1 | ||
| Mention the namespace stuff in it. | 21:18 | ||
| pmichaud | (not as much as yours... but enough to help out with the rx and pct bits) | ||
| we might need to switch the grant manager to someone else (for both grants) | |||
| but I suspect that's doable. | |||
| jnthn | Hmm. :-) | ||
| pmichaud | okay -- to me it seems like we're both thinking of a common goal with few discrepancies.... do you agree? | 21:19 | |
| jnthn | Yes, I think we're very much on the same page, and I think this conversation has decided a few things already. | 21:20 | |
| I agree that it all raises some much wider questions that need more thought too. | |||
| For now, I've got plenty to do while you work out the bigger picture. :-) | 21:21 | ||
| pmichaud | are there any questions that you perceive as possible blockers for you? | ||
| in general my answer seems to be "do what you think is best" :-) | 21:22 | ||
| jnthn | Let me check... | ||
| The migrating stuff into nqp-rx repo is sorted out. We've muchly narrowed down how the serialization stuff should look. | |||
| pmichaud | I'm wondering if this deserves a new repo, or a forked repo. | 21:23 | |
| I'm fine with keeping it as a branch... but in some ways it feels very much like a new product. | |||
| jnthn | I don't have any immediate strong feelings either way on that. | ||
| I'm happy to go with whatever you feel is best. | |||
| I can easily buy the "new product" argument. | |||
| pmichaud | that'll be part of my thinking over the next day or so | ||
| so, to summarize: | 21:24 | ||
| * I think the paths your currently headed on are fine and compatible with my expectations | |||
| * I'm going to look at a larger strategic direction w.r.t. nqp itself | |||
| * sometime over the next week I'll publish a nqp roadmap that outlines where I think things should go overall | |||
| * I'll see about applying for a Hague grant so that I can easily assist with some of the migration effort -- especially on the PCT and regex parts | 21:25 | ||
| sound good? | 21:26 | ||
| jnthn | Yes, this sounds like a good direction. | 21:27 | |
| And I'm unblocked in terms of having plenty of things to work on from here on in. | |||
| We can take repo moves and other bits once we've got the roadmap. | 21:28 | ||
| (And I *really* like the idea of having said roadmap too.) | |||
| pmichaud | ooc, what difficulties do you envision with making nqp target both parrot and .Net ? Or, perhaps better -- what level of difficulty do you see there? | ||
| yes, I think nqp needs a roadmap now. | |||
| jnthn | There's some significant design work on some aspects of the runtime. For example, there's *no* exception model in any of the stuff I did so far. | 21:30 | |
| (for .Net, that is) | |||
| pmichaud | yes, exceptions will be large in both cases. | ||
| jnthn | Well, yeah, it's not like we have what we really need on Parrot either, I guess. | 21:31 | |
| pmichaud | correct :) | ||
| for the parts that we do have -- do you see having dual (or multiple) backends as being very hard to manage long-term or something we'll be able to handle? | |||
| especially the object-model stuff | 21:32 | ||
| jnthn | The current situation of the object model is a double edged sword. | ||
| The implementation looks very alike on Parrot and on .Net, and will look very similar on mberends++ JVM port too. | |||
| pmichaud | that's what I wanted to hear. :) | 21:33 | |
| jnthn | The *cost* is that I've basically created an object meta-model that plugs into Parrot around the edges but largely denies its existence. | ||
| Or at least | |||
| That could cost us. | |||
| pmichaud | denies Parrot's existence? | ||
| or denies the existence of Parrot's object model? | 21:34 | ||
| or ...? | |||
| jnthn | The latter. | ||
| :-) | |||
| pmichaud | perfect. | ||
| jnthn | It is | ||
| pmichaud | that's also what I hope/expect. | ||
| this is exciting. jnthn++ | |||
| jnthn | Aye, but I worry if the mis-match will cost us on performance at some point. | ||
| pmichaud | my expectation continues to be that Parrot will evolve towards the new model rather than try to preserve the old. | 21:35 | |
| jnthn | For example | ||
| masak | jnthn++ | ||
| jnthn | We have a PMC (RakudoObject - we can rename it NQPObject or whatever later...) that is just a "wrapper" for all objects. | ||
| er, all Perl 6 objects | 21:36 | ||
| Basically we take the PMC_data pointer and hang whatever off it. | |||
| pmichaud | I mean, we _know_ that Parrot needs some substantial improvements to its object handling -- it'll be nice if we offer them a working alternative. | ||
| jnthn | The first pointer in whatever that is will be the s-table pointer, through which we find the REPR | ||
| But since the REPR is what knows about object layout, it's for the REPR to do gc marking. | |||
| Basically the PMCs end up as a level of indirection. | 21:37 | ||
| pmichaud | I'd prefer NQPObject over RakudoObject.... but I'd prefer P6Object over that. Or maybe something even more generic than the "P6". | ||
| jnthn | I really didn't want to call it P6object. (more) | ||
| It creates naming confusion with the current one, though I know that's less of an issue over time. | |||
| pmichaud | well, there's currently not a P6Object class :) | 21:38 | |
| jnthn | But secondly the P6foo style names have so far tended to be associated with representations. | ||
| (e.g. P6opaque) | |||
| pmichaud | but yes, I understand the P6 objection. | ||
| jnthn | It's kind of a prefix convention, like HOW is a postfix one. :-) | ||
| pmichaud | what P6 things do we have besides P6opaque, ooc? | ||
| jnthn | :-) | 21:39 | |
| So basically I'm trying (we'll see if I manage) to tie up reprs and native type handling. | |||
| So we have P6int and P6num | |||
| Which in their boxed form aren't capable of having attributes but just storing a native integer or native floating point value. | 21:40 | ||
| pmichaud | feels like thought maybe shouldn't be P6 prefixed. | ||
| *those | |||
| i.e., maybe there's a better/different prefix for that | |||
| jnthn | But a chunk of the repr API I didn't define yet (this is hand-wavey envisiony stuff) would let a REPR say "oh, if you're in a context where you can just inline this bit of storage, do so" | ||
| pmichaud | anyway, I'd strongly prefer NQPObject over RakudoObject | 21:41 | |
| jnthn | Thus how we get natively typed attributes, compact structs and (with another repr) compact arrays. | ||
| OK, I can do that. | |||
| pmichaud | if we can come up with something slightly more generic than that, I'd likely go with it. | ||
| jnthn | Also +1 on a better prefix/postfix for reprs | 21:42 | |
| pmichaud | But I do tend to think of NQP as much more than just Rakudo | ||
| jnthn | OpaqueREPR works for me. | ||
| Yes, RakudoObject was not a great name. | |||
| It was also copied right from the .Net prototype. :-) | |||
| pmichaud | OpaqueREPR would be okay also. | ||
| jnthn | I mean for the REPR, not for the container PMC. | ||
| pmichaud | NQPMC :-P | ||
| jnthn | ;-) | 21:43 | |
| pmichaud | okay, I'm going to take a break for a while | ||
| jnthn | OK. I think it's time for me to grab a beer too. :-) | ||
| pmichaud | I'm really happy to see the way things are headed | ||
| jnthn | Thanks for this, it's been a *very* helpful meeting. :-) | ||
| pmichaud | sure thing | ||
| same here | |||
| afk for a while | 21:44 | ||
| jnthn goes to say hi to his chladnicka | |||
| diakopter | hopefully it's running | 21:58 | |
| sorear afk(8h) | 22:00 | ||
| jnthn | I wish it'd stop running, it knackers me out chasing after it to get a beer out... | 22:01 | |
| masak was about to Google Translate 'chladnicka', when he realized what it was, and the pun, at the same time | 22:25 | ||
| d'oh | |||
| jnthn | "cold thingummy" | 22:27 | |
| masak | aye. | ||
| холод | 22:28 | ||
| jnthn | .oO( oh heh, I wonder if лед comes from the same root... ) |
22:30 | |
| masak | not entirely inconceivable. | 22:31 | |
| холод and 'cold' sound kinda related, too. | 22:32 | ||
| anyway, this is too off-topic. would work on #perl6, though :P | |||
| jnthn | All channels go through off-topic phases... | ||
| masak | :) | 22:34 | |
| unless they're about everything. | |||
|
23:24
ash_ left
23:33
masak left
|
|||