|
Parrot 3.0.0 Released | parrot.org | Log: irclog.perlgeek.de/parrot/today | Goals: Fix ipv6-related failures | Test imcc_interfaces and annotations-tree branches Set by moderator on 31 January 2011. |
|||
| whiteknight | maybe also an assembler | 00:01 | |
| we need a low-level language that compiles directly to pbc | |||
| if that's winxed, we can use that | |||
| NotFound_b | whiteknight: I think that will be good to have one bytecode generating backend... if all tools use it. | ||
| cotto_work | what pasm thought it was | ||
| whiteknight | right, minus the shittiness of PASM and PIR | 00:02 | |
| If NQP compiles right down to PBC, that's fine. If Winxed, we can use that | |||
| if something else, let's start designing it | |||
| NotFound_b | cotto_work: pasm isn't enough. If you generate PASM you must update to generator to any change in calling conventions, for example. | ||
| chromatic | Which NQP? | ||
| bacek_at_work | whiteknight, it's called POST | 00:03 | |
| whiteknight | right, but Winxed can't really use POST (yet) | ||
| maybe stage-1 Winxed can | |||
| NotFound_b | whiteknight: maybe, but there isn't any proof of that yet. | ||
| whiteknight | right | ||
| cotto_work | NotFound_b: I'm not suggesting we use PASM, but that we're implementing what PASM was intended to be. | ||
| whiteknight | chromatic: any NQP | 00:04 | |
| chromatic | If we're forking an NQP to live in the Parrot repo, we should change its name. | ||
| whiteknight | chromatic: if we merge many features from new NQP down into Parrot core, the interoperability layer between NQP and Parrot will be much thinner than on other languages | ||
| er, other VMs | |||
| What I don't like about NQP is the pervasive use of lexical variables and the requisite bookkeeping for them | 00:05 | ||
| I would prefer a Parrot system language not do anything like that unless asked | |||
| chromatic | I hope the interop layer will be thinner, but in the absence of evidence.... | ||
| Tene | whiteknight: you'd prefer a parrot system langauge to not have lexical variables? o.O | ||
| whiteknight | Tene: can have lexicals, but not insert them everywhere. NQP pays a performance penalty for using .lex and friends when not needed | 00:06 | |
| PIR has lexicals, but you have to use them explicitly | |||
| bacek_at_work | whiteknight, it's all about optimizations (of generated code) | 00:07 | |
| cotto_work | whiteknight: is your problem with lexicals themselves or with the performance and code bloat penalties? | ||
| bacek_at_work | And it was one of my reasons to push tree-optimization forward. | 00:08 | |
| whiteknight | cotto_work: the code bloat penalties. not the feature itself. Parrot's lowest-level system language shouldn't have magic | ||
| bacek_at_work | because most of this bloat can be optimized-out | ||
| whiteknight | I would rather not generate it in the first place, but that's sort of a moot point | 00:09 | |
| chromatic | What's your thinking here, cotto_work? | 00:10 | |
| cotto_work | chromatic: which point? lexicals? | 00:11 | |
| chromatic | PCT | ||
| cotto_work | I need to think about it before I can give a good answer. | 00:12 | |
|
00:14
plobsing joined
00:18
kid51 joined
|
|||
| whiteknight | blarg. so much to think about | 00:22 | |
| bacek_at_work | yes. | ||
| cotto_work | indeed | ||
| bacek_at_work | M0, M1, MOP, GC | 00:23 | |
| it's what must be in core. | |||
| cotto_work | what lives where, who cares, who needs to, who's responsible | ||
| bacek_at_work | "some tool to generate M1" - should be in core. | ||
| "some tool to generate input for previous one" - very-very questionable. | 00:24 | ||
| "Bundling all required tools to develop with parrot" - definitely yes. | |||
| Look from "end user" point of view. | |||
| cotto_work | I guess PCT depends on whether we feel like we can define and stick with a stable interface between layers. | ||
| bacek_at_work | Who cares who developed PCT? | 00:25 | |
| chromatic | The people who have to support it. | ||
| bacek_at_work | If after downloading tarball I (as HLL dev) will have all tools to develop my HLL | ||
| chromatic, I implemented support for :multi and vtable in nqp-rx. | 00:26 | ||
| NotFound_b | "some tool to generate M1" -> A M1 assembler? | ||
| bacek_at_work | I developed nqp-setting (mostly) | ||
| I don't see any problems with supporting PCT/nqp/whatever as parrot developer. | |||
| NotFound_b, no. "M1 assembler" is "some tool to generate input for previous one" | 00:27 | ||
| chromatic | I think you might have had more trouble supporting :multi and :vtable on JVM, CLR, Lua, GHC, v8, etc. | ||
| whiteknight | right, that's the problem. New NQP isn't Parrot-only. Those kinds of things are going to be extensions at least | 00:29 | |
| or alternate grammars, which is fun to think about, but ultimately not great for us | |||
|
00:30
Kapace joined
|
|||
| bacek_at_work | chromatic, I'm not going to. | 00:30 | |
| chromatic | I have a problem with that. | ||
| bacek_at_work | Sigh... | 00:31 | |
| what is the problem? | |||
| It's up for "nqp-to-vm-compatibility-layer". | 00:32 | ||
| For parrot this layer will be thin (at least for :multi and :vtable) | |||
| For JVM/CLR - I don't care at all. | |||
| chromatic | All of a sudden, adding new features to new NQP to run better on Parrot means you have to consider how to add those features to other VMs which aren't Parrot. | ||
| bacek_at_work | No | ||
| Not at all. | |||
| chromatic | If I were a maintainer of this new NQP and I cared about multiple backends, I'd reject patches which didn't. | 00:34 | |
| cotto_work | I'm seeing two classes of features; ones which are supported across all backends and ones which are VM-specific. | ||
| Tene | It's a shame we can't ask the actual maintainer of this new NQP to see how he feels about that. | 00:35 | |
| bacek_at_work | chromatic, irclog.perlgeek.de/parrot/2011-01-31#i_3239879 | ||
| Tene | 16:22 <@Tene> If support for other backends interfered with good support with Parrot, would that be considered a failure of NQP's design, or at least not meeting NQP's goals? | ||
| 16:23 <@pmichaud> not meeting nqp's goals, definitely. | |||
| bacek_at_work | chromatic, pmichaud said totally opposite. | ||
| irclog.perlgeek.de/parrot/2011-01-31#i_3239896 | 00:36 | ||
| chromatic | I'm sure pmichaud doesn't want to sprinkle Parrot-specific code throughout Rakudo. | ||
| NotFound_b | Currenty, there is some way of generating POST that can use all parrot features other than creating a lot of pir nodes? If not, targeting POST instead of PIR is just complicating things. | ||
| bacek_at_work | "switching grammar ... with the VM specific features" | ||
| chromatic, who is talking about rakudo? | |||
| chromatic | Presumably, the people maintaining the new NQP want to use it to produce Rakudo. | 00:37 | |
| bacek_at_work | afk # meeting | ||
| pmichaud | I wouldn't expect to have to support :multi and :vtable on JVM, CLR, etc. I've already said as much. | 00:38 | |
| cotto_work | I see the VM-specific features being intended only for use on those VMs. There's no reason the other backends need to know or care. | ||
| pmichaud | Those would be available behind a "use Parrot;" pragma or the like. | ||
| Just because something is available on one VM doesn't mean they have to be available on all. | 00:39 | ||
| chromatic | But they won't get used in languages intended to be portable. | ||
| pmichaud | for someone who is developing Parrot tools, that's presumably not an issue. | ||
| cotto_work | chromatic: exactly | ||
| pmichaud | And they will get used in languages intended to be portable, including Rakudo. In that case they also have to be "unlocked" by a suitable Perl 6 pragma. | ||
| Perl 6 absolutely wants to be able to expose low-level parts of the underlying environment as well. NQP and Rakudo have to be able to support that. | 00:40 | ||
| kid51 | pmichaud: Hope to get back to you later this evening re roadmaps. | ||
| In the meantime ... | 00:41 | ||
| pmichaud | it's not about making some watered-down language that runs exactly the same everywhere. | ||
| Tene | 16:20 <@Tene> pmichaud: is it currently a goal of yours that nqp will be able to provide Parrot with what it needs, be able to expose parrot-specific features well, etc? | ||
|
00:41
kid51 is now known as kid51_at_dinner
|
|||
| Tene | 16:20 <@pmichaud> I know that Rakudo will. | 00:41 | |
| You already said as much, more than once. | |||
| pmichaud | yes, thanks for noticing. | ||
| Tene | erm, I missed a line. | ||
| pmichaud | (and for saving me the trouble of pasting what I already wrote :) | ||
| chromatic | To use continuations in Rakudo with new NQP then you have the equivalent of an #ifdef for each different platform semantic? | 00:42 | |
| cotto_work | Given that that's the intent, it seems to make sense for the platform-agnostic part of PCT to live as part of nqp and be bundled with Parrot and for Parrot to include its own extensions in parrot.git or a parrot-owned submodule. | 00:43 | |
| chromatic | In other words, the new NQP exposes as much of Parrot semantics as possible directly when running on Parrot and emulates Parrot semantics when running on other backends? | 00:45 | |
| pmichaud | if an application needs those Parrot semantics, then yes. | ||
| even in the current world view, I would expect that things like pir:: and Q:PIR in Rakudo would need to be exposed by a "use Parrot;", that would need emulation if a Perl 6 program expects to run on a backend other than Parrot. | 00:46 | ||
| We just haven't implemented the "use Parrot;" requirement yet. | |||
| cotto_work | I'd expect "use Parrot;" to fail on a backend that didn't support it. | 00:47 | |
| chromatic | Wow. | ||
| NotFound_b | Thing like that are expected to be working when not using imcc? | 00:48 | |
| pmichaud | well, I really hope Q:PIR goes away entirely. | ||
| Tene | chromatic: "to use continuatiosn" -- were you asking about "Using a continuation from Perl 6 as a user" or "Implementing continuation support in Rakudo's source"? | ||
| pmichaud | That was definitely a stop-gap measure. The pir:: functional interface is far easier to implement. | ||
| chromatic | The latter, Tene. | ||
| pmichaud | s/implement/emulate/ | ||
| and it doesn't have to be pir:: -- it can just as easily be parrotop:: or some other more suitable name that exposes parrot opcode semantics | 00:49 | ||
| Tene | chromatic: In that case, explain "Wow"? | ||
| chromatic | "Wow, porting Parrot to other VMs is a lot of work." | 00:50 | |
| pmichaud | I don't expect it to be common. I just expect it to be possible. | ||
| It's like having libraries that give access to Windows-specific or Linux-specific features. | |||
| cotto_work | pmichaud: exactly | ||
| Tene | chromatic: It's never been the intent that every possible NQP program can run equivalently on every possible VM. That's part of the objection to "platform agnostic" that was discussed earlier. | 00:51 | |
| pmichaud | nor is it the intent for every Perl 6 program to run equivalently on every possible VM, I don't think. | ||
| that's where individual implementations have some room outside of the Perl 6 spec, I think. | 00:52 | ||
| cotto_work decommutes | 00:53 | ||
| chromatic | I hope it works out. | 00:54 | |
| pmichaud | "perl 6 is created by *terrifyingly* hopeless dreamers who /are going to succeed/" -- sorear++ on #perl6 :-) | 00:56 | |
| PerlJam wonders what that means wrt chromatic's position on this subject | |||
| chromatic | I'm not implementing it, so I decline to give any other opinion on the subject. | ||
| PerlJam | fair enough | 00:57 | |
| pmichaud | kid51_at_dinner: no rush on any responses on the roadmaps, at least not from my perspective. But any comments you have are definitely welcome :) | 01:03 | |
| Tene | Ahh, I missed this: | 01:04 | |
| "<chromatic> ... and emulates PArrot semantics when running on other backends?" -- "<@pmichaud> if an application needs those Parrot semantics, then yes." | 01:05 | ||
| pmichaud | I should have qualified that to "Parrot-specific" semantics, I guess. NQP of course has semantics that it seeks to provide regardless of VM backend (and regardless of whether each VM supports them natively or not). | 01:07 | |
| Regex and grammar support being an obvious example. | 01:08 | ||
| Tene | That makes a lot more sense, yes. | ||
| sorear | bacek_at_work: To what extent do you want all HLLs to generate POST? | ||
| Tene | I would be very surprised if "use Parrot;" did anything but fail on other VMs. | ||
| pmichaud | I suspect that if a VM doesn't have certain Parrot-specific semantics that's because it's not seen as being particularly important to its customer base. | ||
| and I suspect that most portable HLLs are in the business of exposing every platform-specific capability across all of their platforms either. | 01:09 | ||
| (except through libraries or well-defined compatibility APIs) | |||
| s/are/aren't/ | 01:10 | ||
| chromatic | Yes, but you're talking about fundamental Perl 6 language features such as method dispatch, gradual typing, laziness, operator composition, context, variadic return, named parameters, multiple dispatch, junctions, coroutines, grammars, lexical variables, temporary variables, closures, higher-order functions, first-class primitives as objects, open classes, namespaces, and autopromotion. | 01:11 | |
| dalek | nxed: r764 | NotFound++ | trunk/winxedst1.winxed: replace some usages of Emiter say with emitbinop |
01:12 | |
| pmichaud | I am? | 01:14 | |
| chromatic | Aren't you, if you want to use them from NQP in Rakudo? | ||
| pmichaud | junctions won't be in NQP | ||
| that's already pretty much a Rakudo-specific implementation | |||
| many of those features are already handled by virtue of 6model | 01:15 | ||
| many of them (e.g., laziness) aren't particularly supported well by Parrot or nqp-rx as it is now, so I don't see that as an obvious point. I'm not expecting laziness to suddenly appear in NQP. | 01:16 | ||
| PerlJam | pmichaud: you must be reading my mind as I was just about to ask about that one. | ||
| pmichaud | I expect to be able to use NQP to implement them, but I don't expect NQP to natively provide them. | ||
| chromatic | It was one of my goals. | ||
| pmichaud | if Parrot offers laziness, then we'll undoubtedly find ways to optimize Rakudo to use them when they're present. | 01:17 | |
| but that doesn't mean we expect to require it of every backend. | |||
| I might be overstating this, but I think that for the majority of items in that list they've been implemented in Rakudo by working around core Parrot, not as a result of it. (Modulo PGE and PCT being considered part of "core Parrot".) | 01:19 | ||
| coroutines would be a notable exception in that list -- clearly Parrot has helped us a lot there for handling given/when | 01:20 | ||
| sorry, gather/take | |||
| chromatic | Hypothetically speaking, if Parrot included new NQP in a tarball as the One Good Default Option for building languages with PCT, we would tell users "To use Parrot specific features, use 'use parrot' in the appropriate scope"? | ||
| pmichaud | I think so, yes. | 01:21 | |
| or, it could be enabled by default, but if you expect to your language to run on another backend, you want to avoid those features or make sure that the parrot features are emulated for that other backend somewhere. | 01:22 | ||
| that's clearly a language designer choice | |||
|
01:26
cosimo left
|
|||
| chromatic | I see. | 01:26 | |
|
01:27
kid51_at_dinner left
|
|||
| pmichaud | afk, dinner | 01:28 | |
|
01:29
NotFound_b left
|
|||
| cotto | ~~ | 01:51 | |
| atrodo | I wish $dayjob wasn't so demanding today, looks like a lot of good chatting happened | 01:54 | |
| plobsing | yes, seems we had an exciting day | 01:55 | |
|
01:57
Kristaba left
|
|||
| cotto | good concusions too | 02:00 | |
| conclusions | |||
| I think we agree to agree, for the most part | 02:01 | ||
| chromatic | How so? | ||
| plobsing | I agree with the conclusions. What are they? | 02:03 | |
| cotto | i need to reread, but it seems like what pmichaud wants to do with nqp will let us have a good implementation of nqp on parrot that lets us use our low level stuff | 02:04 | |
| working out, so sorry for typos or disjointedness | |||
| typing on an exercise bike does not seem to be my laptop's intended use case | 02:06 | ||
| chromatic | Any thoughts on bundling versus forking NQP or creating something new? | 02:08 | |
| cotto | i'd really rather not fork just because of duplicated effort. i see us bundling the platform-specific nqp and including/maintaining a parrot-specific layer | 02:09 | |
| chromatic | Okay. | 02:10 | |
| cotto | (the "use Parrot;" pieces, not the layer that's at the same level as the3 cli code | ||
| how does that sound to you? | |||
| if we can assume a stable or at least reasonable interface for building the vm-specific bits, I think it'll be workable | 02:11 | ||
|
02:16
whiteknight left
02:30
bubaflub joined,
bubaflub left
02:43
bluescreen left
|
|||
| pmichaud | does anyone know how I can get my new journal added to Planet Parrot? pmthium.com/category/parrot/ | 03:57 | |
| sorear | pmichaud: there's a contact link | 04:03 | |
| it points at "webmaster at perl.org" | |||
| bacek_at_work | pmichaud, (side question) can I have $/ in nqp(-rx)? | 04:24 | |
| pmichaud | bacek_at_work: what for? | 04:25 | |
| bacek_at_work: you mean as an automatically declared lexical? | |||
| bacek_at_work | pmichaud, for ~~ | ||
| pmichaud | setting of $/ isn't really part of ~~ | ||
| it's a part of the .match method, or something like that. We haven't even nailed it down precisely in Rakudo or Perl 6 yet. | |||
| bacek_at_work | oh. | 04:26 | |
| aloha, S05? | |||
| aloha | bacek_at_work: No clue. Sorry. | ||
| bacek_at_work | stupid girl | ||
| pmichaud | but you can do: my $/ := 'something' ~~ /pattern/; and you get much the same effect. | ||
| bacek_at_work | pmichaud, I did it in YAML::Tiny | ||
| github.com/parrot/yaml-tiny/blob/4...ML/Tiny.pm | 04:27 | ||
| pmichaud | I don't see a $/ in YAML::Tiny | ||
| bacek_at_work | it's called $m | 04:28 | |
| line 240 for example | |||
| pmichaud | oh yes, that works too. | ||
| bacek_at_work | aloha, S05 is perlcabal.org/syn/S05.html | ||
| aloha | bacek_at_work: Okay. | ||
| pmichaud | anyway, it's perfectly legal to declare $/ as a lexical and then use it. | ||
| bacek_at_work | pmichaud, but I would like to see less noise :) | ||
| pmichaud | I'm not quite ready to make it "automatic" in nqp yet.... even $_ isn't automatic except in for loops. | ||
| bacek_at_work | ah. ok. | 04:29 | |
| pmichaud | and I'd really like to see the Perl 6 spec solidify on it first :) | ||
| bacek_at_work | The underlying match object is now available via the $/ variable, which is implicitly lexically scoped. All user access to the most recent match is through this variable, even when it doesn't look like it. The individual capture variables (such as $0, $1, etc.) are just elements of $/. | ||
| What's wrong with it??? | 04:30 | ||
| pmichaud | we don't yet know how .match gets access to $/ to set it | 04:31 | |
| more to the point, if I have something like | |||
| $x.subst( /(pattern)/, { $0 - 1 } ) | 04:32 | ||
| the $0 (which is really $/[0]) has to refer to the $/ inside of the subst, and not the $/ that is lexically part of the closure or its outer scope. | |||
| so $/ isn't purely a lexical -- it sometimes acts more like a dynamic variable | |||
|
04:48
adu joined
|
|||
| adu | hi | 04:48 | |
| dukeleto | adu: hola | 04:54 | |
| adu | how goes? | ||
| dukeleto | adu: pretty well. welcome to #parrot | 04:55 | |
| adu | thanks :) | ||
| dukeleto | adu: what brings you around these parts? | ||
| adu | well, I remember profiling for memory leaks about a year ago (for parrot), and haven't dropped by recently, so I thought I should | 04:56 | |
|
04:58
freeksh0w86 joined
|
|||
| dukeleto | adu: welcome back | 04:58 | |
| adu: what do you use to profile? | |||
| adu: perhaps you can try it on 3.0, our latest stable release | |||
| adu | "leaks" (macosx) | ||
| dukeleto | adu: we would love some stats such as "max ram usage during compile/test suite", can you track stuff like that easily? | 04:59 | |
| adu | hm, probably | ||
| mac has this thing called "verbose malloc" | 05:00 | ||
| dukeleto | adu: well, memory leak info would be fantastic | ||
| adu | well, I'm also writing a parser for Go | 05:01 | |
| and wondering what to do with it once the parser is done | |||
| I have this vision in my head of an editor written in Go with modules written in everything imaginable, compiled to PBC, or perhaps even communicating over CGI or something, but all usable from any language | 05:04 | ||
| bah, humbug, I'm just a dreamer | |||
| ignore me | |||
| such a system would have massive documentation requirements, pulling docstrings from python/perldoc, the inconsistencies might be too much | 05:06 | ||
| I think parrot is on the right track | 05:10 | ||
| dukeleto: are you into webapps? | 05:18 | ||
| sorear | adu: have you looked at Fly? | ||
| adu | what's fly? | 05:19 | |
| are you talking about www.criticalsecurity.net/index.php/...e__st__200 | 05:22 | ||
| can you give me a URL? | 05:23 | ||
| dukeleto | adu: i am very familiar with them, yes | 05:29 | |
| adu: Go on Parrot sounds fun, no one has tried that, as far as I know | |||
| adu | well, Go already requires some extra runtime, so it makes sense to use an existing runtime | 05:30 | |
| for example, type-switch | 05:31 | ||
| sorear | Fly was "how Parrot goes" | 05:32 | |
| but I can't find a link | |||
| googling for parrot go fly isn't exactly helping | |||
| and it's not on the tracwiki Languages page | |||
| adu | ah, you mean async calls? | 05:33 | |
| sorear | no | 05:34 | |
| adu | what do you mean? | ||
| sorear | "Fly" was the name of the Go on Parrot implementation | ||
|
05:37
diakopter joined
|
|||
| adu | i found this: groups.google.com/group/golang-nut...b255d07c98 | 05:38 | |
| diakopter | as in, "parrot go fly" | ||
| sorear: do you have an URL for "Fly"? | 05:40 | ||
| oh | |||
| adu | diakopter: apparently not | ||
| diakopter | nm I see in the log you didn't find it | ||
| cotto | seen jvd | 05:41 | |
| aloha | Sorry, I haven't seen jvd. | ||
| diakopter | irclog.perlgeek.de/parrotsketch/201...#i_2343784 | ||
| Fly reference ^^ | |||
|
05:42
allison left
|
|||
| cotto | does anyone care to clean up trac.parrot.org/parrot/wiki/MakeEveryPMCAnObject ? | 05:43 | |
| adu | i need to find this tcurtis guy | 05:44 | |
| cotto figures he should probably do his own job | 05:45 | ||
| adu | anyways, if someone is reading this conversation a year from now, I should probably post a link to my implementation | 05:48 | |
| hackage.haskell.org/package/language-go | |||
| but I'm pretty sure I'm not going to call the compiler Fly, probably "dsgo" | 05:51 | ||
|
05:56
rurban_ joined
|
|||
| dukeleto | adu: tcurtis was a gsoc student, who wrote the tree-optimization library, but seems to be busy with school these days | 05:56 | |
|
06:00
rurban left,
rurban_ is now known as rurban
|
|||
| adu | hopefully well cross paths someday | 06:00 | |
|
06:06
particle1 joined
06:09
particle left,
chromatic left
|
|||
| dalek | tracwiki: v5 | cotto++ | MakeEveryPMCAnObject | 06:29 | |
| tracwiki: most of these changes are rejected, but primarly because they'll be accomplished through M0 and 6model, not because they're bad ideas | |||
| tracwiki: trac.parrot.org/parrot/wiki/MakeEve...ction=diff | |||
| TT #1020 closed by cotto++: subclassing pmc from pir + lot more | 06:34 | ||
| TT #1020: trac.parrot.org/parrot/ticket/1020 | |||
| sorear | diakopter: what brings you here. | 06:38 | |
|
06:50
mtk left
|
|||
| diakopter | sorear: :P | 06:55 | |
|
06:55
diakopter left,
mtk joined
07:08
theory left
07:25
fperrad joined
08:10
allison joined
08:52
contingencyplan left
08:55
hudnix left
09:41
adu left
10:07
kid51 joined
|
|||
| dalek | rrot/generational_gc: 7cb3dca | bacek++ | include/parrot/pobj.h: Remove unused PObj_aligned_FLAG |
10:31 | |
| rrot/generational_gc: 49afb77 | bacek++ | src/gc/gc_gms.c: Remove old idea about implementation of GenGC. Create stub for new one. |
|||
| rrot/generational_gc: 31347e6 | bacek++ | src/gc/gc_gms.c: Flash out new (fsvo) Generational GC algorithm without magic. |
11:00 | ||
| bacek | msg whiteknight Here we go! github.com/parrot/parrot/commit/31347e6389 | 11:01 | |
| aloha | OK. I'll deliver the message. | ||
| dalek | rrot/generational_gc: e85bb43 | bacek++ | src/gc/gc_gms.c: Remove usage of GC_gen_2 flag. |
11:58 | |
| rrot/generational_gc: 3ce2d8a | bacek++ | include/parrot/pobj.h: Add GC_on_dirty_list flag. |
|||
| rrot/generational_gc: 18f0362 | bacek++ | include/parrot/pobj.h: Remove unused GC_ref_* flags. |
|||
| Coke | msg pmichaud I can add your blog to parrot, but I need an RSS url that manages the category - pmthium.com/category/parrot/ is HTML. | 12:16 | |
| aloha | OK. I'll deliver the message. | ||
| dalek | rrot/generational_gc: c1ea3e4 | bacek++ | src/gc/gc_gms.c: "The earth shall rise on new foundations" commit. Break GMS totally |
12:31 | |
| bacek | Coke, pmthium.com/category/parrot/feed/ | 12:32 | |
| Coke | bacek: IME, that will have everything, but OK, I'll try it. ;) | 12:40 | |
| bacek | Coke, no, this is for "parrot" only. | 12:41 | |
| I checked it :) | |||
| Coke | there's only one entry on his blog. hard to tell going forward. but done. | 12:43 | |
| msg pmichaud never mind, bacek got the URL - added. | 12:44 | ||
| aloha | OK. I'll deliver the message. | ||
|
12:57
kid51 left
13:28
wknight-phone joined
13:36
wknight-phone left
|
|||
| dalek | rrot/generational_gc: 1731594 | bacek++ | src/gc/gc_gms.c: Unbreak GMS little bit: cleanup declarations, replace Linked_List with |
13:36 | |
| rrot/generational_gc: 412be2f | bacek++ | src/gc/gc_gms.c: Fix pmc alloc/free. |
|||
| rrot/generational_gc: 592f07d | bacek++ | src/gc/gc_gms.c: Fix STRING alloc/free. |
|||
| rrot/generational_gc: e296fc9 | bacek++ | src/gc/gc_gms.c: Remove unused helper. We'll use Pointer_Array macro instead. |
|||
| rrot/generational_gc: 2946e7d | bacek++ | src/gc/gc_gms.c: Remove unused helper for sweeping pools. |
|||
| rrot/generational_gc: e01ac98 | bacek++ | src/gc/gc_ (2 files): Change mark_pobj_header to mark_str_header to keep in line with Modern Parrot. |
|||
| rrot/generational_gc: 9abb367 | bacek++ | src/gc/gc_gms.c: Factor out unseal_object helper. |
|||
| rrot/generational_gc: 6214375 | bacek++ | src/gc/gc_gms.c: Fix is_ptr_owned |
|||
| rrot/generational_gc: edb47fb | bacek++ | src/gc/gc_gms.c: Rewrite write_barrier according to new design. |
|||
| rrot/generational_gc: 81be312 | bacek++ | src/gc/gc_gms.c: Remove pobj2gen and gen2flags functions. They are not used anymore. |
|||
| rrot/generational_gc: a110762 | bacek++ | src/gc/gc_gms.c: Comment out (temporary) statistic calculation functions. |
|||
| rrot/generational_gc: 13aa2d5 | bacek++ | src/gc/gc_gms.c: Comment out validation functions. We will need new versions anyway, but keep |
|||
| rrot/generational_gc: 5888e37 | bacek++ | src/gc/gc_gms.c: Fix copy-paste error in is_string_ptr |
|||
|
13:41
hudnix joined
|
|||
| dalek | rrot/generational_gc: ab43498 | bacek++ | src/gc/gc_gms.c: Limit number of collected generations. We have only MAX_COLLECTIONS of them. |
13:47 | |
| rrot/generational_gc: 71d28f1 | bacek++ | src/gc/gc_gms.c: Rename MAX_COLLECTIONS to MAX_GENERATIONS to reflect reality. |
|||
|
13:55
rurban_ joined
14:00
rurban left,
rurban_ is now known as rurban
14:02
whiteknight joined,
fperrad left
14:06
adu joined
|
|||
| whiteknight | good morning, #parrot | 14:06 | |
| msg bacek thanks for the link. I read that algorithm this morning. I'll take some time to study it | 14:07 | ||
| aloha | OK. I'll deliver the message. | ||
| bacek | whiteknight, it's mostly done :) | ||
| dalek | rrot/generational_gc: 148c96b | bacek++ | src/gc/gc_gms.c: Implement cleanup_dirty_list |
||
| rrot/generational_gc: 04351d3 | bacek++ | src/gc/gc_gms.c: Replace asserts with ifs in write_barrier. We trigger them unconditionally in |
|||
| whiteknight | the new algorithm? | ||
| rrot/generational_gc: 7f9ec09 | bacek++ | src/gc/gc_gms.c: Implement first cut of sweep_pools |
|||
| whiteknight | bacek: Do we need to insert write barriers for this system? | 14:11 | |
| because that's going to take a long time to do. We need to check every file | |||
| bacek | whiteknight, yes, we do | ||
| whiteknight, it's done already | |||
| whiteknight | in the branch? | 14:12 | |
| bacek | yes | ||
| whiteknight | ok | ||
| bacek | and we don't have to "check every single file" | ||
| just few of them | |||
| whiteknight | how is it implemented, vtables? | ||
| bacek | yes | ||
| whiteknight | okay | ||
|
14:12
plobsing left
|
|||
| dalek | rrot/generational_gc: 292bb8e | bacek++ | / (3 files): Add .count to Pointer_Array in debug mode |
14:15 | |
| rrot/generational_gc: 25857f3 | bacek++ | src/gc/gc_gms.c: Enable more stats |
|||
| rrot/generational_gc: 1b24ec7 | bacek++ | src/gc/gc_gms.c: Erm. Remove object from original list before promoting into new one. |
|||
|
14:31
hudnix left
14:32
bluescreen joined
14:36
hudnix joined
|
|||
| whiteknight | bacek++ | 14:36 | |
| you're doing great work on this | |||
|
14:38
plobsing joined
14:41
adu left
|
|||
| Coke | he's certainly doing a lot of work on this. ;) | 14:50 | |
|
15:05
fperrad joined
15:07
PerlJam left,
PerlJam joined
|
|||
| dalek | nxed: r765 | NotFound++ | trunk/winxedst1.winxed: fix and rearrange allocation of temporary registers in stage 1 |
15:11 | |
|
15:12
Andy left
15:16
bluescreen left
15:24
vmspb joined,
bluescreen joined
15:26
plobsing left
15:38
plobsing joined
|
|||
| dalek | rrot/generational_gc: ea67f36 | bacek++ | src/gc/gc_gms.c: Revert "Remove pobj2gen and gen2flags functions. They are not used anymore." This reverts commit 81be312a4eebfe4ef8eff80473aeed99b0a2ad56. |
15:42 | |
| rrot/generational_gc: 2790788 | bacek++ | src/gc/gc_gms.c: Move objects from work_list back to generation's list. |
|||
| rrot/generational_gc: f951c0c | bacek++ | src/gc/gc_gms.c: pobj2gen |
|||
| rrot/generational_gc: f26c475 | bacek++ | src/gc/gc_gms.c: Seal moved objects and update generation number. |
|||
| rrot/generational_gc: 94fa70a | bacek++ | src/gc/gc_gms.c: Fix off-by-one error in sweep_pools. |
|||
| rrot/generational_gc: 286c19f | bacek++ | src/gc/gc_gms.c: Fix bug when I try to move object to dirty_list in second time. |
|||
| rrot/generational_gc: a05b385 | bacek++ | src/gc/gc_gms.c: Add more stats and fix small bugs in asserts. |
|||
| rrot/generational_gc: 594d503 | bacek++ | src/gc/gc_gms.c: Properly remove items from Pointer_Array |
|||
| cotto_work | ~~ | 15:56 | |
|
16:00
adu joined
16:01
vmspb left
16:03
theory joined
16:08
Andy joined
16:09
bluescreen left
|
|||
| whiteknight | we really need a library function for will_cause_segfault(void*ptr) | 16:10 | |
|
16:11
Patterner left
|
|||
| whiteknight | returns 1 if dereferencing that pointer would cause a segfault | 16:11 | |
| and then I can decide not to do that | |||
| NotFound | whiteknight: I'd like better a function do_what_i_want_right_and_fast ;) | ||
| whiteknight | NotFound: but if we pass in a segfaulty pointer, it breaks | 16:12 | |
| NotFound | Then: void do_what_i_want_right_and_fast (void) | ||
| whiteknight | ah, okay | 16:13 | |
| plobsing | I've recently had a very evil idea to remedy the PIR/arbitrary-constants problem | 16:14 | |
| whiteknight | what's the problem? | ||
| and then...what's the solution? | |||
| plobsing | PIR is a declarative language and can only express concepts its creators imagine | ||
| NotFound | plobsing: more evil than the one I said yesterday? | ||
| plobsing | which means that HLL authors wanting to capture complex data in PBC are SOL with PIR | 16:15 | |
| NotFound: what did you say yesterday? | |||
| NotFound | plobsing: make the constant table writable during :load and :init | ||
| plobsing | nope, mines more evil. | 16:16 | |
| whiteknight | it already is writable during :immediate | ||
| plobsing | whiteknight: yes, but not arbitrarily. | ||
|
16:16
Psyche^ joined,
Psyche^ is now known as Patterner
|
|||
| whiteknight | plobsing: okay, get on with it! | 16:16 | |
| NotFound | whiteknight: :immediate does not work well enough. | ||
| whiteknight | Notfound: I never said it worked well. Only that it works. In theory. | ||
| plobsing | if we had a fairly simple language with a powerful lexing system (eg: forth, scheme), we could abuse the hell out of the reader and make it a *superset* of PIR | 16:17 | |
| whiteknight | I'm not sure what you mean by that | 16:18 | |
| NotFound | Me neither | ||
| plobsing | which could destructure PIR into an imperative form, allowing for arbitrary operations on the segments being compiled | ||
| whiteknight | I don't follow any of that | 16:19 | |
| dalek | TT #1993 created by doughera++: New api.yaml tests require YAML.pm and List::MoreUtils.pm | ||
| TT #1993: trac.parrot.org/parrot/ticket/1993 | |||
| plobsing | ok, in terms of which language should I explain it? forth or lisp? | ||
| whiteknight | I'm not super familiar with either. Lisp | ||
| plobsing | OK, in terms of lisp, '.sub' starts a reader macro, which expands to (defsub ... (... ops ...)) or somesuch | 16:20 | |
| cotto_work | It's times like this that I wish I could see more in lisp than toenail clippings. | 16:22 | |
| NotFound | Do you mean writing a pir interpreter that generates the pbc from the code is interpreting? | ||
| plobsing | NotFound: yes, but as part of the language lexer, so that the "abused" language is fully available when we want to escape from PIR | 16:23 | |
| pmichaud | whiteknight: ping | 16:24 | |
| whiteknight | pong | 16:26 | |
| pmichaud | yesterday during the various nqp discussions you mentioned that you don't like it's use of lexicals ... and clarified that you didn't like the bulk associated with them | ||
| is that reasonably accurate? | 16:27 | ||
| whiteknight | what I meant by that, is that I don't like that bulk being added in automatically | ||
| that is, some variables don't need lexical scoping rules | |||
| plobsing | paying for features you don't use is not good | ||
| pmichaud | I just want to say that this is not really an issue with nqp itself -- it's the design of past and parrot's symbol tables that require it | ||
| nqp doesn't make those determinations -- past and post do | 16:28 | ||
| whiteknight | yeah, I know that. It's something we need to fix | ||
| pmichaud | it's a problem for all pct-based languages, not just nqp | ||
| whiteknight | but in any case, a language that goes through PAST and POST is going to have those problems | ||
| so my complaints weren't directed at NQP per se | |||
| pmichaud | that's how they came across, to me at any rate | ||
| whiteknight | I apologize then for the miscommunication | 16:29 | |
| NotFound | That is one of the reason I'm skecptical about apossible winxed PAST or POST backend. | ||
| pmichaud | oh, I think PAST ought to be redesigned to have a better variable allocation strategy, no doubt | 16:30 | |
| but Parrot's underlying register and symbol table needs a lot of work too | |||
| the overhead with lexicals arises from not having a good container/value model | |||
| whiteknight | yes | ||
| pmichaud | or reference types | ||
| and a lack of binding/assignment semantic distinctions | 16:31 | ||
| whiteknight | right. All those things we know to be problems. What we don't have is a compelling design to fix it | ||
| plobsing | winxed seems to mostly get by without that | ||
| pmichaud | the new nqp is working on fixing that | ||
| whiteknight | if somebody such as yourself tells us what they need to see in those areas, we can start putting together a design | ||
| cotto_work | pmichaud: great. What do you need from Parrot to do that? | 16:32 | |
| cotto_work hopes it's something that can be done | |||
| pmichaud | cotto_work: well, there are several pieces to the problem | 16:33 | |
| NotFound | plobsing: winxed has binding/assignment distinction. | ||
| pmichaud | let's start by identifying those | ||
| whiteknight: which part of lexicals bugs you the most? that might be a good place to start | 16:34 | ||
| plobsing | NotFound: true, but the weakness of the bind/assign semantics doesn't infect the entire design | ||
| NotFound | There is an obstacle in the way to a clean design: morph | ||
| whiteknight | pmichaud: no particular part. The overhead of calling set_lex and find_lex for register values which won't be used in inclosing scopes is what I was mostly talking about | 16:35 | |
| that is, if I don't need a variable to be .lex, I don't want it to be used that way | |||
| NotFound | morph and Parrot_pmc_reuse | ||
| pmichaud | so, you think that nested scopes should not translate to nested parrot subs? | ||
| because that's the blocker there | 16:36 | ||
| whiteknight | pmichaud: in some cases they should. But if we have no nested scopes, we don't need .lex and LexPad | ||
| dalek | TT #207 closed by doughera++: Unsecure RUNPATHS in parrot 0.90 | ||
| TT #207: trac.parrot.org/parrot/ticket/207 | |||
| whiteknight | my point is only this: For a low-level parrot language, I would be able to specify the :outer relations where necessary, and I should be able to avoid storing values in LexPads for values that I don't want stored that way. | 16:37 | |
| NotFound | winxed uses nested scopes for anonymous functions but does not lexicalize unused variables. | ||
| Unused in the innner scopes, that is. | 16:38 | ||
| pmichaud | PAST doesn't lexicalized unused variables in the inner scopes either | ||
| oh, wait | 16:39 | ||
| I think I misread | |||
| you mean it doesn't lexicalize variables in an outer scope if that variable isn't used in any inner scopes | |||
| NotFound | Yes | ||
| pmichaud | what about dynamic evals? or should we simply say "can't be used in low-level parrot"? | 16:40 | |
| cotto_work | that'd make Q:PIR tricky | ||
| pmichaud | or do we say "if you want to access a variable from an eval, you have to make sure it's lexicalized"? | ||
| plobsing | not every language has to support dynamic evals. those that don't shouldn't have to pay the price. | ||
| pmichaud | and yes, Q:PIR is definitely an issue there. | ||
| whiteknight | depends what you want the scoping rules to be. Is the eval executed on it's own, or as a lexically-nested inner sub of the caller? | ||
| NotFound | winxed doesn't have evals. | ||
| pmichaud | eval is almost always executed as lexically-nested inner sub | ||
| whiteknight | it seems to me like that isn't a decision our lowest-level language should make | 16:41 | |
| in nqp? | |||
| pmichaud | it has to be, otherwise you can't access any variables from the scope you're calling eval from | ||
| whiteknight | and if I don't want to access any of those variables, then it doesn't need to be lexically scoped | 16:42 | |
| or if I write out the variables as constants in the code string | |||
| NotFound | I suppose you can detect if any of that conflicting things is used, and optimize if not. | 16:43 | |
| whiteknight | or if I compile a function and pass values in through the parameter list | ||
| pmichaud | yes, those are all possibilities. it'd be confusing to some programmers, but that's probably okay for a lower-level language | ||
| whiteknight | my only point is that we have occasional (not common) needs for a language lower-level than NQP | ||
| PIR currently fits that niche | 16:44 | ||
| but I think we would all like to replace PIR with something of similar scope but nicer and more extensible syntax | |||
| pmichaud | okay. This helps. We'll definitely make register and variable optimization a key component of the new PAST we're creating | 16:45 | |
| whiteknight | with PIRATE in the wings, it may be possible to improve PIR in-place over time. This is especially good if most people use something higher up (NQP or other HLL) and aren't relying on PIR syntax directly | ||
| pmichaud | btw, I think that the entire lexical situation would be hugely improved if it were possible to use lexical to "map registers" from outer frames directly | 16:46 | |
| for example: | |||
| .sub 'outer' | |||
| .lex '$a', $P0 | |||
| ... | |||
| .end | |||
| .sub 'inner' :outer('outer') | |||
| .outer-lex '$a', $P5 | |||
| ... | |||
| .end | 16:47 | ||
| the '.outer-lex' directive would map the local register $P5 to $P0 of the outer sub | |||
| so that any references to $P5 in inner are actually references to $P0 in outer | |||
| whiteknight | The problem with that example is that currently register identifiers are mapped directly to indices in a memory block | ||
| plobsing | pmichaud: and the underlying mechanism would be more efficient how? | 16:48 | |
| whiteknight | what we would need instead is a "register reference" type | ||
| pmichaud | plobsing: because we no longer need store_lex or find_lex | ||
| whiteknight | so .outer-lex '$a', $R0 | ||
| $P5 = $R0 | |||
| and later: $P0 = $P5 | |||
| pmichaud | any rebinding of $P5 in the inner scope would automatically rebind $P0 in the outer scope | ||
| plobsing | pmichaud: *YOU* no longer need store_lex/find_lex, because we've pushed the complexity behind the curtain of the compiler | ||
| whiteknight | er, $R0 = $P5 | ||
| pmichaud | plobsing: actually, we've pushed the complexity into the virtual machine | ||
| because the mapping of inner to outer scope has to take place at runtime, not compile time | 16:49 | ||
| it's still the same effort that we currently do for find_lex | |||
| but it cleanly resolves a lot of the binding/assignment problem, which is what leads to the overhead in the first place | 16:50 | ||
| furthermore | |||
| if/when lexicals can map to registers other than PMCs, this resolves the same issue that will take place there | |||
| i.e. | |||
| outer: .lex '$a', $I0 | |||
| inner: .outer-lex '$a', $I5 | |||
| changes to $I5 in inner are reflected in $I0 in outer | |||
| otherwise, lexical native types will also have to always be doing find_lex and store_lex operations | 16:51 | ||
| because of the possibility of reassignment | |||
| whiteknight | I definitely understand what you're saying. That particular solution would probably be a nightmare for common-case performance, but the underlying idea is a good one | 16:52 | |
| pmichaud | why is it a nightmare for common-case performance? | ||
| it's not a performance hit at all | |||
| dukeleto | ~~ | ||
| pmichaud | it's far less of a performance hit than what we do now | ||
| whiteknight | because like I said, registers in PIR are integer indices into an array. If we change them to possibly be pointer-aliases, we pay a performance hit by having to ask whether a register is a value or a reference, or we have to always dereference and store a second array of register pointers | 16:53 | |
| pmichaud | in inner subs only | ||
| and only when accessing an outer lexical | 16:54 | ||
| it could be a fifth bank of registers, too | |||
| whiteknight | like I said, the underlying idea is a good one. We need to find a clean way to implement it which doesn't cost us the farm | ||
| pmichaud | i.e., I/S/N/P/R | ||
| in that fifth bank, we always know the registers are references | |||
| and then it's always .outer-lex '$a', $R5 | 16:55 | ||
| as you alluded earlier | |||
| whiteknight | right. but then we have to worry about typing. Is it a register to P? Register to S? | ||
| $RP5 | |||
| that's actually very workable | |||
| pmichaud | also, the compiler knows that the registers are references... that can be static instead of runtime performance | 16:56 | |
| NotFound | whiteknight: not neccesarily, the .lex declaration provide the information. | 16:57 | |
| pmichaud | in earlier versions of parrot, where we were using the "sliding window register banks" approach, being able to share registers across sub invocations was explicitly designed for | 16:58 | |
| somewhere Parrot lost that | |||
| i.e., it was then trivial to have a called sub manipulate key registers of a caller sub | |||
| whiteknight | I can imagine both many problems and many benefits with that approach | 16:59 | |
| it was before my time, however | |||
| plobsing | whiteknight: (re: pirate might make PIR nicer) PIR is a declarative syntax, which is inherantly limiting. we need an imperative means of constructing PBC if we want to get more general, which is a better approach in my mind than adding yet another special case syntax. | ||
| pmichaud | anyway, thanks for listening | 17:00 | |
| whiteknight | pmichaud: any time. We love the feedback | 17:01 | |
| plobsing: it really depends what we want PIR to be. is PIR simply a syntax for constructing PBC? Is it more than that | 17:02 | ||
| ? | |||
| plobsing | what more could it be? | ||
| whiteknight | right now it's best use is in writing tests for libparrot | ||
| making that easier for our testers would be a big benefit | 17:03 | ||
| pmichaud | oh, there's another huge advantage of having a fifth bank of registers exclusively for lexicals | ||
| whiteknight | to a smaller degree it's used in writing libraries | ||
| pmichaud: do tell | |||
| NotFound | A linker more capable than pbc_merge and suppor for it in the pbc format can solve some problems. | ||
| pmichaud | right now when a outer sub exits, if any inner closures possibly exist then we have to keep the context for the outer sub around | 17:04 | |
| because the inner closure may need to reference lexicals from the outer sub (even though it has exited) | |||
| currently, since lexicals are mapped to the P-bank of registers, that means that all of the P registers are marked "live" for GC | |||
| (as well as everything those PMCs mark) | |||
| so, if a P-register was used as a temporary in an outer sub that has to continue to stick around, its PMC (and all of that PMC's children) are kept alive, even though they are in fact totally inaccessible | 17:05 | ||
| imagine a PMC that was used to temporarily hold the results of a parse tree | 17:06 | ||
| however, if all of the lexicals were moved to their own register bank, then it would be safe to clear the PMC bank when the sub exits | |||
| releasing a *ton* of pressure on the GC | |||
| plobsing | pmichaud: if you know that's going to happen in advance, you could null the registers | ||
| pmichaud | we've thought about having PCT automatically null its temporaries, yes. | 17:07 | |
| but that feels like more code bloat. | |||
| then people will say "why is NQP generating all of these 'null $Px' instructions?" | |||
| plobsing | sure, your approach is cleaner. but this one is simpler and allows a demonstration (as opposed to speculation) of exaclty how much win we get | ||
| whiteknight | pmichaud: That's definitely something important to keep in mind | 17:08 | |
| pmichaud | well, except it's often hard to know when a register is temporary | ||
| particle1 | so then the instruction generated should be 'null $Px # reduce gc pressure' ;) | ||
|
17:08
particle1 is now known as particle
|
|||
| plobsing | if you make that and can demonstrate a marked improvement in GC behaviour, your case becomes a lot stronger | 17:08 | |
| whiteknight | a good register allocator may be overwriting registers anyway. Adding in lots of null operations would actually defeat that | 17:09 | |
| particle | no, i'm not really advocating that. | ||
| pmichaud | but we can perhaps modify PCT to maintain a list of the registers it creates as temporaries (that aren't lexicals) and null them out | ||
| plobsing | whiteknight: a register allocator has to know about the lifetime of registers anyways. it knows that null is a write-only, pure operation and therefore, nulling will not interfere with a register allocator | 17:10 | |
| pmichaud | as I said, it's really hard to know when a temporary is no longer being used. | ||
| whiteknight | brb food | 17:11 | |
| pmichaud | especially since the temporaries that are likely to be big are the ones that come from subroutine calls and the like | ||
| PerlJam | pmichaud: earlier you said "a fifth bank of registers exclusively for lexicals" Would that be true? Or would the 5th bank have general utility where the most obvious use is for keeping lexicals? | ||
| pmichaud | PerlJam: well, they could have several purposes | 17:12 | |
| (1) easilly mappable between contexts | |||
| (2) lifetimes that extend beyond the scope of a sub execution | |||
| plobsing | pmichaud: for the find_lex/store_lex issue, how about explicitly using keyed access on the outer context? ( $P0 = get_outer_context 1; $P0[lexical-index] = 1 ) | ||
| pmichaud | plobsing: we've been planning to do something exactly like that in new NQP, yes. | 17:13 | |
| But it just means you're replacing find_lex/store_lex with keyed lookups | |||
| also, note that sometimes the compiler cannot know the distance to the outer context that contains the symbol | 17:14 | ||
| (e.g., in evals) | |||
| so it's more of an optimization than a standard mechanism | |||
| but instead of a declaration, it could be an opcode, perhaps | 17:15 | ||
| PerlJam | pmichaud: also, does that mean that this hypothetic 5th bank of registers is special as compared with the others? e.g., when you "save context", you're really only concerned with the 5th bank and not the others (the INSP are all assumed temporaries)? | 17:16 | |
| pmichaud | $R0 = map_outer_lex '$a' # map $R0 to the outer lexical $a | ||
| PerlJam yes | |||
| PerlJam -- more to the point, it's not about "saving context", it's about nulling out no-longer-needed things | |||
| i.e., it's safe to null out the $P registers on sub exit, but you leave the 5th back alone and let normal GC take care of it | |||
| s/back/bank/ | 17:17 | ||
| plobsing | if subs marked what they needed within the context (in stead of the context marking all of its contents) you'd get the GC improvement | ||
| PerlJam | how would you not accidentally clobber something in the 5th bank? | ||
| pmichaud | PerlJam: I don't understand "not accidentally clobber" | ||
| plobsing | pmichaud: you've said yourself it is hard to tell what is a temporary | ||
| pmichaud | plobsing: in this case, $P registers are all temporaries | 17:18 | |
| PerlJam | okay, say I need to keep a value around, so I stick it in an R register. How do I know which R register to use? | ||
| plobsing | you've just change the problem into "its hard to tell what you can save in a $P register" | ||
| the problem is moved, not solved or mitigated | |||
| pmichaud | okay, so let's fix that one instead | ||
| let's create a bank of registers that are explicitly temporary | 17:19 | ||
| and can be cleared on subexit | |||
| anyway, I agree that we can see about fixing this in PAST before we do anything else | |||
| however | |||
| it may be a little difficult to figure out how much savings to allocate to this particular change, since so much will be changing in other places as well | 17:20 | ||
| PerlJam: (how do I know which R register to use) -- you allocate a new R register for each new thing you need to keep -- same as we do now | 17:21 | ||
| that way you don't clobber any existing ones | |||
| plobsing | I don't think it is worth making this change unless and until it can be demonstrated to have improvements in benchmarks. It may be intuitive (at least to you) that it would improve performace, but I want proof for such a large change. | 17:22 | |
| PerlJam | pmichaud: so, what would that look like? | ||
| pmichaud | we know from past analysis that large data structures are being kept around long after they're no longer needed or used (e.g., parse trees) | ||
| we don't have sufficient tools to be able to find out what is holding on to them | 17:23 | ||
|
17:23
dmalcolm joined
|
|||
| pmichaud | we also know that contexts stay alive long after the outer subs have exited | 17:23 | |
| and thus all of their contents stay alive | |||
| plobsing | pmichaud: null dead registers, see if it can reduce GC churn | ||
| pmichaud | plobsing: that's my point -- we don't have a good way of knowing which registers are 'dead' | 17:24 | |
|
17:24
bluescreen joined
|
|||
| plobsing | you are at least implying some knowledge that they are "large data structures are being kept around long after they're no longer needed or used | 17:24 | |
| pmichaud | I had speculated at one point that we could have something that looks at the context's LexPad and nulls out all of the registers that aren't in the LexPad | ||
| plobsing | " | ||
| pmichaud | I know that they're being kept around because GC isn't picking them up | 17:25 | |
| that doesn't mean I know which registers are holding them. I truly wish I did. | |||
| plobsing | how can you know that without knowing which registers are dead? | ||
| those bits of information are one and the same | |||
| pmichaud | I can know in this manner | ||
| I compile some HLL source code | |||
| that produces a parse tree | |||
| the parse tree is big | |||
| we then compile the parse tree down to the bytecode | 17:26 | ||
| the routines that needed the parse tree are all gone | |||
| but the parse tree is never gc'ed | |||
| something is holding a reference to the parse tree | |||
| I don't know what is holding that reference, but something is, therefore it's still "alive" | |||
| and we see the existence of the parse tree in the cost of subsequent mark+sweep operations | 17:27 | ||
| moritz | maybe the GC can somehow be hacked to show what references exist to a certain mem location? | ||
| I mean, printfs sprinkled all over :-) | |||
| cotto_work | #ps in 178 | 17:29 | |
| pmichaud | PerlJam: (what would that look like?) Same as what we do now. In PAST, whenever I need a new register, I just generate $Pxxx where 'xxx' is some unique number that hasn't been used before. IMCC takes care of allocating a unique register for it. | 17:30 | |
| plobsing | pmichaud: how about we null all the non-lex registers in returncc? | ||
| pmichaud | plobsing: yes, that's what I mentioned a few lines above, about LexPads | 17:31 | |
| plobsing | that would cut the problem down into "a context is holding on to the tree" vs "something else is holding on to the tree" | ||
| pmichaud | it cuts it down further than that, even | ||
| plobsing | I've seen no evidence to support that it is somehow a stray context in stead of a stray global, or an entry in a hash | ||
| we don't know what is causing the problem, so perscribing solutions at this point is *silly* | 17:32 | ||
| pmichaud | I do know that contexts exist long after they are exited | ||
| I do know that all of the registers in a context are therefore preserved, whether they need to be or not | |||
| this is a problem that wants a solution | 17:33 | ||
| I agree that the particular case I cite above could be due to a stray global | |||
| I'd like to have some better tools to find out the cause | |||
| I don't know what they would look like -- that's a bit beyond my area of Parrot core expertise | 17:34 | ||
| NotFound | There are also things being marked from the signature objects in the context. | ||
| pmichaud | it could be very interesting if I could somehow mark a PMC with a flag that says "if after this point you encounter the PMC in a mark-sweep, give me the trace that led to it" | 17:35 | |
| then, I could mark big PMC structures (like the parse tree) with the flag when I think they're no longer needed, and if they show up as alive in a later mark+sweep I can at least have some clue of the PMCs that led to it | 17:36 | ||
| plobsing | that would require a recursive GC wich would most likely blow your stack | 17:37 | |
| pmichaud | at least until recently, a recursive GC is exactly what we had | 17:38 | |
| plobsing | which is why I know about the stack-blowing issues | 17:39 | |
| pmichaud | I'm not saying we should go back to that, but a tracing GC that is able to keep track of such situations would be a big help | ||
| plobsing | I just thought of a horribly inefficient algorithm that would give what you asked. Tell the GC to give you a list of all objects that reference another object, run GC, update searched-for object, repeat. | 17:40 | |
| pmichaud | that would actually be just fine | 17:41 | |
|
17:41
Kristaba joined
|
|||
| pmichaud | if we just had a tracing GC that could output all of the references, a perl script could afterwards analyze it to find the chain(s) | 17:41 | |
| or even a 'gc_trace' opcode | 17:42 | ||
| that performs mark/sweep with tracing enabled | |||
| right now the reference situation is largely invisible to anyone working in PIR, so it's very hard to see what's happening | 17:43 | ||
|
17:44
vmspb joined
17:45
arnsholt left
|
|||
| particle | surely there's an unused flag bit in the parse tree pmc type | 17:45 | |
| pmichaud | parse trees are Regex::Match objects | 17:46 | |
| but I'd want it for all PMCs, not just match objects | 17:47 | ||
| plobsing | any feature implemented for only a specific type is broken beyond beleife | ||
| PerlJam | If you could dump the state of the GC to stderr, you could take snapshots whenever you wanted. | ||
| pmichaud | PerlJam: yes, see 'gc_trace' above :) | 17:48 | |
| PerlJam | sorry, I'm only paying 0.25% attention right now | ||
|
17:53
sheant joined
17:55
arnsholt joined
|
|||
| cotto_work | It's funny how many wiki pages I look at, only to see that I originally created the first version. | 17:58 | |
| particle | plobsing: my suggestion was to debug one particular problem, not to be a general solution. flag bit + gdb can work for finding what's holding a parse tree. | 18:11 | |
| *ref to a parse tree | 18:12 | ||
| whiteknight | plobsing: ping | 18:16 | |
| actually, unping | 18:18 | ||
| ...and plobsing: reping | 18:20 | ||
| plobsing | whiteknight: pong, unpong, repong? | 18:31 | |
| whiteknight | plobsing: the Eval PMC destroy vtable. Is there any way we're destroying PackFiles in there? | 18:33 | |
| any reason? | |||
| adu | whiteknight: have you ever been on the tetration forum? | 18:35 | |
| plobsing | we most likely are destroying packfiles there. if they are still necessary, the subs will have a pointer to the eval PMC and keep it alive. | ||
| in this way, the eval PMC is providing primitive GC support for the packfiles it manages | 18:36 | ||
|
18:36
arnsholt_ joined
|
|||
| tadzik | hello parrots | 18:36 | |
|
18:36
arnsholt_ left
|
|||
| whiteknight | plobsing: is that something we want? | 18:37 | |
| adu: not that I am aware of | |||
| plobsing | we want packfiles GCable, yes. how eval goes about doing it? probably not. | 18:38 | |
| whiteknight | adu: I used to go to several programming forums several years ago. I can't remember which | ||
|
18:41
bluescreen left
|
|||
| dalek | nxed: r766 | NotFound++ | trunk/winxedst1.winxed: add predefined symbol __FUNCTION__ and change ns and class path handling to |
18:47 | |
| rrot/whiteknight/imcc_compreg_pmc: f7bdb4f | Whiteknight++ | / (6 files): a few small fixes. We're still failing trying to build PGE, but I'm slowly getting past problems one at a time |
18:49 | ||
| rrot/whiteknight/imcc_compreg_pmc: d7e666a | Whiteknight++ | / (2 files): give evals proper names again |
|||
| rrot/whiteknight/imcc_compreg_pmc: 8e327c4 | Whiteknight++ | src/pmc/imccompiler.pmc: make sure to restore the interp->code pointer after invoking the IMCC compreg |
|||
| rrot/whiteknight/imcc_compreg_pmc: 713f76b | Whiteknight++ | tools/dev/pbc_to_exe.pir: register PIR and PASM compregs in pbc_to_exe. This fixes some of the bugs I was seeing in pbc_to_exe. Now I'm seeing a segfault when running nci thunk generator |
|||
| rrot/whiteknight/imcc_compreg_pmc: b494693 | Whiteknight++ | src/pmc/imccompiler.pmc: reset imcc before calling into it. This gets us much further in the build |
|||
| rrot/whiteknight/imcc_compreg_pmc: bfa470e | Whiteknight++ | / (2 files): build eval pmc in IMCCompiler.invoke. This should preserve current PIR-facing behavior of this method, which we don't need to do since it's deprecated. I'll tackle that beast in a different branch. segfaulting in nci thunk generator |
|||
|
18:52
chromatic joined
|
|||
| whiteknight | I'm getting a really weird segfault now in this branch, if anybody has a few tuits to look at it | 18:57 | |
|
19:03
nwellnhof joined
|
|||
| dalek | Heuristic branch merge: pushed 152 commits to parrot/nwellnhof/gc_dynamic_threshold by nwellnhof | 19:13 | |
| nopaste | "nwellnhof" at 192.168.1.3 pasted "pmichaud's GC test on nwellnhof/gc_dynamic_threshold" (301 lines) at nopaste.snit.ch/29949 | 19:14 | |
| whiteknight | what is the output supposed to look like? | ||
| pmichaud | like that. :-) | ||
| cotto_work | pmichaud++ | 19:15 | |
| pmichaud | the original would have very long lines of #'s when a gc mark/sweep run occured | ||
| nwellnhof | now we have more but shorter GC runs | 19:16 | |
| tadzik | mind showing the old output, or the script itself? | ||
| pmichaud | just a sec | ||
| (running it now) | |||
| cotto_work | what do those octothorpes represent? | 19:17 | |
| pmichaud | gist.github.com/806427 | ||
| each octothorp represents 0.02 second spent in the iteration | |||
| (or time spent since the previous iteration) | |||
| cotto_work | ok | ||
| pmichaud | we'd like the iterations to be somewhat even. in the gist output I just made, you'll see that iterations 63, 149, and 225 are 10x slower than the others | 19:18 | |
| cotto_work | yup | ||
| pmichaud | that's because of gc, we believe | ||
| cotto_work | pmichaud: have you thought about what kind of interface the "use Parrot;" layer of nqp would look like? (also, what's a better name) | 19:20 | |
| pmichaud | cotto_work: it depends on what features of parrot need to be exposed | 19:21 | |
| for example, "use Parrot;" would enable the pir:: or pirop:: namespace for access to individual Parrot opcodes | |||
| I suspect it would also enable the "is vtable('...')" and "is multi('...')" traits for decorating subs with :multi, :vtable, etc. | 19:22 | ||
| it could also bring in prototypes for access to Parrot's built in PMC types | |||
| i.e., so one can use Integer/Float/ResizablePMCArray/etc directly | |||
| cotto_work | that'd work through pir::new('X'); | 19:23 | |
| pmichaud | yes, we could fix that too | ||
| jnthn | Eww, not string new. :) | ||
| pmichaud | it might also enable some syntax for generating Key constants | ||
| jnthn | :) | 19:24 | |
| cotto_work | bacek++ #tuning the moon | ||
| whiteknight | every time you call new_p_sc, somewhere, somehow, jnthn gets hit in the face with a rock | 19:25 | |
| nwellnhof | pmichaud: that GC tracing thing shouldn't be too hard to implement. the biggest problem i see is how to identify PMCs. output like "that PMC is referenced by a PMC at 0xdeadbeef" isn't very helpful. | 19:28 | |
| tracking the sub where a PMC was created seems like a good idea. | |||
| and we have the type of a PMC of course. | 19:29 | ||
| pmichaud | type of a PMC I think was what I was looking for | ||
| cotto_work | We have a very large number of invalid addresses we can use. | ||
| pmichaud | knowing the sub where a PMC was created would be outstanding | 19:30 | |
| as I mentioned earlier, it would be *really* helpful to track the number of PMCs being created by each sub | |||
| nwellnhof | we would probably need a compile time flag that adds some debugging slots to subs and PMCs. | 19:31 | |
| PerlJam | nwellnhof++ when does gc_dynamic_threshold get merged to master? :) | ||
| pmichaud | fwiw, adding a count-of-PMCs slot to subs shouldn't be all that expensive | 19:32 | |
|
19:32
contingencyplan joined
|
|||
| pmichaud | whether or not it gets counted could be triggered by a toggle | 19:32 | |
| so it doesn't add much in the way of runtime overhead | |||
| but basically, I'd think have pmc_new (or whatever does the memory allocation) simply increments the count inside of the current_sub of the interpreter | |||
| (when the enabling flag is set) | |||
| chromatic | Don't tie it to the sub; tie it to the context. | ||
| pmichaud | except that I don't have a way to report contexts | 19:33 | |
| at the end, I really want to know which subs are responsible for creating all those pmcs | |||
| and contexts don't have that long a life | |||
| whiteknight | tying it to the sub would probably be the most valuable | ||
| chromatic | Tying it to the sub is broken. | ||
| whiteknight | that count includes information about which subs are hot | ||
| pmichaud | fair enough | ||
| chromatic | Half of the problem of artifically extended lifespans is that our subs *aren't* read only at runtime. | 19:34 | |
| The other half of the problem is a lack of any sensible register allocator. | |||
| pmichaud | we'll always have some subs that have to be not-read-only, I fear. | 19:35 | |
| eval() comes to mind | |||
| either that or we need a lot better :outer() handling | |||
| chromatic | Creating new subs is fine. | ||
| Writing to existing subs is not. | |||
|
19:35
freeksh0w86 left
|
|||
| pmichaud | there's not presently a way to create a new sub attached to an existing outer | 19:35 | |
| we have to create the sub, then modify its :outer | 19:36 | ||
| similarly for doing things like attaching HLL signatures | |||
| chromatic | I agree. Those need fixing. | ||
| But please don't add to the list of things that need fixing. | |||
| pmichaud | unless the declaration syntax is going to enable us to attach arbitrary attributes or wrappers at compile time | ||
| I'm just saying that "constant subs" requires a lot of other big changes first. | |||
| chromatic | I agree. | 19:37 | |
| nwellnhof | bacek, ping | ||
| pmichaud | if there's a way to mark a sub as read-only after it's been "managed", that would be okay also. | ||
| i.e., the HLL could say "I'm done fiddling with this Sub, it's constant now." | |||
| because (at least in rakudo), once we get all of the attributes and signatures attached to the object, it effectively is (or should be) constant after that. | 19:38 | ||
| It's simply that PIR/PBC doesn't give us enough ability to decorate the sub with everything we need at IMCC compile time. | |||
| chromatic | The biggest problem is the part of Sub's invoke() which stores the active context in the sub to allow runtime closure creation. | 19:39 | |
| pmichaud | if we want to deprecate that capability, I'd be okay with that. | ||
| chromatic | It should help GC dramatically. | ||
| pmichaud | that's really been there for backwards compatibility, afaik. | ||
| or if there's a way that we could decorate a sub to say "don't store the active context", that'd work too. | |||
| jnthn | I thought that was ow capture_lex worked? | 19:40 | |
| *how | |||
| pmichaud | capture_lex captures outer contexts into the current context | ||
| the part where it gets stored in the sub is for autoclose, iirc. | |||
| capture_lex avoids the need for that altogether | |||
| jnthn | ah, ok | ||
| pmichaud | oh wait, perhaps not. | ||
| hmmm | |||
| jnthn | auto-close only gets hit due to lack of static lexpads | ||
| pmichaud | anyway, iirc auto-close is the bigger culprit here | 19:41 | |
| jnthn | It causes a bunch of our issues | ||
| pmichaud | but yes, capture_lex has an issue as well -- because we have to tell the sub which closure to use when its context is created | ||
| jnthn | In nqpclr, if you try to hit an outer that's never been invoked, it doesnt magically create a lexpad. It just uses the static one. And the stuff bound into that is the basis of the lexpad for all future invocations. | 19:42 | |
| So you can install something in it once (e.g. at init or even compile time once it's bootstrapped) | |||
| And you're done. | |||
| That's why I have a $?CLASS lexical there, and can't do that in nqp-rx/nom at the moment. | 19:43 | ||
| nwellnhof | aloha msg bacek do you see any problems with nwellnhof/gc_dynamic_threshold? otherwise i'd merge it soonish. | ||
| aloha | nwellnhof: OK. I'll deliver the message. | ||
| nwellnhof | PerlJam: i think we can merge gc_dynamic_threshold in the next couple of days. | 19:44 | |
| pmichaud | nwellnhof: did you notice any other issues in larger programs, such as in building Rakudo itself or running Rakudo's spectests? | 19:45 | |
| i.e., in making the one small program run better, did we lose something on the larger ones? | |||
| nwellnhof | pmichaud: it improves Rakudo build time on low-memory systems, and is a bit slower on machines with more memory. although that can be tuned manually. | 19:47 | |
| it didn't notice any spectest breakage, but i have to retest. | |||
| pmichaud | okay | ||
| "a bit slower" is probably okay. a lot slower will cause pain :) | |||
| nwellnhof | *i | ||
| PerlJam | nwellnhof: when you say "tuned manually" does that mean "edit a file and change a number" or something else? | 19:48 | |
| nwellnhof | PerlJam: command line options, currently | ||
| environment variables or config files might be nicer. | |||
| and you can trigger tt #1990 easily, but there's a simple workaround. | 19:50 | ||
| dalek | tracwiki: v3 | pmichaud++ | RakudoTasklist | 19:55 | |
| tracwiki: trac.parrot.org/parrot/wiki/RakudoT...ction=diff | |||
| nwellnhof | see also irclog.perlgeek.de/parrot/2010-12-24#i_3116771 | ||
| pmichaud | gist.github.com/806539 # gc-1 benchmark instrumented with memory usage | 19:58 | |
| I don't see a significant jump in memory usage on the first iteration, fwiw | 19:59 | ||
| actually, I guess the first iteration consumes 4MB extra, relative to the others | 20:00 | ||
| so that's consistent with what nwellhof++ reported | 20:01 | ||
| nwellnhof | pmichaud: that's because TOTAL_MEM_ALLOC also counts freed memory. | ||
| pmichaud | I'm sure the extra there is because of methods being invoked for the first time and therefore having their signatures generated + attached | ||
| still, 4MB seems like an awful lot for that. | |||
| nwellnhof | i will add TOTAL_MEM_USED which is much more accurate. | 20:02 | |
| pmichaud | please do | ||
| and something is leaking a ton of memory, which I wouldn't really expect in this little program | |||
| oh, wait | 20:03 | ||
| TOTAL_MEM_ALLOC is the total of all memory allocated, including that which is freed | 20:04 | ||
| so obviously this number is monotonically increasin....no, that can't be it | |||
| what does TOTAL_MEM_ALLOC really represent? | |||
| or is it really just not useful as currently implemented? | |||
| nwellnhof | pmichaud: yes, it's monotonically increasing because Parrot doesn't return (most of the) memory to the system. | 20:05 | |
| pmichaud | but in the output I just nopasted, it's not monotonically increasing | 20:06 | |
| it resets to a lower number after some of the gc runs | |||
| nwellnhof | yes, it's buggy in master. | ||
| pmichaud | okay, so "not useful as currently implemented" | ||
| nwellnhof | yes, it should be more useful in my gc branch. | 20:07 | |
| pmichaud: i'll try your new test script on my branch after make spectest has finished. | 20:14 | ||
| memory accounting is a bit complicated because Parrot also uses malloc for a lot of stuff. | 20:15 | ||
| whiteknight | we really should be able to move most uses of malloc to the fixed-size allocator | 20:17 | |
| that's neither here nor there | |||
| nwellnhof | everything except large arrays and hashes probably. | 20:18 | |
| whiteknight | and even then, we could add a new mechanism to the gc for allocating those things | ||
| even if that "mechanism" was initially a thin wrapper around malloc | 20:19 | ||
| at least initially | |||
|
20:19
tcurtis joined
|
|||
| nwellnhof | yes, we could implement a variable size allocator that works like the fixed size allocator but uses size classes. | 20:19 | |
| btw, we have that wrapper already. | 20:20 | ||
| whiteknight | do we? I can't keep track of all the things we have now | ||
| nwellnhof | the usual sequence is mem_gc_allocate => Parrot_gc_allocate_memory_chunk => malloc | 20:21 | |
| then there's mem_sys_allocate which also calls malloc | 20:22 | ||
| it's a bit messy. | |||
| whiteknight | ok | 20:24 | |
| cotto_work | #ps in 5 | 20:25 | |
| get those reports posted, slackers! | |||
| Hackbinary | hello | ||
| I have a silly question | |||
| cotto_work | Hackbinary: you may get a silly answer then, but it's worth a shot. | 20:26 | |
| Hackbinary | Thanks :) I have some stuff to commit the cardinal project, but how should I do that? Should I create fork then someone else will pull in my changes? | ||
| Tene | Hackbinary: that would be just fine | ||
| If you submit a few good patches, I'll give you commit privs on the cardinal repo. | 20:27 | ||
| Hackbinary | Tene: okay, that sounds good :) | ||
| whiteknight | cardinal is at parrot/cardinal now, not cardinal/cardinal | 20:28 | |
|
20:28
plobsing left
|
|||
| whiteknight | but same principle applies: create a fork and submit pull requests and patches | 20:28 | |
| pmichaud | does INTERPINFO_TOTAL_PMCS no longer work? | ||
| cotto_work | we need this stuff documented | 20:29 | |
| Tene | whiteknight: does being hosted under the parrot organization imply need for a CLA or anything? I figured it was just a convenience for parrot committers... | ||
| whiteknight | Tene: That's a very good question. I suspect we could create a new group of HLL developers who don't have write access to the Parrot repo | 20:30 | |
| Let's worry about that later. I'll do some research. | |||
| right now Hackbinary can create a fork and start making patches | |||
| Tene | whiteknight: It's been valuable to me to freely give out commit privs to cardinal in the past, and I'd like that to continue. | 20:31 | |
| whiteknight | Tene: yes, I agree with you. I will figure this out one way or another | ||
| cotto_work | #ps in now | 20:32 | |
| Tene | I admit to ignorance of how github organizations work. | ||
| whiteknight | Tene: Each organization has teams. Each team has a set of permissions and a list of repos | ||
| so I think we can create a team for cardinal developers, or a team for HLL developers in general | |||
| Tene: Also, you could have a semi-official fork of your own, and grant out privs to that. Then, we can pull changes into the parrot org | 20:33 | ||
| there are lots of things we can look at | |||
| nwellnhof | Util: i'd love to have a look at those Coverity reports | ||
| Tene | Sure. | ||
| nwellnhof | Rakudo spectest: PASS on nwellnhof/gc_dynamic_threshold | 20:34 | |
| pmichaud | nwellnhof ++ | ||
| nwellnhof | gc-2.p6 on nwellnhof/gc_dynamic_threshold: gist.github.com/806603 | 20:37 | |
| i was wrong about TOTAL_MEM_ALLOCATED being monotonically increasing. string buffers are returned actually. | 20:38 | ||
| chromatic | That uses a fraction of the memory. | ||
| pmichaud | that's a heck of a lot smaller memory usage | ||
| nwellnhof | yes, that's because of the 1/8 of sysmem GC threshold. | ||
| pmichaud | ah | ||
| Util | nwellnhof: private msg | ||
| pmichaud | and you have less memory than I, I suspect | ||
| I'll check out the branch and give it a try | |||
| nwellnhof | pmichaud: no the dynamic threshold isn't based on sysmem anymore. | 20:39 | |
| pmichaud | oh | ||
| okay, maybe I'll wait for a merge | |||
| Hackbinary | tene: that's my stuff up into github.com/hackbinary/cardinal | 20:47 | |
| tene: now 525 of 609 tests passed; was at 497 of 603 | 20:49 | ||
| Tene | Hackbinary: That's great. What did you work on? | ||
| (bit too busy to read commit log ATM) | |||
| Hackbinary | tene: np, fixed the else clause in actions.pm; added get_bool to Integer.pir, String.pir, Object.pir to return true | 20:51 | |
| and a get_bool for NilType.pir to return 0 | |||
| tadzik | I'd like to see that | ||
| Hackbinary | I also added 6 tests to 01-stmts.t | 20:52 | |
| pmichaud | NotFound: I'm not claiming that PCT is the only way to do it. | 20:58 | |
| IMCC does not make for a robust enough infrastructure for writing, say Tcl or APL or Python without a *lot* of work | 20:59 | ||
| a higher level toolchain of some sort is needed | |||
| NotFound | pmichaud: it will be, if people keeps going towards generating pbc from POST as the only reasonable way. | ||
| whiteknight | We need a language to replace IMCC for low-level stuff and bootstrapping. We need a language for writing HLL compilers and compiler tools. I see no reason why these have to be the same language | ||
| pmichaud | whiteknight: they don't. I don't think that was being claimed. | 21:00 | |
| whiteknight | Right. I'm just trying to be very clear. We've all been doing a lot of talking over and around each other in the past two days | ||
| pmichaud | fairy nuff. | ||
| whiteknight | if our internal, self-maintained, IMCC replacement language is some kind of copy/fork of NQP, I'm fine with that | 21:01 | |
| if our language for writing compilers tools is some kind of copy/fork of NQP, I'm fine with that too | |||
| actually, for the former I would probably prefer a fork that we maintain ourselves | |||
| for the later, maybe we can be a little bit more hands-off | 21:02 | ||
| but then it doesn't make a lot of sense to be mixing versions of NQP | 21:03 | ||
| chromatic | That's the problem. | 21:04 | |
| Oh, and ops2c relies on NQP. | |||
| cotto_work | My apprehension centers around two things; First, pmichaud is better at maintaining nqp (any flavor) than we. Second, I don't want subtly-incompatible versions of nqp floating around. | ||
| whiteknight | so maybe that's it. We need a language that we can maintain, but we don't want to maintain NQP | 21:05 | |
| so, let's draw a line in the sand. NQP is the de facto standard language for building compilers. We tell everybody to use NQP for that purpose | |||
| cotto_work | We need something stable. If someone else maintains it (and we have a channel to contribute fixes, etc), that's fine. | ||
| whiteknight | internally, we use PIR (assuming PIRATE and improved syntax/features), or something like Winxed | 21:06 | |
| chromatic | If someone else maintains it out of tree, I'm not sure it's stable. | ||
| whiteknight | maintains what out of tree? | ||
| chromatic | I was responding to cotto. | 21:07 | |
| whiteknight | oh, sorry | ||
| dalek | TT #1994 created by pmichaud++: interpinfo TOTAL_PMCS and ACTIVE_PMCS no longer work in 3.0.0 | 21:08 | |
| TT #1994: trac.parrot.org/parrot/ticket/1994 | |||
|
21:13
plobsing joined
|
|||
| Hackbinary | should there not be branches for stable, development and experimental of the NQP? With solutions being migrated from experimental through development to stable as appropriate? | 21:14 | |
| cotto_work | pmichaud: what's going to break on nqp that works with nqp? Will it be an issue of adding use Parrot; and deleting implementations of functions that will provided by the setting? | 21:15 | |
| pmichaud | cotto_work: I think so, yes. | 21:16 | |
| I don't expect much to break quickly. | |||
| cotto_work | "quickly"? | ||
| pmichaud | We'll undoubtedly provide some deprecation points as we evolve | ||
| for example, I expect the new nqp will continue to support pir:: even without "use Parrot;" for a short time into the future | 21:17 | ||
| nqp-nom (the new nqp) is far more an evolution of nqp-rx than a rewrite | |||
| it's just we had to break the underlying object model code in order to use 6model | |||
| cotto_work | that's my understanding | ||
|
21:17
chromatic left
|
|||
| pmichaud | I think it will be very telling to see how something like, say, ops2c works under the new nqp | 21:18 | |
| cotto_work | I know that it's keeping the same test suite as nqp-rx | ||
| pmichaud | I'd even be willing to make it a goal to keep that running for a while | ||
| cotto_work | That'd be helpful. | ||
| dalek | nxed: r767 | NotFound++ | trunk/winxedst1.winxed: generate .const 'Sub' from using when the function is defined in the current |
||
| pmichaud | I mean, we depend on ops2c pretty heavily too :) | ||
| since we have custom dynops | |||
| Hackbinary: I'm certain that nqp will move to a more regular release/deprecation cycle, yes. | |||
| cotto_work | a deprecation policy like what Parrot tries to do (notify, provide a period when old and new work, etc) would help also | ||
| pmichaud | until now nqp was really following under parrot for much of that. in the future we'll need our own. | 21:20 | |
| dukeleto | looks like i missed #ps | ||
| cotto_work | were you on the concall? | ||
| pmichaud | originally I started nqp-rx expecting to do "monthly releases", but I found that there wasn't much purpose to it with the way it ended up being packaged in parrot. | ||
| I'm sure it will be different going forward. | |||
| cotto_work | is PaFo getting bought out? Are my shares worth millions? | 21:21 | |
| dalek | rrot/nwellnhof/gc_dynamic_threshold: 00d27fb | nwellnhof++ | / (3 files): Work around GC problem in embed API |
21:22 | |
| rrot/nwellnhof/gc_dynamic_threshold: 017627f | nwellnhof++ | / (5 files): Add TOTAL_MEM_USED to interpinfo |
|||
|
21:27
Andy left
|
|||
| KaeseEs | "Winxed has three native datatypes: int, float, string and var. " | 21:27 | |
|
21:30
whiteknight left
|
|||
| tadzik | and is subject to the banana problem | 21:30 | |
| dukeleto | cotto_work: yes, i was on the conf call | ||
| cotto_work | anything surprising? | 21:31 | |
| dukeleto | cotto_work: we are close to having our ducks in a row to submit stuff to the IRS to regain non-profit status | ||
| cotto_work: not really | |||
| cotto_work | That's a good place to be unsurprised. | ||
| dukeleto | cotto_work: particle owes us a bio, and we are going to tar and feather him if he doesn't send it in today | ||
| pmichaud | particle can be the new mascot? ;-) | 21:32 | |
| colored feathers, I hope! | |||
| dukeleto | We have to reverse engineer financial data from Quickbooks, and nobody uses windows, except particle . | ||
| cotto_work | "particle is a pretty cool guy. eh uses windows and doesn't afraid of anything" | 21:33 | |
| done | |||
|
21:34
ilia joined
|
|||
| dalek | rrot: efd80f0 | NotFound++ | tools/dev/show_deprecated.pl: show something meaningful for deprecation notices without eligible or ticket fields |
21:36 | |
| NotFound | KaeseEs: what's the problem? | 21:37 | |
| cotto_work | 3 != 4 | ||
| NotFound | Uh :D | ||
| There are three kinds of people: able to count and unable to count. | 21:38 | ||
|
21:41
plobsing left
|
|||
| KaeseEs | NotFound: there are only two really hard problems in computer science: cache invalidation, naming things and off-by-one errors :V | 21:41 | |
| cotto_work | KaeseEs++ | ||
| nwellnhof | lol | 21:42 | |
|
21:42
fperrad left
|
|||
| KaeseEs | noob question: i want to test Parrot_hires_get_time(), which lives in src/platform/generic/hires_timer.c and has its prototype in include/platform/platform_interface.h . when i write a quick test program to fiddle with it, gcc blows up when it encounters UHUGEINTVAL, which is defined in /include/parrot/config.h. is there an easymode solution to this? | 21:47 | |
| cotto_work | It shouldn't blow up. Can you nopaste what you're seeing? | 21:50 | |
|
21:57
rurban_ joined
|
|||
| nopaste | "KaeseEs" at 192.168.1.3 pasted "In file included from include/" (63 lines) at nopaste.snit.ch/29968 | 21:57 | |
| NotFound | KaeseEs: fixed, thanks. | 21:59 | |
| cotto_work | KaeseEs: it's probably an error in your code. Can you nopaste that? | ||
| notice the first few lines | |||
|
22:00
rurban left,
rurban_ is now known as rurban
|
|||
| KaeseEs | pastebin.com/KX1Fu3MZ | 22:00 | |
| NotFound | BTW int main(void) is wrong, please don't contribute to keep that mistake alive. | 22:03 | |
| tadzik | main(void) is usually "I'm lazy" | ||
| NotFound | tadzik: writing four letters is more lazy than none? | 22:04 | |
|
22:04
wknight-phone joined
|
|||
| tadzik | ah, you mean any fun(void) is wrong? | 22:05 | |
| I thought that's the old way to do it | 22:06 | ||
| KaeseEs | NotFound: comp.lang.c faq says int main(void) is one of the 2 valid declarations of main in c89. does parrot use c99? | ||
|
22:07
AndroUser2 joined
|
|||
| NotFound | Last time I checked the strict valid ones were () and (argc, argv) | 22:09 | |
| KaeseEs | (or are you referring to the use of void to indicate a function takes no arguments being one of the abominations created by the C standardization process) | ||
|
22:09
wknight-phone left
|
|||
| KaeseEs | NotFound: see section 5.1.2.2.1 in the iso standard www.open-std.org/jtc1/sc22/wg14/www.../n1539.pdf | 22:09 | |
| AndroUser2 | standards. blah | 22:12 | |
|
22:14
AndroUser2 is now known as wknight-phone
|
|||
| NotFound | Sorry, maybe I was thinking in C++ | 22:14 | |
| wknight-phone | c++, double blah | ||
| KaeseEs | i like that you gave c a karma point and decried its misbegotten offspring in the same statement | 22:16 | |
| tadzik | makes C bigger, but returs the old value | ||
| wknight-phone | :) | 22:17 | |
|
22:18
mtk left
|
|||
| dalek | rrot: 2cdf5dd | nwellnhof++ | / (2 files): Add some debug output to IPv6 test |
22:22 | |
|
22:24
mtk joined
|
|||
| Coke | Didn't particle submit a bio a year ago? | 22:24 | |
| ... but I don't have it gmail. | 22:25 | ||
| particle | it's coming in like 3 minutes | 22:26 | |
| KaeseEs | well, i feel like a doofus. adding parrot/parrot.h to my includes resolved all the compiler errors, and only left the linker error that ld can't find clock_gettime. despite it being in libc. | ||
| wknight-phone | KaeseEs, what are you working on? | 22:29 | |
| dalek | parrot: f4a80b1 | theory++ | pgtap.sql: Update pgTAP URL. |
22:31 | |
| KaeseEs | wknight-phone: quickie program to test Parrot_hires_get_time() to see if might be a workable way to do precise timing for a metronome-like rt collector | 22:33 | |
| cotto_work | KaeseEs: it's not guaranteed to provide a minimum resolution. | ||
| nwellnhof | KaeseEs: doesn't metronome use read barriers? | 22:34 | |
| particle | for all of you interested in my tardiness, my bio has been sent :P | 22:35 | |
| NotFound | From the linux man page: NOTES Most systems require the program be linked with the librt library to use these functions. | ||
| KaeseEs | nwellnhof: unsure, I've only glossed through most of bacon's stuff so far | ||
| NotFound: gah I didn't see that, thanks | 22:36 | ||
| pmichaud | particle: awwww, no tar and feathers? | ||
| particle | tar and feather me anyway, i'm ready to party! | 22:37 | |
| pmichaud | :-P | ||
| Hackbinary | I'll bring the whiskey | ||
|
22:39
wknight-phone left
22:41
ilia left
|
|||
| dalek | rrot/generational_gc: 515bf97 | bacek++ | src/gc/gc_gms.c: Reimplement check_sanity |
22:53 | |
|
22:55
vmspb left
|
|||
| dalek | TT #721 closed by pmichaud++: PGE::P5Regex consumes all memory | 23:06 | |
| TT #721: trac.parrot.org/parrot/ticket/721 | |||
| TT #843 closed by pmichaud++: PGE will assume {*} at end of every regex | |||
| TT #843: trac.parrot.org/parrot/ticket/843 | |||
| TT #851 closed by pmichaud++: [DEPRECATED] .find_key method on PGE;Match objects | |||
| TT #851: trac.parrot.org/parrot/ticket/851 | |||
| TT #1017 closed by pmichaud++: recognize the form of alternation | |||
| TT #1017: trac.parrot.org/parrot/ticket/1017 | |||
| TT #1037 closed by pmichaud++: throw useful exception on non-quoted non-word characters in PGE | |||
| TT #1037: trac.parrot.org/parrot/ticket/1037 | |||
| TT #1042 closed by pmichaud++: PGE doesn't support angle quotes inside of regexes. | |||
| TT #1042: trac.parrot.org/parrot/ticket/1042 | |||
| TT #1065 closed by pmichaud++: PGE should emit inline PIR with Grammar namespace | |||
| TT #1065: trac.parrot.org/parrot/ticket/1065 | |||
| dukeleto | KaeseEs: including parrot/parrot.h is bad juju | 23:09 | |
| KaeseEs: best to include the actual headers that you need | |||
| KaeseEs: parrot/parrot.h is the internal api and can change at any time | |||
| cotto_work | those tickets are dropping like flies | 23:10 | |
| dukeleto | KaeseEs: if it is a one-off program, that is fine, but if you want to maintain the code, don't use parrot/parrot.h | ||
| cotto_work | I'm happy. | ||
| Hackbinary | +1 | 23:11 | |
| KaeseEs | dukeleto: will keep in mind. | 23:12 | |
| dalek | rrot: a35f817 | nwellnhof++ | / (5 files): Remove support for deprecated charset:encoding:"" literals TT #1808 |
23:18 | |
| TT #1163 closed by pmichaud++: PGE: refactor pod_comment rule into PGE/Util.pbc | 23:23 | ||
| TT #1163: trac.parrot.org/parrot/ticket/1163 | |||
| TT #329 closed by pmichaud++: [PATCH] save compiler filename in PCT::HLLCompiler | |||
| TT #329: trac.parrot.org/parrot/ticket/329 | |||
| TT #466 closed by pmichaud++: PAST::Val.new( :value( ~$/ ), :returns('Complex')) generates incorrect pir | |||
| TT #466: trac.parrot.org/parrot/ticket/466 | |||
| TT #1808 closed by nwellnhof++: PIR string literals with charset and encoding are deprecated | |||
| TT #1808: trac.parrot.org/parrot/ticket/1808 | |||
|
23:26
kid51 joined
|
|||
| dalek | rrot: 693ddea | pmichaud++ | compilers/pct/src/POST/Node.pir: [pct]: TT #821 -- Allow POST::Sub to handle parameters :slurpy + :optional and :slurpy + :named + :optional (by treating them as though :optional is not present, as recommended in the ticket). |
23:30 | |
| rrot: d774533 | pmichaud++ | / (5 files): Merge branch 'master' of github.com:parrot/parrot |
|||
|
23:31
plobsing joined
23:40
tcurtis left
|
|||
| dalek | TT #1882 closed by nwellnhof++: gethostbyname failure doesn't throw an exception | 23:40 | |
| TT #1882: trac.parrot.org/parrot/ticket/1882 | |||
| TT #821 closed by pmichaud++: PCT - POST::Sub::add_param() ignores +optional+slurpy parameters. | |||
| TT #821: trac.parrot.org/parrot/ticket/821 | |||
| TT #868 closed by pmichaud++: DEPRECATE generation of PAST::Val constants | |||
| TT #868: trac.parrot.org/parrot/ticket/868 | |||
| TT #1198 closed by pmichaud++: interactive mode doesn't save lexicals correctly | |||
| TT #1198: trac.parrot.org/parrot/ticket/1198 | |||
| TT #1179 closed by nwellnhof++: Test open file, close file, delete file, reopen previously opened stream | |||
| TT #1179: trac.parrot.org/parrot/ticket/1179 | |||
| TT #1625 closed by pmichaud++: PCT generates usage message too early | |||
| TT #1625: trac.parrot.org/parrot/ticket/1625 | |||
| pmichaud | Resolved 14 tickets. :-) | 23:43 | |
| Added one new ticket earlier today, which makes my total for the day of -13 | |||
| cotto_work | pmichaud++ | 23:45 | |
| pmichaud | So, we're down to 530 tickets. | ||
| dalek | nxed: r768 | NotFound++ | trunk/winxedst1.winxed: refactor command line option handling and activate the option --noan in stage 1 |
||
| pmichaud | closed #589, so -14 | 23:50 | |
|
23:51
kid51 is now known as kid51_at_dinner,
whiteknight joined
|
|||
| cotto_work | I haven't even had a chance to get in on the action. | 23:53 | |
| If this keeps up we'll hit 500 by the weekend. | |||
| pmichaud | #1993 needs fixing soon -- it causes test failures on my system | 23:54 | |
| whiteknight | ...too...many....ticket....emails..... | ||
| whiteknight has seizure | |||
| pmichaud | i.e., "make test" doesn't pass on my system | ||
|
23:56
cosimo joined
|
|||
| dalek | TT #589 closed by pmichaud++: PGE Longest token match | 23:57 | |
| TT #589: trac.parrot.org/parrot/ticket/589 | |||
| rrot/yaml-fix: 0ed38ee | cotto++ | t/tools/show_ (2 files): add patch from doughera++ to start fixing the yaml tests on systems with the required perl modules installed |
23:59 | ||