Parrot 3.7.0 "Wanda" | parrot.org | Log: irclog.perlgeek.de/parrot/today | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 6 September 2011.
00:50 preflex joined 01:14 kid51 joined 01:30 woosley joined
dalek Heuristic branch merge: pushed 26 commits to parrot/whiteknight/kill_threads by Whiteknight 01:43
plobsing_ NotFound: why not allow tailcalls from try blocks? 01:52
02:21 benabik joined 02:57 benabik joined 03:30 particle1 joined 04:06 nbrown joined
cotto ~~ 05:25
dalek rrot: 37f7be7 | dukeleto++ | t/README.pod:
Mention the allhlltest target in our test readme
05:45
moritz msg whitenight FYI rakudo tests fine on the kill_threads branch 06:30
aloha OK. I'll deliver the message.
cotto moritz, that's what I was pinging you about in #perl6 06:31
heh
moritz (testing rakudo on a branch is no magic. One can just say perl Configure --gen-parrot=$branchname; make spectest in rakudo and wait an hour) 06:32
cotto doing so now
just comparing that against master 06:33
06:46 JimmyZ joined 06:51 rfw joined 06:55 rfw joined 07:00 mj41 joined 07:27 woosley joined
dalek rrot: dbfea5d | jimmy++ | src/gc/fixed_allocator. (2 files):
revert s/Pool_Allocator_Free_List/Pool_Allocator_Arena/, since not_gerd said it's different, or rename them to Pool_Allocater_List, I'm not sure it's ok or not
08:02
rrot: b9d7d56 | jimmy++ | / (11 files):
Merge branch 'master' of github.com:parrot/parrot
08:06 woosley1 joined, woosley1 left 08:09 dodathome joined 08:21 JimmyZ_ joined
mls morning! 08:30
tadzik good morning #parrot 08:35
JimmyZ moring! mls 08:39
morning! mls
09:11 jsut_ joined 11:12 nbrown_ joined
mls anybody online with imcc knowledge? 11:34
the debug segemtn data seems to be wrong
suggested patch: gist.github.com/1200337 11:35
11:39 Psyche^ joined
JimmyZ mls: plobsing_ or whiteknight 11:43
mls thanks!
JimmyZ mls: pull a requrest is better , and your patch can't be easily lost since they are not here 11:45
11:48 benabik joined
benabik o/ #parrot 11:48
11:52 benabik_ joined 12:03 whiteknight joined 12:10 bluescreen joined 12:11 benabik joined
whiteknight good morning, #parrot 12:13
12:13 benabik_ joined
mls Hi whiteknight! 12:13
the data in the debug section seems to be wrong 12:14
12:14 atrodo joined
mls patch: gist.github.com/1200337 12:14
(feel free to change the "if" statement if you don't like the empty block) 12:15
whiteknight mls: debug section of the packfile? 12:19
mls yes
whiteknight do you have an example of how they are wrong? 12:20
mls they contain spurious zeros
and the sub data starts at the wrong offset if the file contains more than one sub 12:21
(thus the zeros between the subs)
the data in the debug section maps op number -> line 12:22
imcc counts annotations as op, thus the misplaced entries 12:23
jnthn This could explain a lot of rather off line numbers...
12:23 kid51 joined
jnthn mls++ 12:23
mls jnthn: who/what uses the debug data?
jnthn mls: When there's a runtime error and we need to display a line number in the PIR backtrace, it uses it. 12:24
mls ah yes, could be.
jnthn mls: And they don't always do too well on accuracy.
The HLL annotations tend to do much better. 12:25
mls note that files without annotations have correct debug data
jnthn oh! 12:26
:)
kid51 mls: The parrot_debugger has long been considered dysfunctional. We recently had a GSOC project to replace it, but even that ran into problems dealing with IMCC.
afk 12:28
whiteknight mls: Can you put together anything like a test case that shows how the system was broke and how that patch fixes it? 12:30
I have no problems merging it, I just want to see how it makes things better and by how much
mls sure
run this pir program: gist.github.com/1200447 12:35
without patch: current instr.: 'bar' pc 5 (/suse/mls/foo.pir:0) (foo.pir:3) 12:36
whiteknight that second .annotate is on line 4, but says line 3
(not sure if that matters)
mls with patch: current instr.: 'bar' pc 5 (/suse/mls/foo.pir:9) (foo.pir:3)
whiteknight I have to fire up my VM. give me a few minutes
that's pretty helpful 12:37
mls if ins->opsize is 0 for annotations, you might want to change the patch to 12:38
if (ins->opname && *ins->opname && !STREQ(ins->opname, ".annotate"))
that's probably cleaner than the empty block 12:39
whiteknight I'm not accustomed to using words like "cleaner" when dealing with IMCC 12:41
mls lol
success! HLL profiling works! 12:44
benabik ...
Really?
mls++
mls I'm just looking at the profile of the rakudo setting compilation 12:45
whiteknight I'm going to do a little bit more cleanup here, while I'm staring at it 12:46
mls IMCC needs cleanup? How come... 12:47
next tasks for the profiler: 1) implement op profiling 2) split into three runloops 3) cleanup the code 12:49
jnthn mls: Would love to see the profile of the setting compilation :) 12:50
mls uploading...
www4.informatik.uni-erlangen.de/~ml...rof.out.gz 12:54
(could be that the tick percentages are a bit off, as I did some work while the setting compiled) 12:58
jnthn thanks, I look when I get home from $dayjob 12:59
dalek rrot: 00fe23d | Whiteknight++ | compilers/imcc/pbc.c:
Don't increment line numbers on .annotate directives. This fixes some line number disparities and places where the line number is reported as 0. mls++
13:00
13:11 JimmyZ joined
dalek rrot: dd8108e | Whiteknight++ | compilers/imcc/pbc.c:
Some cleanups in the get_code_size function. De-nest, don't test the same things twice, and mark some values as constant in the loop body
13:13
rrot: 3f0c008 | NotFound++ | src/pmc/scheduler.pmc:
use a hash keyed by int in Schecduler task_list to avoid string-int conversions
13:18
13:26 mtk joined 13:30 mtk joined
tadzik atrodo: could isparrotfastyet possibly measure Rakudo performance on the nom branch? 13:30
dalek rrot: 5a7d8a5 | NotFound++ | src/pmc/timer.pmc:
delegate most of Timer init to its super and auto_attrs
13:35
whiteknight msg pmichaud I updated gist.github.com/1198521. For each item I added a section for "upgrade effort for HLLs" and "Benefits for HLLs". These estimates are base-line. For most items we can talk about trading more disruption for more features (or working on a phase-in schedule) 13:48
aloha OK. I'll deliver the message.
whiteknight msg kid51: gist.github.com/1198521
aloha OK. I'll deliver the message.
dalek rrot: d588fc6 | NotFound++ | / (3 files):
delete unused Scheduler cache_valid private PObj flag
13:55
rrot: 4f1d005 | NotFound++ | src/pmc/scheduler.pmc:
delete unused Scheduler 'pending' attribute
14:02
tadzik whiteknight: if I can say, I really like the gist (: 14:06
whiteknight thanks
NotFound I'm not sure I like the idea of lookup exception handler. 14:08
For uses more compilcated that "handle it or let it pass to next level" continuations should be more appropiate. 14:11
whiteknight right, but you have to find something to handle it 14:13
and the user should be able to do the finding
PerlJam whiteknight: there seem to be some unmentioned mild dependency relationships or at least "X should happen before Y".
whiteknight PerlJam: the whole thing is in quasi-chronological order. Things towards the bottom might depend on things towards the top 14:14
NotFound whiteknight: Who is "the user"? The thrower? The handler? The exception?
whiteknight NotFound: the HLL dev
PerlJam whiteknight: gotcha
whiteknight: oh, you even say that in the text.
PerlJam obviously can't read
NotFound whiteknight: ugh... that may lead to yet another problem for language interoperability. 14:15
whiteknight it's okay. There is a lot of information there
NotFound: how? HLLs can subclass CallContext. CallContext does lookup on exception handlers
When I call CallContext.get_exception_handler(ex), it looks up the chain until a handler is found 14:16
and if no handler is found, we exit with an unhandled exception
NotFound whiteknight: so if I call a sub in some HLL my unconditional exception handler can be bypassed?
whiteknight NotFound: if you call a sub in some HLL and it throws an exception, the HLL can handle it before returning to you 14:17
or, if can call up the chain into your context
it
NotFound whiteknight: if it does its own lookup and dispatch, it can dispatch to a previous level in the chain. 14:19
whiteknight NotFound: maybe. I think that's unsafe but you can do that
if you can subclass CallContext, you can do the lookup anywhere you want. Or if you modify the call chain, you can look up anywhere you want. You can do that now 14:20
NotFound Yes, I can write the general assumptions in a lot of ways, but that is no reason to make them easier to break, even inadvertently. 14:22
s/write/break
My main question is: there are real use cases for that feature? 14:23
whiteknight maybe not. I think so. It's just an idea right now
I don't like Parrot doing magic dispatch. The HLL knows the rules about which handler is "best" 14:25
NotFound I think some way of automatic dispatch between handlers in the same context can be helpful, but doing it between different levels can be error prone and hard to debug.
And a serious barrier to interoperability. 14:26
whiteknight I don't think it will be so bad 14:29
NotFound if (interp->scheduler) { ... } else if (interp->scheduler) .... WTF?
whiteknight Another thing it could do is inline exception dispatch, so the JIT can optimize it 14:30
NotFound src/scheduler.c:411
whiteknight awesome
tadzik chuckles
whiteknight when I talk about parrot having a lot of technical debt to pay down, and lots of ugly code to clean, I'm not lying 14:31
JimmyZ agrees 14:34
benabik Random thought: We may want something akin to scala's PartialFunction… a MultiSub that we can ask "can you dispatch with these arguments?" That could be useful for exception handlers if dispatch becomes based on multis… for(eh in handlers) { if(eh.can(ex)) { eh(ex); break; } }
whiteknight benabik: yes, I like that idea 14:39
benabik Although adding something like .can to MultiSub in general isn't a bad plan… It would be nice to not have to use exceptions to discover a call won't dispatch. Our current ExceptionHandler could be a subclass of MultiSub that adds logic for checking severity and type to .can() 14:42
benabik is handwaving...
plobsing_ not all exception dispatch is type-based. Ωη wants identity-based exception dispatch. Perl 6 exceptions can't dispatch based on type until they are in the handler. 14:44
so please do not make that case any slower 14:46
dalek kudo/nom: fc57d1c | moritz++ | src/Perl6/Metamodel/ParrotInterop.pm:
fix line endings in ParrotInterop.pm; no functional changes
14:47
atrodo tadzik> In theory, yes 14:48
NotFound Creating multis and adding elements to them for each try level will not be cheap.
Also, removing them while when descending levels will not be trivial. 14:49
benabik The `eh(ex) if eh.can(ex)` bit would allow the handler system to be more general than just multis. I was commenting based on the "Expose ExceptionHandler lookup and dispatch" bit.
whiteknight plobsing_: that's the thing. Different projects need different types of exception dispatch
the "Parrot has the single magic solution" way of thinking doesn't work
benabik I don't want to say that current MMD is a good idea in any-way-shape-or-form for exceptions. :-/ 14:50
plobsing_ oh, I agree. I just don't want us falling into the assumption that all exception dispatch is type-based
whiteknight NotFound: Creating multis for each will not be cheap, no. But if we treat the context as the multi, we already have it. The context can dispatch based on signature
plobsing_: if we have a way to manually insert handlers and manually invoke them, they can be anything we want: continuations, Subs, MultiSubs, etc 14:51
NotFound I think that the beauty of the exception model is its simplicity: you get an exception, look at it and decide if you handle it or let it pass to the next level. 14:52
plobsing_ NotFound: there's a catch to that - you end up with a huge stack trace indicating all the exception handlers that decided they *weren't* relevant to the exception
NotFound plobsing_: there is no need to do that. 14:53
plobsing_ although, in general, I like the rethrow model
NotFound And you don't need to rethrow to do that, you can use the 'can_handle' method. 14:54
plobsing_ why make two calls when we can make one?
NotFound Because we don't have a rethrow variant that doesn't add things to the backtraces. 14:55
plobsing_ can_handle jumps into eh code. why not just have that code as a preamble on the exception
NotFound: don't have one *yet* 14:56
NotFound +1 to add it.
plobsing_ s/preamble on the exception/preamble on the exception handler body?/
whiteknight if you don't want added backtraces from rethrow, don't look at them. They're separated out in an array 14:57
if you only care about the first level, only look at that level
plobsing_ whiteknight: except that *users* shouldn't need to know about them
whiteknight having the information separate but available is not a problem
plobsing_: and does it hurt them to know if it they explicitly go looking? 14:58
it if*
users don't need to do anything. They don't need to look at backtraces[1]
plobsing_ we're printing it, implying that they should look at it
whiteknight we don't need to print it, if that's the problem 14:59
NotFound whiteknight: the problem is that it forces a difference between use of can_handle and us of catch/rethrow to decide if to pass the exception.
whiteknight: the level that should make that decision has no acess to the information needed to know what's the case. 15:00
whiteknight I don't think I understand that
NotFound whiteknight: I can set up a catch all handler, in it look at the code, severity, type... whatever, and rethrow if I decide I shouldn't handle it. 15:01
And there is no reason to put more info in the backtrace in this case than if I were using the can_handle method. 15:02
whiteknight okay, I see what you are saying. you want to keep the backtrace from before the rethrow, not the one after it? 15:03
NotFound Yes, the ability to decide what to do.
whiteknight All the more reason not to use magic throw/rethrow ops. 15:04
create an exception. Ask the CallContext for a suitable handler, and call handler(ex)
that way you can create and manipulate the exception as you see fit without magic
mls (for rakudo, we need to catch all non-CONTROL exceptions and run perl6 code to decide if we need to rethrow or not) 15:05
NotFound whiteknight: Crate a new exception in the handler? 15:06
whiteknight NotFound: You could. Or, you could pass on the original exception without updating the backtrace
once you create it and it has a backtrace, you don't need to modify it anymore
or, you can modify it if you want 15:07
benabik When do backtraces get added to exceptions? 15:08
Creation? Throw op?
whiteknight in the throw op, currently
I think
the backtrace gets added when we associate the exception with a continuation, I think. It's the backtrace of the resume continuation
mls no 15:09
whiteknight I may be mis-remembering it
mls continuation is extra, U think
U -> I
die_ii used to have no continuation
benabik mls: It does now, identical to die_s. But those are exceptions created in C. 15:10
NotFound whiteknight: I don't mind if is an opcode, a method in the context or whatever, but having opcodes for the most common usages will be good for code size.
benabik Keep the simple simple, make the complex possible.
whiteknight github.com/parrot/parrot/blob/mast...ug.c#L3575 15:11
it's the exception context, not the exception continuation
mls ah, the backtrace method uses wither the continuation or the "thrower", i.e. the context at throw time
whiteknight right 15:13
15:13 aloha joined
dalek rrot: fb7055f | NotFound++ | src/scheduler.c:
delete nonsensical wrong check in cx_delete_task
15:15
plobsing_ if the exception handler is called unconditionally (and rethrows if not applicable), we wouldn't need to manage arrays of hanlders. the handler list would be implicit in the linked-list of contexts 15:20
whiteknight that represents a huge change at the PIR level 15:21
not that we can't do it, but we have to weigh the effort against the benefits
NotFound The handler list is in the list of context, but its elements are lists. 15:22
plobsing_ not necessarily. the old ExceptionHandler could have a special invoke vtable. or dispatch to some common built-in opcodes
15:22 bacek_at_work joined
whiteknight at the moment, exception handlers are just continuations pointing to labels. They don't have a defined "end" point 15:22
plobsing_ why would they need that? 15:23
NotFound A sub can have several try blocks, separated, nested, or both. 15:24
whiteknight plobsing_: how else do you rethrow if needed, if the PIR code doesn't change? 15:25
I'm not making it past the hand waving here 15:26
plobsing_ whiteknight: the only time an ExceptionHandler (as we currently know it) would need to rethrow implicitly under the new model is to handle the type-check functionality
that happens up-front, not at the end
whiteknight right, but if we pass the exception to every handler, and expect the handlers to rethrow if it doesn't pan out, that means the code of every user handler needs to be changed 15:27
plobsing_ NotFound: admitedly, that is a problem. but the HLL compiler knows about this (it is static information), and can deal with it appropriately
benabik whiteknight: If ExceptionHandler does the check/rethrow prior to handing off to the user code, I don't think we'd need to change user code. 15:28
plobsing_ whiteknight: no it doesn't. what I am suggesting is that ExceptionHandler be kept around for compat. it would jump to its own code first to do typechecks.
NotFound plobsing_: yes, but a way that does not complicate too much code generation will be nice.
plobsing_ NotFound: it shouldn't be too complicated 15:29
dalek rrot: 2541b9c | NotFound++ | t/op/exceptions.t:
declare external class to avoid a warning
15:32
plobsing_ NotFound: nested exception-handlers aren't that common, are they? 15:33
whiteknight exception handlers are typically a spaghetti mess of labels. Who knows how they are commonly arranged? 15:34
plobsing_ whiteknight: I'm talking at the HLL-level, which is typically structured
NotFound plobsing_: maybe not, but with the current way I don't need to care about that in winxed, the code generation is the same.
plobsing_ NotFound: this is true. but I'll posit it is worthwhile. not managing a list of eh PMCs means not doing vtable calls on an RPA of eh PMCs anytime we want to push, pop, or call exception handlers 15:37
15:38 darbelo joined
plobsing_ pointer follows are much cheaper than vtable calls 15:38
NotFound A multiple ExceptionHandler that manages a list of start and end of try blocks, and maybe its corresponding handling labels, can be doable. 15:39
But that probably doesn't decrement too much the number of gcables.
plobsing_ NotFound: I'd say it might. if the block gets called a lot, 1 gcable vs 3 is much better. 15:40
NotFound Maybe we can create it at compile time and make it constant.
plobsing_ NotFound: that doesn't handle recursion
hmmm... maybe it can. interesting idea. 15:41
NotFound plobsing_: the try/handling date can be constant, and added to the EH continuation at runtime.
s/date/data
Or it can be associated to the sub, and the EH look for it from the context. 15:43
plobsing_ that could work too 15:44
so this is a solvable issue. are there any other issues with this approach?
NotFound Also, the pushing and handling of that kind of handler can be treated diferently of the current EH, avoiding the list iteration, and both ways can coexist. 15:47
(provided that using both in the same Sub will not be supported)
Someone is depending on the precision of Timer for something? 15:51
I'm going to change it to avoid cloning on repeating, but the change will have some impact. 15:53
plobsing_ NotFound: not using both in the same sub doesn't fall under dep policy (since one of the things is new) 15:57
NotFound plobsing_: yes, as long as we don't change the old way we are safe in that regard.
plobsing_ or the replacement (since nothing can have been using new features
NotFound We can schedule for deprecation the old way later. 15:58
whiteknight I would be very surprised if people were using Timer much. There are some obvious bugs in that system that I found that nobody else had ever noticed 16:00
besides the few tests, I can't imagine Timers are used for much
NotFound The cloning is one of the bugs. You can't stop a Timer after its first iteration because the PMC you have is no more the active one. 16:01
whiteknight right 16:02
better question would be to ask if people use timers. If not, maybe delete them
we'll be able to do it better when we have threads and green threads 16:03
NotFound Maybe, but will be easier to clean up the scheduler if it becomes a bit less labyrinth.
whiteknight I don't care either way. Timers aren't doing any harm, they're just ugly and unusable 16:04
minimally usable 16:05
16:07 darbelo_ joined
dalek rrot: be307fc | NotFound++ | src/scheduler.c:
change handling of timers in the scheduler to avoid cloning on repeating.

no guarantees about it.
16:07
NotFound Done. Feel free to revert if somenone gets upset. 16:08
16:17 davidfetter joined
mls subprof now supports subprof_sub, subprof_hll, subprof_ops 16:34
JimmyZ couldn't anything more, except mls++ 16:35
mls (spoke too soon, it segfaults in some cases. debugging...) 16:36
16:47 darbelo joined
dalek rrot: 60b854a | NotFound++ | t/pmc/timer.t:
test stop a repeating Timer
16:48
mls hmm, seems like Parrot_sub_get_line_from_pc can go into an endless loop 16:58
or it's too slow for my purposes 16:59
testing...
probably too slow... rewriting... 17:00
plobsing_ mls: linear scan is too slow. plus ADD_OP_VAR_PART is stupid slow 17:23
mls and I called it for every op...
plobsing_ mls: rewritting your code, or rewriting the scan? 17:24
mls my code
plobsing_ no crazy good patches for parrot? boo! 17:26
although I'm not sure the code as it stands is ammenable to improvement 17:27
variadic ops make anything beyond linear scan a pipe dream
mls I don't think it's such a critical function. I just misused it 17:28
anyway, seems like all three profiling types work
enough hacking for today 17:29
plobsing_ that's the way the debug segment is intended to be used. if the intended usage is inefficient, we need to change it.
perhaps we could move that info to the annotations segment and drop the debug segment 17:30
annotation lookup is O(log n)
not O(n)
mls I needed the line info for every op in the sub, that's why it was so slow
it's not meant to be called that often 17:31
(or that way)
plobsing_ mls: there's only one other place in the code that uses that function - the profiling runcore
it had the same perf problem, so it hacked around it by cacheing the pc
mls Isn't it also used for backtrace generation?
plobsing_ apparently not 17:32
I acked the entire source
mls I think there's a "get context info" function which has a copy of the code
searching...
plobsing_ yeah, I'm seeing that too. we should probably unify those. 17:33
the offending function is src/sub.c:Parrot_sub_context_get_info 17:34
mls ah yes. similar but different ;)
plobsing_ mls: we can make this function immediately faster by only scanning from the beginning of the sub rather than the beginning of the seg. that should give you a nice perf boost. possibly enough to avoid the rewrite 17:36
if you are profiling rakudo, the segment is rather large, but the subs are usually fairly small
mls yes, that should help a bit. Thanks. 17:37
do we know the "debug offset" of the beginning of a sub? 17:38
plobsing_ sub->start_offs
mls that's the opcode offset, not the "debug offset" 17:39
plobsing_ oh shoot, no. you're right. we don't know how many ops come before.
wow this datastructure sucks
mls ;)
It's optimized for size, not speed ;) 17:40
plobsing_ mls: if you've ever looked at the code managing packfiles/pbc, you'd know size was not a top priority.
at least we dropped the 'fixup' segment.
mls oh well. 17:41
NotFound I'm going to trademark "Optimized for hysterical laughs"
mls anyway, I gotta go home. talk to you tomorrow.
plobsing_ hysterical? more like manic.
17:47 contingencyplan joined
cotto_work ~~ 17:53
18:07 preflex joined
benabik o/ 18:09
cotto_work hi benabik 18:16
18:20 bacek_at_work joined
pmichaud_ whiteknight: I've updated your gist with notes about benefit/impact to Rakudo: gist.github.com/1201282 18:22
cotto_work I notice a pattern. 18:24
whiteknight pmichaud_: the changes to Rakudo for the proposed PCC refactors is nil. I've already considered your custom binding code
pmichaud_ whiteknight: the nom code or the one in master? 18:25
whiteknight pmichaud_: either
pmichaud_ either way, I'll accept it as Nil and let jnthn say if it's otherwise
whiteknight okay
I'll work with him to make sure it stays nil 18:26
18:26 aloha joined
pmichaud_ I don't care if the impact is there, though. 18:26
improving invoke performance far outweighs the need for compatibility
I can't express how much "speed" concerns outweigh any other concern we might have.
whiteknight okay
pmichaud_ updated impact cost to be "nil" for that one. 18:27
whiteknight almost all the changes I've proposed in that gist are internal-only. C level architecture and APIs. Not that we can't or won't change PIR (it certainly has plenty of problems), but the items in this gist aren't targeted towards it
C-level compatibility problems have been by far the most hindering 18:28
18:29 dmalcolm joined
whiteknight pmichaud_: It's funny that you say sandboxing has zero priority. I got started thinking about it because I was specifically asked to by rakudo devs 18:29
it is on request from rakudo devs that it even appears on the list
pmichaud_ let me check 18:30
whiteknight I think it was the eval bot, and the ability to sandbox executing scripts to not be able to monkey with certain directories 18:32
or, that was the specific example mentioned
pmichaud_ yeah, but I'm not sure that makes it a high priority for us. I'm polling #perl6 now.
actually, I'm certain that it's *not* a high priority for us. 18:33
plobsing_ for specific platforms like that, can't you just set up something with OS sandboxing?
jnthn "Far better interoperability between 6model and Class/Object for systems that want to use both." - urgh...the idea was to kill Class/Object? But also, if you try and do anything to 6model to make it look more like those, I'd rather you didn't put it in core Parrot...
whiteknight jnthn: "kill" is a relative word. They will die from the inside and be replaced with shiney 6model-based guts 18:34
Object and SixModelObject are going to become one
jnthn Well, if you're going to do 6model right, PMCs need to be subsumed by it too.
whiteknight Class may hang around for backwards compatibility, be repurposed, or be deleted eventually 18:35
pmichaud_ updated.
whiteknight jnthn: right. There is a lot of work to make it right
jnthn And if you're not going to do that, I don't think there's so much win to be had by bringing it core.
whiteknight jnthn: the win for Rakudo is slightly different from the win for Parrot
jnthn True. 18:36
whiteknight Parrot gets to stop having a pile of garbage as its object model
18:36 jsut joined
whiteknight If we can make win for Rakudo in the process, all the better 18:36
jnthn AIO - yes, plese. :)
*please
whiteknight Ultimately, the changes we're going to need (vtables especially) are going to be pretty big and disruptive. Most of what Parrot has is going to need to be replaced 18:37
jnthn "We need to stop referring to Class objects by string name"
+1.
whiteknight so the more Rakudo and NQP use 6model features and the less it uses other stuff, the better
jnthn 6model core doesn't actually know how to do string isa.
whiteknight jnthn: and the rest of the system won't for much longer either
jnthn Yeah, though it's quite endemic in Parrot at the moment. 18:38
NotFound Changing the class model entirely and keeping backwards compatibility high looks a bit contradictory to me.
jnthn Yeah, that ain't gonna happen.
whiteknight NotFound: We're not keeping a lot of backwards compatbility
at least not for the object model, Object/Class, and related stuff
the class registry
So long as Rakudo isn't using any of that, we're much more inclined to throw the baby out with the bathwater 18:39
if Rakudo were using it, we would have to walk on eggshells
NotFound whiteknight: I doubt that we can change the Class model in one shoot without breaking lots of things, even for rakudo.
jnthn Well, once NQP and the stack it's atop of is fully 6model based, it'll be less painful. 18:40
NotFound Once...
jnthn For now, yes, PAST and so forth are using Parrot classes since.
NotFound: That's very likely within the next couple of months.
NotFound: Because not doing that blocks other things that matter to us on the Rakudo side.
(e.g. inliing multi-dispatch candidates...) 18:41
pmichaud_ I need to grab some lunch -- will read backscroll a bit later 18:43
18:43 darbelo joined, chromatic joined
NotFound Anyway, I think that coexistence for a while will be far easier than One Big Change. 18:43
chromatic Would you be happier if Parrot merely provided a garbage collector and perhaps invoke? 18:44
NotFound Me? No. 18:45
chromatic I meant jnthn and pmichaud_. 18:46
Or if you're not a fan of synecdoche, Rakudo.
jnthn chromatic: Well, and something like the 6model core, and some kind of JIT, and threads, and some kind of concurrency primitives (like CAS, which you can build other stuff from)...and had some vague notion of a type system. I suspect Parrot's approach and what I fear a VM should look like these days are too far apart to really be reconciled.
gah, fail
benabik cotto_work: Sorry, got pulled off by work very very quickly after sitting down. Hi!
jnthn that fear ended up in the wrong place :)
s/suspect/fear/ 18:47
chromatic I see.
NotFound At least Camelia is always happy.
jnthn chromatic: If anything looks hopeful to me, it's m0.
chromatic I'm glad to hear that. 18:48
whiteknight the parrot approach in the past has not been the right one. Unfortunately, you can't turn this ship on a dime 18:49
chromatic Especially if Rakudo keeps saying "Don't do that!" to everything that will help turn the Parrot ship.
Sorry, I overspeak.
ALMOST everything.
whiteknight We're more nimble without the deprecation policy, but we still can't suddenly make things right. Making things right means breaking all the old code that relies on it being wrong 18:50
and that's a misfortunately large amount of code
And if we said "Stick with 3.6 for a few months. Parrot is going to disappear into a hole for a while and come back with something new and working correctly", the upgrade shock would be huge 18:51
cotto_work I'm much less apprehensive about the "keep Rakudo and other HLLs happy" than "don't break anything without proper notice" 18:52
NotFound Tell them to not be happy without a proper notice. 18:53
(if they see some aceptable break, I mean) 18:54
18:57 darbelo_ joined 18:59 alester joined
dukeleto Parrot has no focus. If we do a huge set of refactors without a new focus, we will get what we have always gotten. 18:59
chromatic Parrot has no focus because Rakudo won't allow it to have a focus. 19:00
dukeleto chromatic: i agree.
dukeleto writes up some painful truths to parrot-dev
PerlJam chromatic: Are you speaking of now, or of the past? or both? 19:01
chromatic Now.
Maybe the past, but I'm not interested in arguing about things past.
dukeleto The past is gone, and the more time Parrot and Rakudo spend bitterly complaining about it, the less relevant both projects become. 19:03
chromatic Yep.
PerlJam dukeleto++ 19:04
plobsing_ PerlJam: it seems as though any time parrot takes the initiative, rakudo says "stop, we don't want this", or "we don't want this yet, so don't do it"
chromatic Yep. 19:05
And if you note the big speed improvements in Rakudo over the past week, they've all been from Rakudo generating better code because Rakudo knows better what it needs at the appropriate layer.
cotto_work dukeleto++ 19:06
chromatic Modulo a GC tweak, which is still probably the wrong approach, but at least it's less wrong.
Parrot can't make Rakudo go fast when Rakudo generates inefficient code. 19:07
whiteknight we're going to try to move to a precise GC. I think we can do that relatively quickly
chromatic I have qualms about that, but it's worth testing.
PerlJam plobsing_: this is why I suggested on #ps yesterday that parrot devs write down all the things they want to do with parrot (for whatever reasons), and rakudo devs write down the things they want to do with rakudo and then get together to look for (or work out) some sort of alignment.
whiteknight which qualms?
PerlJam plobsing_: at least that way the impedance mismatch should be lessened. 19:08
chromatic As long as external projects have C code, they'll have to hew very carefully to the precision strategy to avoid leaving things where the GC can't find them (because they're anchored on a stack or present in a register).
plobsing_ chromatic: we already have that problem (or a very similar one) with generational gc 19:09
chromatic Saying "You need these barriers" is different from "Don't write code where an optimizing compiler will do the wrong thing."
plobsing_ fair enough
chromatic It's a matter of degree, but at least one you can analyze statically. Mostl. 19:10
whiteknight we've never made any promises that writing extensions in C won't be painful or difficult to maintain
chromatic Ha, what about the debate over whether the deprecation policy extended to struct member ordering? 19:11
plobsing_ I'd like to leverage some static analysis tool to be able to detect all the places in core that need to be fixed up. I see no reason why that tool cannot also be used by extenders.
whiteknight chromatic: historical and misguided
plobsing_ the deprecation policy lead to a lot of dysfunction 19:12
chromatic Yep, Parrot needs the right to be wrong.
whiteknight plobsing_: and it preserved a lot of preexisting dysfunction. I've never liked that policy
plobsing_ I'm talking cultural dysfunction, not just technical dysfunction 19:13
whiteknight ah yes, that too
plobsing_ that struct debate is one that should have never happened
dukeleto plobsing_: what is the "struct debate" ? 19:14
plobsing_ struct ordering under dep policy or not
whiteknight it's a weird dichotomy to be doing things like agile-ish weekly standup meetings, but then going around the room and nobody can work on anything important until the next supported release
atrodo chromatic++
whiteknight or people choose not to work on important tasks because of the deprecation headaches involved
or people work on important things, and the branch has to sit for 5 months, and then it's almost too bitrotten to merge 19:15
cutting it down to a 3 month wait was hardly the solution
chromatic Yes, but removing things without a viable replacement is not the solution either. The middle ground is important. 19:16
dalek nxed: 2db4057 | NotFound++ | winxedst1.winxed:
fix class operator for mixed HLL case:
benabik There's a reason Lua forces all the access to lua tables to be through the API is so that it can do memory management correctly. Returning raw object pointers to external C code is fraught with danger.
For ops, we can use opsc to munge PMC * variables to register them correctly… But for extend/embed we need to be very careful. 19:17
(re: precise GC)
whiteknight chromatic: We couldn't make viable replacements if they required changes to supported interfaces. And nobody looks at changes anyway until the day after a supported release when branches come crashing in
NotFound Returning raw pointers doesn't need to be bad, as long as they are really used as raw. 19:18
That is, just passing them to the appropiate functions.
atrodo NotFound> You mean treating them as opaque pointers? 19:19
NotFound atrodo: yes
benabik NotFound: opaque pointers that can't be trusted to continue to exist.
NotFound benabik: bad != not easy 19:20
benabik NotFound: If any C user stores them across a GC run without registering it, pop goes the segfault. 19:21
NotFound: I'd call that bad.
NotFound benabik: then register it
Or register a Hash or a PMC Array and store all your objects here. 19:23
benabik NotFound: As I said, careful. We can ensure it by registering any PMC we return through the API. C users can get memory leaks if they don't release it, but that's better than segfault.
NotFound: I'm not saying impossible, just that we have to be careful.
pmichaud_ back from lunch, briefly
NotFound benabik: people embeding ot extending in C should know what they are doing. No one can prevent every possible misuse. 19:25
pmichaud_ 19:07 <chromatic> Parrot can't make Rakudo go fast when Rakudo generates inefficient code. 19:26
NotFound We can provide API functions that doesn't take nor return GCables for a lot of cases, though.
pmichaud_ Rakudo generates more efficient code now *because it can*
previously it couldn't do that because the underlying object model and other core components wouldn't allow it
19:10 <whiteknight> we've never made any promises that writing extensions in C won't be painful or difficult to maintain 19:28
benabik NotFound: Is GC stopped when we're in C? If not, then every time you get a PMC* back from the API, there's a chance GC will eat it before you can register it. 19:29
pmichaud_ what's interesting is that Parrot's position has often seemed to be an expectation that HLLs would write their own custom PMCs, binders, etc. to provide the functionality Parrot didn't provide. This is what Rakudo has done.
So I don't think we can entirely blame Rakudo for having done what Parrot's design said it was intended to do.
whiteknight pmichaud_: that position predates me. I've never been one to claim that HLL devs need to write more stuff in C 19:30
pmichaud_ whiteknight: I guarantee that was Parrot's original design expectation, and it was carried through to the implementation of PCC
chromatic I'm fully comfortable blaming Rakudo for writing piles of awful code that pokes into Parrot's guts in bad ways and blaming Parrot for the mess.
pmichaud_ chromatic: Please identify at least one area where we've blamed Parrot for breakages when we've poked into Parrot guts. You still haven't identified such an instance, and I wish you would stop bring up that strawman. 19:31
whiteknight pmichaud_: the PCC refactors I'm proposing now go in the other direction. Do less crap in C code, expose more capabilities to PIR code
NotFound benabik: unless we get a threaded GC, you can't get a GC run until you pass control to parrot.
chromatic Half a dozen memory leaks and segfaults I fixed in Rakudo. git log --author chromatic in Rakudo for a list. 19:32
pmichaud_ chromatic: but did we blame parrot for those?
chromatic Yep.
pmichaud_ in the sense of "this breaks the deprecation policy"? 19:33
dukeleto wonders if he will be tarred and feathered for his next parrot-dev post
chromatic In the sense of "Rakudo's crap doesn't stink"?
pmichaud_ in the sense of "parrot shouldn't have made those changes"?
benabik starts boiling tar.
19:33 jnthn left
pmichaud_ you're claiming that we're wanting parrot to not change its internal. I'd like to see proof of that. 19:33
atrodo dukeleto> On the bright side, you'll have enough materials for a new roof and a nice pillow
chromatic I'm claiming that Rakudo has free reign to break everything and Parrot gets whipped every time there's a hint of change. 19:34
pmichaud_ I disagree with that claim.
chromatic I'm not surprised.
pmichaud_ I'm concerned about continued changes that don't really help Rakudo. (more) 19:35
dukeleto pmichaud_: what is the current status on Rakudo's research for alternate VM backends?
pmichaud_ the point of my comments to whiteknight's gist isn't to say "don't do these things", but rather to point out how Parrot's priorities (and perception of HLL needs) are so different from Rakudo's perceptions of its needs
NotFound The search for alternate VMs for rakudo is not a parrot concern. 19:37
pmichaud_ dukeleto: we have a prototype implementation of 6model on CLR, and a fledgling prototype (not really complete) on the jvm.
dukeleto NotFound: yes it is.
NotFound Nor for me.
chromatic If you want speed, please look at my year old wiki page about speed problems and proposed solutions for Rakudo and Parrot.
NotFound s/Nor/Not 19:38
pmichaud_ so, the design of nqp has been based on the knowledge gained from the CLR 6model implementation
benabik whiteknight: I'd like to add "fix lexicals" to a list of things Parrot should do. Searching for lexicals by string is just as bad as class names. And separating lexpads from subs should allow for something better than creating piles of subs. If inner scopes have the same context, they can easily refer to lexicals directly by register # 19:39
whiteknight benabik: that's a feature addition, not really a major fix
but yes, it would be beneficial
pmichaud_ we've introduced the nqp:: pseudo-opcode space so that we can identify those opcodes that are core to nqp and rakudo
s/opcodes/functions
and that tells us what we need our target vms to provide 19:40
brb, kid pickup
benabik whiteknight: The nested scopes are a feature, but lexicals not by string is IMHO a fix.
chromatic Recursive lexical lookup by string name is a bug. benabik is completely right. 19:41
bubaflub chromatic: i'd like to work on that list that you have on the trac wiki but would need some pointers 19:42
chromatic The biggest gain is probably vtable overrides. 19:43
NotFound Accesing lexicals by number will be probably doable with some pir sugar and a bit of changes.
chromatic I'm not sure PIR needs to change for lexical index access. 19:44
NotFound No, but it may make easier the transition. 19:45
chromatic It's really a compiler optimization.
benabik find_lex_p_sc that retrieve/stores based on string constant # instead of value…
It would still have to be under the value to for non-constant lookup.
chromatic If lexical scopes are statically decidable (and they are), the compiler can emit the appropriate find_lex to look up the appropriate slot in the appropriate scope.
NotFound The lexical is stored in a register in some context, we just need a quick way to access that register. 19:46
chromatic Lexicals are stored in contexts? That doesn't sound right.
NotFound Its values.
benabik Lexicals are stored in registers.
whiteknight lexical name->register mappings are stored in the LexPad 19:47
19:47 ambs joined
whiteknight or LexInfo 19:47
one of the two
benabik Or both. :-/
chromatic What we really need is some notion of scope which is a compile-time constant entity.
dukeleto throws his hat into the ring of fire (also known as parrot-dev)
chromatic "Parrot needs to assume that Rakudo will port themselves to another VM or write their own." 19:51
Yep.
That's why I stopped committing.
moritz to rakudo? or to parrot? 19:52
chromatic Both.
19:54 bluescreen joined
pmichaud_ I agree with the statement also. 19:54
chromatic That answers the "What does Rakudo want?" question. 19:56
pmichaud_ ...with what answer? 19:57
chromatic "Not Parrot."
pmichaud_ False.
Coke ho, chromatic
pmichaud_ We want whatever VM can give us the best Rakudo.
chromatic Coke.
pmichaud_ although I will admit that Parrot as it sits today doesn't fully meet our needs. 19:58
but then, neither do any of the other VMs at present
chromatic Everyone on this channel admits that.
As I see it, you have three choices.
NotFound But why "parrot needs to assume"? Rakudo can target whatever want without any assumption from parrot land.
chromatic 1) Write your own VM. We'll see you in five years.
2) Port to another VM. Good luck getting code in them. 19:59
3) Help Parrot get better. Most everyone on this channel wants that.
pmichaud_ I'm here because of 3. What I've been trying to say is that what Parrot thinks we need isn't what we think we need.
Apparently I'm not doing that well.
chromatic You've made that abundantly clear.
What we're all trying to get you to tell us is, in specific, what Rakudo needs. 20:00
pmichaud_ Faster PCC.
chromatic That means getting rid of the binder.
pmichaud_ Fine.
No problem. Break the binder all you want, we'll adapt.
chromatic No, DELETE the binder.
pmichaud_ Delete the binder. We'll adapt.
We've always agreed to adapt in places where performance will improve, and even sometimes where it won't. 20:01
chromatic We are not asking you to adapt.
pmichaud_ When the new GC came in, we didn't complain about having to add write barriers outside the deprecation policy, we gladly added them.
If you're complaining about Rakudo "poking into Parrot guts", that sounds to me like "asking to adapt".
Or, you're asking us to stop, when we don't see an alternative at present.
chromatic Then please allow me to attempt to rephrase to be more precise.
pmichaud_ absolutely.
chromatic I think the best possible approach is for Parrot to provide code which makes Rakudo's binder all or mostly irrelevant, and which removes the need for any and all C code. 20:02
at least on the part of Rakudo
Coke wonders if he's the only one imaging this as a lot of yelling.
pmichaud_ Coke: no, you're not.
Coke well, you two are doing a great job still talking, then. I would have walked by now. ;) 20:03
chromatic++ pmichaud++
chromatic To make that binder irrelevant or at least smaller, Parrot needs to know what Rakudo's binder does, what it doesn't do, and where the mismatches are between it and Parrot.
benabik Coke: I have memories of a discussion like this… It wasn't _quite_ yelling...
pmichaud_ At the moment, I suspect the Rakudo's binder is intimately tied to 6model.
Let me check with jnthn.
chromatic Parrot also needs to provide extension possibilities for the binder -- whether delegation, data-driven custom initialization, or something else -- which do not require the presence of C code in Rakudo. 20:04
NotFound Acces to lexicals by number can just need a bunch of ..._keyed_int vtable functions to LexPad
pmichaud_ Coke: For my part, I continue to talk with chromatic++ because his past actions have convinced me he only has good intentions for what he says.
moritz NotFound: aren't vtables too slow to be used excessively in the binder? 20:05
pmichaud_ and that he has his reasons, which are valid more often than not.
chromatic And I likewise assume good faith for pmichaud_.
pmichaud_ vtables are slow only if they call into PIR
vtables into C are fastest
moritz ok
NotFound moritz: You mean slower than using string keyed access *and* LexPad vtables?
pmichaud_ jnthn appears to be unavailable at the moment. However, I will get an answer to the question. But if Rakudo's binder is indeed tied to 6model, then we will either need to rethink it for Parrot or bring 6model in as Parrot's core type 20:06
I suspect it's tied to 6model because the binder has to know a fair bit about types. 20:07
chromatic I've been assuming that 6model is essential to Parrot's core types.
pmichaud_ That's a reasonable assumption, but see earlier discussion about keeping Class/Object compatibility.
chromatic I don't know anyone who will mourn the loss of Class/Object for long. 20:08
NotFound Not for long, but a transition period.
chromatic vtable overrides in PIR are slow because their lookup requires recursive string lookup and because they require nested runloops.
pmichaud_ and the only way that a HLL can affect vtables is by using PIR or with C code
so, a HLL is left with the choice of doing it in C, or doing it in (3000x slower) PIR 20:09
chromatic Unless vtable behavior were parametric with regard to (constant) metadata.
pmichaud_ yes, a change in Parrot's implementation would help there. :)
chromatic Certainly moving PMCs to M0 instead of C will be a big help, but that's further away.
pmichaud_ I'm merely speaking of the choices we have to day, not what "might be". Changing vtable semantics has been largely considered a "too hard to deal with now" issue in Parrot, from my perspective. 20:10
i.e., nobody's seriously proposed it
(and it's not been my position to propose it)
chromatic I'm not debating whether the binder is necessary or appropriate right now in Rakudo, because it clearly is. I'm saying I want it to go away because it's not necessary.
pmichaud_ I understand. 20:11
chromatic WHEN it's not necessary, that is.
I've also pondered a change to the Parrot runloop such that dispatching to a PIR vtable would destructure into a regular method call and resume appropriately, but that's not easy. 20:12
Maybe if I could clone plobsing_ and NotFound.
pmichaud_ I know this is going to come across wrongly, but...
NotFound Changing vtable overrides is hard because they are C functions and are called from C. No way to set up a return frame and no get_results to retrieve it.
pmichaud_ actually, never mind (more) 20:13
chromatic If we're already in PIR and don't have to go C->PIR->C->PIR, we can do much better.
I'm talking about munging VTABLE_whatever inside an op body.
pmichaud_ I was going to say that moving the binder from Rakudo into Parrot indeed improves things a lot, but it doesn't come across as a win from what Rakudo does now. But if it leads to faster PCC, it's definitely a win.
chromatic Putting dispatch into one place (and not crossing lots of language boundaries) to do it means lots more optimization possibilities and lots less fragile code in Rakudo. 20:14
pmichaud_ from a Rakudo perspective, we feel like changes have been put "on hold" a bit because "they'll be address in M0"
chromatic Where "fragile" means "highly susceptible to Parrot changes".
pmichaud_ if the deprecation policy is gone, I'm much less worried about fragile 20:15
chromatic Munging VTABLE_whatever inside an op body probably means writing an inside out Duff's device with at least two separate parts in two separate places.
pmichaud_ when we have to wait 3+ months for things to roll in/out of Parrot, that becomes intolerable from a development timeline perspective. If it's O(month), it's really no problem. 20:16
chromatic Provided that notification is far more careful and reimplementations are in place before removal, I think you'll find the results far more tolerable.
Only recently has Parrot begun to manage feature branch development effectively. 20:17
whiteknight I really like the 6model way of doing things. Scrap most of the vtables and have 6model routines to return invokables that can be invoked directly from the runloop
chromatic Vtables are more like trampoliney things?
whiteknight vtable overrides are only expensive when we need to support C vtables and (much more common) HLL vtables
if they are all running on top of Parrot, we don't need the expensive nested runloops 20:18
pmichaud_ From a Perl 6 perspective, Parrot vtables are outside-in
i.e., they expose the interface backwards from what we really need
whiteknight pmichaud_: from our perspective as well
chromatic You still have to deal with the case of calling a vtable from within code called from a vtable.
... which is silly in a system supposedly built on CPS.
whiteknight chromatic: If it's just an invoke, return mechanisms and call chains bring us back to where we need to be
chromatic Depends how far you've chained since the initial invoke. 20:19
whiteknight are you talking about recursion limits?
pmichaud_ anyway, I have to take a break for a while. To reiterate my earlier point -- my comments to whiteknight's gist are not intended to say "don't make Parrot changes at all". They simply say "these changes help or hurt us to this extent".
whiteknight pmichaud_: Thanks for that. I appreciate the priority info
pmichaud_ s/us/Rakudo/
whiteknight it helps inform what to work on next
chromatic pmichaud_, can you suggest a concrete improvement that Parrot could work on next? Something more specific than "PCC should be faster" would be useful. 20:20
whiteknight chromatic; I think I have PCC figured out anyway, so we can work on that too
chromatic Not recursion limits, but think of what VTABLE_get_pmc_keyed_str eventually has to do and how many C calls it makes.
pmichaud_ I think I answered this question recently; let me see if I can dig up the post. 20:21
whiteknight chromatic: I don't think it's going to get as hairy as you suggest 20:23
chromatic I hope you're right. 20:24
pmichaud_ I suspect the other area of improvement would be in better profiling tools.
with mls++'s sub-profiler branch we were able to finally profile CORE.setting this past week 20:25
and that yielded a lot of useful information. also, the GC speed improvement (20%+ overall improvement) came from doing profiling
cotto_work I'm excited to understand that code well enough to either maintain it or steal the relevant bits into the profiling runcore as the new default behavior. 20:26
pmichaud_ the faster that can happen, the better
as it is now, the branch is well behind other important changes to master
chromatic Did I see a bugfix in packfiles to improve line numbers in debugging?
cotto_work the mls/sub-profiling branch? I can sync with master if needed.
pmichaud_ sync with master +1 . merge to master soon +2 :) 20:27
cotto_work have you seen the code?
pmichaud_ I'm sure it's not up to standard, yes.
I'm just saying that the sooner it gets into master, the more likely it is to be used/usable and maintained :)
cotto_work I'm thinking vice versa
but I want both as soon as we can manage
chromatic Merge now, clean up later? 20:28
pmichaud_ right now if I want to profile, I have to make sure that the branch is relatively up-to-date with master, build a special parrot instance from the branch, then rebuild nqp+rakudo from that branch
whiteknight +1 to merge. Get more eyes on it. Also, give mls a commit bit or three
cotto_work look at the code and then tell me to merge 20:29
Coke +1 on getting mls a commit bit.
cotto_work github.com/mlschroe/parrot/blob/ml.../subprof.c
chromatic How hard would it be to add GC stats to the code?
whiteknight has to to home now. I'll stare at it tonight
Coke mls, have you interest in getting a commit bit? if so, submit a CLA, kthanks.
pmichaud_ I'm planning to add gc stats into --stagestats of HLL::Compiler
it's very coarse grained 20:30
chromatic Sub-level will be more useful.
pmichaud_ but might be better than nothing
cotto_work I would like to get mls a commit bit
pmichaud_ yes, Sub-level would be hugely useful.
cotto_work As gnarly as the code is, he's obviously a competent coder.
benabik +1 to mls commit bit. He made IMCC line numbers better. Anyone who does that gets my approval. :-D
pmichaud_ anyway, it seems like GC stats would not be hard to add to the mls profiler
chromatic pmichaud_, one thing I did note: that optimization you did for reusing registers in initialization code (I think it was imports) is something you can't rely on a register allocator to do. 20:31
Coke by that logic, you should give chromatic a commit bit!
pmichaud_ simply count the number of runs at each sub invoke
chromatic: agreed
chromatic Certainly an O(n^2) allocator is awful, but even an O(n) allocator gets bad when your basic blocks have n > 1000 registers to allocate.
If you know of other places where generated code has large basic blocks and lots of registers used, those are obvious candidates for a similar optimization. 20:32
pmichaud_ it wasn't a known pain point, because we never had such large subs before.
that optimization is now in all of our code
chromatic Okay good. I thought I'd seen that pattern before in generated code and wanted to bring it up.
pmichaud_ register reuse occurs at the statement level
so, the end of a statement marks "release all temporaries" (except the one used to return a value) here.
chromatic That's the kind of optimization I mention that has to take place on the language semantics level, because there's just not enough information at the opcode level to do it right. 20:33
pmichaud_ no argument there.
but it wasn't until we had profiling on the compilation time that it showed itself to be an issue
chromatic So if I'm stubborn about Rakudo needing to do some of these optimizations, I'm not *trying* to be a stickler for anything other than efficacy.
pmichaud_ I'm just not in favor of premature optimizations :) 20:34
or, I don't want to spend a lot of my tuits optimizing things that we don't know will have significant impact
benabik In theory you can assign registers to the tree and reuse them based on tree depth. But POST gets very flat very quickly.
pmichaud_ benabik: right, so we're doing the optimization at the PAST level. It works out fine.
chromatic P*ST is still a better level to do this than at the register allocation level. Basic block size limits come into play. 20:35
pmichaud_ it also helps to clarify what a PAST::Stmt node is responsible for doing.
chromatic There's a reason aggressive inliners reject inlining code blocks above a certain size, and that's algorithmic complexity.
pmichaud_ I totally agree with moving optimizations and code to higher levels when it's appropriate. 20:36
I'm less convinced when it looks like waterbed pushing, though.
chromatic My bias is to getting code *out* of Rakudo, for what that's worth.
About GC profiling, how about a count of GCables allocated within the bounds of the Sub? 20:37
pmichaud_ yes
chromatic Inclusive okay to start?
pmichaud_ I'd think it should be handle-able similar to the way ticks and instruction counts are handled now 20:38
it's just another count, yes?
chromatic Should be, but the complexity comes in where a run happens within a Sub.
pmichaud_ however ticks are being measured, I'd think GCables should be able to use the same approach.
NotFound I must mention that winxed has been using such temprary reuse from its beginning. 20:39
pmichaud_ NotFound++
anyway, Inclusive is definitely okay 20:40
NotFound And needs it probably more than rakudo because its blocks are not separate .sub 20:41
pmichaud_ oh! one problem we have now is that .const isn't really .const 20:43
.const 'Sub' $P999 = 'foo' actually allocates a register
20:43 schmooster joined
NotFound Yes, I noticed that some weeks ago. 20:43
pmichaud_ and I'm not sure it's legal for me to re-use $P999 again later for a different purpose
NotFound I've tested, is reusable... but very confusing. 20:44
pmichaud_ well, I mean "per spec" as well as "per implementation"
NotFound Did we have a spec? ;)
pmichaud_ pdd19 would be the closest to that, I suspect. 20:45
NotFound Fixinf it need a few 'c' opcode variants.
pmichaud_ anyway, some clarity on that would enable us to eliminate a bunch more unique register allocations (that are also a pain point at the moment) 20:46
NotFound The opcode part sholdn't be hard, but the pir... 20:47
chromatic Yeah, reuse is going to be hard. 20:52
NotFound Looking at the lexical handling code, I think an intermediate solution can be a lexical cache in the Sub PMC. Not sure about its possible speed impact, though.
pmichaud_ lexical cache was what we were thinking would be a good first approximation
bonus: not all lexicals can be determined statically. see "eval"
(clearly most lexicals can be determined statically, but not all.)
NotFound And given that cache, int keyed access to it is a posibility. 20:53
pmichaud_ a cache would be able to speed up the dynamic lookups
yes, one could do int keyed access into the cache 20:54
I think jnthn++ has plans for adding this capability into nqp (and rakudo). Parrot could look at Rakudo's lexpad PMC implementation, perhaps, and adopt whatever it's doing.
and then we could eliminate Rakudo's lexpad pmc 20:55
chromatic Still seems like it depends on fixing Sub.
Or is at least easier.
pmichaud_ well, it wants some changes to Sub, yes.
NotFound In the context, maybe.
pmichaud_ whether that feature requires a wholesale Sub refactor, I don't know. (more) 20:56
I recognize that Sub likely needs a refactor, and I don't have a problem with that. NQP and Rakudo conceptually treat Sub as black-boxish anyway, and wrap Parrot subs into objects that we can manipulate. 20:58
Ultimately Parrot needs a fundamental rethink of code and lexical scopes, definitely.
chromatic Completely agree.
If Parrot provided some sort of scope object (and that could be compile-time in most cases), attaching compile-time exception handlers would be a lot cheaper. 20:59
pmichaud_ refactoring Sub simply to make its internals look less messy doesn't help (Rakudo), though, unless it leads directly to the other performance-enhancing improvements
chromatic A lot of Rakudo sub preludes could possibly go away.
pmichaud_ note that we've already eliminated the exception handler for return. 21:00
we may have to add some back at some point, but we no longer create an exception handler on every HLL sub entrance
chromatic The refactoring is primarily for separating compile-time and run-time behavior.
21:02 bluescreen joined
NotFound method_name and vtable_index, for example? 21:03
chromatic That too.
pmichaud_ We do create a continuation on HLL sub entrance, though. 21:04
anyway, reducing the sub prelude would be a plus.
chromatic Maybe there could be a prelude attached to an invokable PMC such that invoking the PMC always runs the prelude code, and that prelude can be shared between multiple subs. 21:05
pmichaud_ does that actually result in a performance win, as opposed to inlining the code directly into the sub ? 21:06
*the prelude code
chromatic Don't know. It's less code to generate and reconstitute.
pmichaud_ I think it might be improving compile-time at the expense of runtime 21:07
chromatic We're at the level of speculation which involves caches and memory.
NotFound Eventually a JIT can re-inline it.
BTW, TT #2181, HashIteratorKey .value, is really a bug? 21:09
plobsing_ I'd speculate that reducing the code size might increase the cache-friendlyness 21:11
guesses like that have worked out in the past 21:12
chromatic If reductions are on the order of 15-20%, certainly.
dalek rrot: 40afde8 | NotFound++ | src/pmc/lexpad.pmc:
put repeated code in helper functions, delete unused parameters, and fix interp/INTERP in LexPad
21:52
NotFound Could not upload report to Smolder at smolder.parrot.org 21:58
HTTP CODE: 500 (Internal Server Error)
benabik smolder-- 22:01
Coke momentito. 22:05
NotFound: try smolder again. 22:07
I really need to set up that nightly cron job to hup it.
we're at 90% inode usage again. also need to clean that up. 22:08
NotFound There is some make target to retry, or should I use the command?
Coke Iunno, sorry
common enough we should probably add a target to resend last smoke results.\\
NotFound perldoc lib/Parrot/Harness/Smoke.pm suggest using: perl -Ilib -MParrot::Harness::Smoke -e 'Parrot::Harness::Smoke::send_archive_to_smolder(Parrot::Harness::Smoke::collect_test_environment_data())' 22:09
Not particularly easy to remember ;)
Test report successfully sent to Smolder at 22:11
smolder.parrot.org/app/projects/rep...ails/22653
dukeleto NotFound: the same can be acomplished with parrot ./examples/io/post.pir 22:15
NotFound A bit easier, yes. 22:16
22:35 panda joined
panda hello 22:35
cotto_work hi panda 22:37
panda hi 22:38
I am trying to find out if parrot is right for me
I am not sure if this is right place to ask 22:39
but if it is, I have a few questions
cotto_work it is. Ask away. 22:41
panda well I am not perl guy. What annoys me with Python is that is damn slow language. No optional static typing to speed things up so you have to switch to C++ to do anything. Java is fast enough but it is just too bloated and bureaucratic 22:44
what about parrot and new perl 6? Does it have optional static typing to speed things up?
basically I am looking for replacement for Python that is faster 22:45
but obviously I know next to nothing about parrot VM
dukeleto panda: just curious, what kind of computations are you doing that you are finding Python slow?
plobsing_ panda: you probably want #perl6 over at freenode
dukeleto panda: also, welcome
cotto_work panda: Rakudo Perl 6 and Parrot are separate (but related) projects. Rakudo is working on gradual typing, though questions to them should go in #perl6 in freenode.
plobsing_ but to answer your questions, rakudo is currently going through a refactor that has the potential make the optional static types into performance improvements (right now, however they are simply runtime checks, which slow things down) 22:46
cotto_work Rakudo is focusing aggressively on speed, but they're not in the same range as P* (Perl5, Python, PHP, Java) yet. 22:47
dukeleto panda: though, to warn you, if python is too slow for you now, you will find rakudo perl 6 to be many times slower than that, in the short term
plobsing_ panda: if all you care about is speed and similarity to python, have you looked at node and/or lua? 22:48
cotto_work panda: you might take a look at winxed
panda have not looked at lua. But since lua is dynamically typed I imagine it can't be very fast
I need language with optional static typing (that can actually translate to performance, not as runtime checks) 22:50
chromatic Lua with LuaJIT is very fast.
plobsing_ panda: that is a common misconception of dynamically typed languages.
it is possible to get them to be very fast, it is just *harder* to do. 22:51
cotto_work LuaJIT has some very impressive optimizations. Don't knock it 'til you've tried it.
panda thank you, I'll try it 22:52
plobsing_ what the hell are we doing guys? we just lost a customer to another VM! ;) 22:53
cotto_work panda: winxed lives on top of Parrot but does a pretty good job of being low-overhead.
panda: what kind of code are you writing? 22:54
panda well, I am hobby game developer. Mostly actionscript 3.0 (flash) games so far. AS 3.0 is actually pretty fast, with optional static typing. I have half finished 2d real-time strategy written in it. The problem is that it is flash and it doesn't really communicate with anyting outside itself. I am basically trying to see if there is viable platform outside C++ or Java. I have tried pygame, but 22:58
python is just inadequate
Nothing wrong with C++ or Java in terms of speed but developing anything big and complex on those platforms is just slow and painful 22:59
I don't need some ground breaking performance 23:00
but I need something decent
Thanks for answers so far
also I am looking for alternate platform for general programming 23:02
so I guess this answers your question, cotto 23:05
plobsing_ panda: naughty dog used lisp (game oriented assembly lisp) and had spectacular results. 23:14
panda hm lisp
I tried lisp couple of times
plobsing_ yeah, it isn't for everyone
panda I actually liked it... liked idea
what is this assembly lisp you are talking about? 23:15
plobsing_ it is a custom lisp engine developped by the naughty dog game studio.
panda let me guess: it is either unavailable or expensive ? 23:16
plobsing_ they had very tight requirements. for most uses, standard common lisp compilers do pretty well.
arnsholt_ You can get pretty good performance with Common Lisp
Yeah, what plobsing_ said =)
panda I was thinking of clojure for VM... but thats functional only language so not best suited...
arnsholt_ (CL has the option to add type declarations too) 23:17
panda I know
I know it does.... but thats practically dead language
lisp it is cool and I like it, but who maintains that stuff any more
arnsholt_ More people than you think, I suspect
plobsing_ there is a small but devoted community 23:18
arnsholt_ But it's not a language that shows up in the frontend a lot
23:18 rfw joined
panda I gues I'll have to google it 23:19
there is a lot to like about lisp, actually 23:21
arnsholt_ Common Lisp is a great language. Just too bad the syntax sucks =) 23:22
panda parentheses? Well there is prupose to it. Makes code generation easy 23:23
enables macroes
plobsing_ racket is also doing pretty interesting things 23:24
panda someone needs to ressurect that language from the grave
never gonna happen
plobsing_ racket is alive and well
panda racket? 23:25
what is that?
or who?
plobsing_ formerly mzscheme 23:26
they have cool things like a module system, optional static types with type inference 23:27
module system is only really cool from a scheme perspective
panda is it free? 23:28
plobsing_ yes
panda how fast?
plobsing_ shootout.alioth.debian.org/u32/benc...g2=python3 23:29
panda holly molly, thank you plobsing 23:30
please tell me they have multicore support
multithreading
I am downloading racket now
plobsing_ I don't know that much about racket (I don't use it). I just look at it trying to steal ideas for parrot. 23:32
panda well, I am looking at wikipedia and downloading it right now and it looks balls to the wall awesome 23:33
how come I never heard of it?
there must be a catch somewhere 23:34
plobsing_ you've never heard of mzscheme, pltscheme, or drscheme?
they recently changed their name (because they are diverging with the scheme standard)
panda nope. I am not lisp zealot. I liked the concept of a language but assumed it is dead and never really looked at ut
it
but now it looks awesome 23:35
23:38 plobsing joined
panda anyway I am going 23:39
23:41 whiteknight joined
whiteknight good evening, #parrot 23:41
cotto_work good evening, whiteknight 23:43
nopaste "chromatic" at 192.168.1.3 pasted "Batch Frees in GC Sweep" (234 lines) at nopaste.snit.ch/79126 23:47
chromatic That patch has some promise.
23:47 preflex_ joined
chromatic One obvious tuning is to pre-size the new PAs. 23:47