Parrot 3.0.0 Released | parrot.org | Log: irclog.perlgeek.de/parrot/today | Goals: Fix ipv6-related failures
Set by moderator on 10 February 2011.
00:01 Andy left
bacek_at_work auto::pcre - Does your platform support pcre...............yes, 8.02. 00:02
on my box
linux/i386/c++ with optimize
test passed...
cotto_work ship it
bacek_at_work cotto_work, it's "shipped"
whiteknight chromatic pwnd my github dashboard
cotto_work It's not on a ship. It's not shipped. 00:03
00:07 davidfetter left
cotto_work github's new file browser is really nice 00:09
00:14 mikehh left
tadzik slp & 00:14
00:17 janus left
dukeleto cotto_work: i dig it 00:19
cotto they're going nuts hiring recently 00:33
makes me wish I lived in sf and cared about ruby
Tene cotto: The company I'm working for in mountain view is hiring, and doesn't use ruby. 00:34
I expect the other condition also applies, though
cotto very much so, and I already have a job I'm happy with 00:35
Tene If anyone here happens to know any sysadmins in the bay area that want work, we very much need another good sysadmin.
cotto I love hearing about tech companies that are hiring. 00:36
Tene Our operations code is all in perl. The original ops people treated it like an awkward bash, though, so I've been doing a lot of cleanup. 00:37
00:38 Coke left
cotto allison, I don't see your PhD paper in my inbox. Could you re-send it? 00:38
00:52 mikehh joined
whiteknight my company is hiring like crazy. C# devs in philly 00:53
cotto mine too, though most PHP folks probably aren't hanging out on #parrot 00:54
statistically there'll only be one, so I'm it 00:59
00:59 NotFound left
Tene cotto: we've had other php guys in the past, I thought 00:59
01:00 NotFound joined
cotto I haven't seen barney in a while. 01:02
whiteknight me either
01:09 plobsing joined 01:11 lucian left
nopaste "kid51" at 192.168.1.3 pasted "generational_gc branch no longer builds on darwin/ppc" (825 lines) at nopaste.snit.ch/31256 01:13
kid51 ... which is surprising, because up until today it was building there, albeit with some test failures when configured with --optimize 01:14
Trying again ... 01:19
I think the failure was with "all gcc", which is not the way I usually configure on darwin/ppc 01:20
whiteknight is there any reason why interp->ctx would be 0x200? 01:24
oh nevermind, my mistake 01:27
blah. this imcc branch is a huge pain in the ass 01:30
01:45 dmalcolm left 01:52 jsut joined
Hackbinary I have a question about pod linking in the documentation: how should it be done? 01:54
because the generators are autolinking it cpan
should I just code it to go github, or to parrot.org? 01:55
01:56 jsut_ left
whiteknight github, I think 01:58
kid51 whiteknight: I feel your pain. It's not building even on plain vanilla linux/i386 (or, at least it wasn't several hours ago)
whiteknight kid51: my branch? 01:59
Hackbinary github it is :)
kid51 the compreg branch
Is it no longer possible to configure Parrot with g++? 02:10
Was it ever?
In master, if I say:
CXX='g++';echo $CXX
perl Configure.pl --cc=$CXX
... I get massive failures before I'm even out of configuration 02:11
And, where did our --cxx option go to?
I can no longer find any place in the configuration system where it is assigned from
whiteknight kid51: yeah, the branch is in flux. You may want to avoid testing it for the next few days 02:15
02:26 Coke joined 02:29 mtk left
dalek rrot/whiteknight/imcc_compreg_pmc: b7dac65 | Whiteknight++ | / (4 files):
in Parrot_ext_try, cache the current context, and make sure to go back to it when we are done. This solves an infinite loop problem I was seeing earlier. In inter_create, set interp->ctx to NULL because PMCNULL hasn't been initialized yet so it's just garbage.
02:36
rrot/whiteknight/imcc_compreg_pmc: 93a0088 | Whiteknight++ | / (3 files):
use the same callin/callout mechanism for the IMCC API as for the normal embedding API. This makes correct error handling much easier. Also, remove the Parrot_x_jump_out_error function. IMCC can jump out now by throwing a normal exception. Through the API it has the API error handling mechanism. Through the compreg it has the normal Parrot exception handling system
rrot/whiteknight/imcc_compreg_pmc: 6620d5f | Whiteknight++ | / (5 files):
fix the frontend to use the new IMCC API functions. almost build again
02:36 whiteknight left, mtk joined 02:38 wknight-phone joined
dalek TT #2004 created by jkeenan++: Where did Configure.pl option '--cxx' go to? 02:38
TT #2004: trac.parrot.org/parrot/ticket/2004
mikehh kid51: I am not sure I follow that - I use it 02:40
kid51: base config -> date && time perl Configure.pl --test --cc=g++ --cxx=g++ --link=g++ --ld=g++ (plus maybe other options)
kid51 mikehh: Yes, on Darwin/PPC, I've used '$CX=g++;perl Configure.pl --cxx=g++' for years 02:48
But where does that option get used inside the configuration system?
Tene kid51: what shell is that?
kid51 bash
Tene that... won't do anything to influence the run of Configure.pl
kid51 Tene: Set aside that shell question. 02:49
Tene except probably error, unless $CX is already set to something
kid51 I'm getting this on Linux/i386 were I simply use perl Configure.pl
Tene 'k
I haven't been following anything else going on; that just stood out as notable to me.
kid51 Show me where (right now) we take that command-line option and use it to say "Use this value as your c++ compiler" 02:50
allison cotto: yah, I composed an email message to resend, just in case I didn't CC you when I sent it to whiteknight a few months ago... sending now 02:56
02:59 wknight-phone left
dukeleto ~~ 03:01
kid51: i may be able to attend the python event, don't remember the exact time 03:02
03:04 wknight-phone joined
kid51 dukeleto: Appears to be a day-long event starting at 9:00 am. 03:05
dukeleto kid51: i don't do 9am 03:07
kid51: if you know what you want me to say to prospective python devs, I can orate that 03:08
kid51 dukeleto: Just pass along what I posted on parrot.org. 03:15
or consult with Allison
dukeleto kid51: that doesn't really cut it 03:19
kid51: there is no infrastructure
kid51: there is no plan 03:20
kid51: who is the goto person for python-on-parrot ?
kid51: is there a spec ?
kid51: which repo does python on parrot live in?
kid51: without those things figured out before that meeting, nothing will happen
kid51 dukeleto: Fine, then don't go. 03:21
It's up to the python people who want to build on parrot to formulate their own plan of action 03:22
I'm just trying to encourage them.
I spent two hours with a Python developer Tuesday night.
He was already ahead of me. He had been IMing with Allison and Lucian the previous night ... on this channel! 03:23
dukeleto kid51: i didn't say I wasn't going to go. I am just telling you that not having some basic infrastructure setup is going to seriously hamper stuff happening 03:33
kid51: who is this person you are talking about?
03:42 benabik joined 03:45 particle1 joined 03:50 particle left
cotto kid51, I've been configuring for a c++ build with --cc=g++ --link=g++ --ld=g++ and it's definitely using g++ as the compiler. 03:54
I don't remember --cxx ever being required. It might be a fossil from the bad old days when icu was included in svn.
kid51 cotto: Back in late 2006, I was having problems compiling on Darwin/PPC 03:55
coke gave me this shell script which I've used ever since
It assigns: $CX="/usr/bin/g++", and then calls perl Configure.pl --cc="$CC" --cxx="$CX" --ld="$CX" --link="$CX" 03:57
So, I assume from that -- and from the presence of 'cxx' in the Options modules -- that at one point it was meaningful
The only thing that prompted me was the problems I'm having today on generational_gc on darwin/ppc ... 03:58
... when by accident I called 'perl Configure.pl' by itself once, outside of my shell script
I believe that in 'master', I can simply run 'perl Configure.pl' on Darwin/ppc ... but that isn't working in generational_gc 04:00
./parrot-nqp --target=pir runtime/parrot/library/YAML/Tiny.pm > runtime/parrot/library/YAML/Tiny.pir
src/gc/gc_gms.c:2177: failed assertion '!PObj_on_free_list_TEST(pmc)'
make: *** [runtime/parrot/library/YAML/Tiny.pir] Error 134
kid51 must sleep
cotto 'night 04:01
dukeleto cotto: are you thinking about m0 stuff? 04:05
cotto usually 04:09
dukeleto, did you have an idea?
seen chromatic 04:11
aloha chromatic was last seen in #parrot 9 days 6 hours ago leaving the channel.
04:14 hercynium joined 04:15 kid51 left
dukeleto cotto: i saw chromatic last night :) 04:15
cotto: yes, i did have an idea. It hurt.
cotto: have you looked at my lorito branch
cotto not recently 04:16
dukeleto cotto: i need help with defining the internals of LoritoContextPMC
cotto dukeleto, What's your current sticking point? 04:17
dukeleto cotto: needing a way forward 04:19
cotto: do you remember our meeting when allison said that implementing "print 42" in M0 is our first prototype?
cotto: what do we need in M0 to implement "print 42" ?
cotto I'm glad you remembered that. For some reason it didn't stick with me. 04:20
op definition, op encoding, parser for textual M0, basic runloop, set of registers, pc 04:22
way to deal with int constants
default (or explicit) entry point for ops 04:24
Is there anything else you can think of? 04:25
dukeleto cotto: lets ignore encoding for now. It will be simple to add later 04:26
cotto: what do you mean by "op definition" ?
cotto "When you see 'print', here's what you do with the arguments."
i.e. what lives in .ops files currently 04:27
04:27 wknight-phone left
dukeleto cotto: so we need a "print" M0 op, correct? 04:28
cotto definitely 04:31
dukeleto will add it 04:33
dalek rrot/m0spec: 2e1618c | dukeleto++ | docs/pdds/draft/pdd32_m0.pod:
Add print and set as M0 ops
04:35
dukeleto cotto: arg, i accidentally created a new branch. fixing. 04:39
dalek rrot/m0-spec: 2e1618c | dukeleto++ | docs/pdds/draft/pdd32_m0.pod:
Add print and set as M0 ops
04:40
dukeleto cotto: fixed.
cotto: define "basic runloop" 04:41
cotto read an op and args, lookup/run the right bit of code, increment the pc if it hasn't changed, repeat 04:42
dukeleto cotto: that is our killer feature for lorito right now. We need a functioning runloop 04:44
cotto: can you add details about what a functional runloop is to the spec?
cotto dukeleto, yes I can.
dukeleto, what magic do I need to invoke so that git will pull the current branch when I say git pull? 04:45
dukeleto cotto: i will humbly suggest git pull --rebase 04:46
cotto dukeleto, that still asks which branch I want to pull from 04:51
sorear cotto: fix your .git/config 04:53
cotto do I need to do that for each branch I'm playing with? 04:54
sorear no 04:55
you can edit .git/config with wildcards
dukeleto cotto: gist the error that you get 04:57
cotto: which version of git?
cotto gist.github.com/821942
1.7.1 04:58
dukeleto cotto: what does this mean ? gist.github.com/821943 04:59
cotto: you forgot --rebase
cotto: git pull does a merge
cotto: git pull -rebase does a rebase
cotto: you can also do "git fetch --all"
cotto: then a git rebase origin/master
cotto: or whatever branch it is
cotto: you can also do "git fetch origin"
cotto: fetch only operates on the index
cotto: pull operates on the working copy 05:00
cotto dukeleto, looks like you need to include the generated pmc header somewhere
is that in your lorito branch 05:01
?
if the lorito ops are dynops, nothing that links into libparrot should be using its attr accessors directly 05:03
cotto got confused
looks like some pmc2c lameness 05:05
dukeleto cotto: yes, that is in my lorito branch 05:06
cotto: i am trying to make it compile
baby steps... 05:07
cotto the code is trying to access ATTRs that aren't defined
e.g. there's no ATTR declaration for to_ctx 05:08
dalek rrot/lorito: 385209c | dukeleto++ | src/pmc/loritocontext.pmc:
Make stuff compile. Linking still fails
dukeleto cotto: yes, i am cargo culting
cotto that's the best kind of cult
though to be fair, the other kinds aren't very good at all 05:09
dalek rrot/luben/gc_gms_dyn_threshold: 6f6c95b | luben++ | src/gc/gc_ (2 files):
port dynamic threshold to gc_gms
05:13
dukeleto cotto: where am I supposed to put ATTR definitions? 05:14
cotto dukeleto, after the pmclass declaration
you've already got a bunch there
starting at line 55 05:15
bacek_at_work luben, this is wrong: 05:16
- interp->gc_sys->stats.mem_used_last_collect = 0;
833
+ interp->gc_sys->stats.mem_used_last_collect = interp->gc_sys->stats.memory_used;
(for GenGC)
luben stats.memory_used is not the whole memory? 05:17
bacek_at_work luben, it is 05:18
But for triggering nursery collections we don't have to know it
we need size of _nursery_
stats.memory_used can be trigger for collecting oldest generation 05:19
dukeleto cotto: i think you didn't create a tracking branch
cotto: when creating a new branch, do "git checkout -b foo origin/foo"
cotto hmmm. I thought I was in the habit of doing that. 05:20
luben as it is now it is triggered by the total alocated size
dukeleto cotto: and then git will know that local branch foo is supposed to push to foo on origin
cotto: cat .git/config and gist it
bacek_at_work dukeleto, of just use modern git which will do it automatically :)
luben, in MS2 - yes, in GMS - no.
dukeleto cotto: that is what i am doing. modern gits don't need -t
cotto: but you do need to tell it that you are trackign origin/foo when you branch :)
bacek_at_work: ^^^ 05:21
dukeleto misfired
cotto: you should have : [branch "m0-spec"] remote = origin merge = refs/heads/m0-spec
cotto: in your .git/config, with the appropriate newlines
dalek rrot/lorito: f75b446 | dukeleto++ | src/pmc/loritocontext.pmc:
Make LoritoContext PMC compile
05:22
cotto dukeleto, thanks. That worked.
dukeleto cotto: cool.
cotto dukeleto++
dukeleto cotto: LoritoContext PMC now compiles.
cotto dukeleto, so it does 05:23
dalek rrot/lorito: 8cbccce | dukeleto++ | / (2 files):
Add a basic LoritoContext PMC test
05:24
dukeleto cotto: we need the M0 spec to exactly spell out what a LoritoContext contains
cotto: it is the secret sauce of M0
cotto: we are close to getting "print 42" to work. I can smell it. 05:25
cotto dukeleto, I'm thinking about how important it is to maintain a distinction between M0 (ops and vm) and Lorito as a whole.
M0 will be implemented several times for different purposes, but the higher-level pieces will only need to be implemented once. 05:28
dukeleto cotto: the spec is the most important thing 05:29
cotto: my lorito branch is just a prototype usign dynops. That might be how we end up doing Lorito, or we may go another route
cotto right. I'm thinking how (and if) the specs for M0 and Lorito should be separated.
dukeleto cotto: but the hammering out the spec is the most valuable thing right now
cotto: i think M0 is the most important part of Lorito right now 05:30
cotto yes
dukeleto cotto: Lorito can't exist without M0
cotto that's the first thing we need to get right
dukeleto cotto: so we concentrate on the spec of M0 now
cotto: and when we are in a position to worry about M1, we deal witht that
cotto It's also important to define what's not part of M0 though.
dukeleto cotto: for now, Lorito and M0 are essentially the same thing, until we figure enough stuff out
cotto and how those parts interact with M0
dukeleto cotto: yes, i agree. I think we can start an M1 spec document now, and add stuff to it that we know we don't want in M0 05:31
cotto: it can be in the same PDD in another section
cotto wfm.
dukeleto, I wonder if we should just say that M0 implementations need to do some hard-coding of Contexts. 05:42
05:44 hercynium left
dukeleto cotto: please explain 05:47
05:47 minusnine_ joined
cotto dukeleto, I'm thinking about how to get out of the "turtles all the way down" problem where eventually, something needs to be hard-coded. 05:49
bacek_at_work guys, invoke_cc is wrong for M0. 06:00
It's better to be explicit on this level of what to invoke
E.g. "Subs are identified by :subid" 06:01
"invoke ctx, sub, continuation"
etc
otherwise will have same situation as now with "foo"("bar", "baz") in pir. 06:02
dukeleto bacek_at_work: i don't understand. Why shouldn't M0 have a invoke_cc ?
bacek_at_work cc stands for "current continuation" 06:03
which is some magical variable stored somewhere
E.g. interp->ctx->ccont
and invokecc now set it to -1. And then Sub.invoke allocate Continuation if ctx->ccont == -1 06:04
This is kind of magic we should avoid in M0.
otoh, it can be implemented in M1+
dukeleto bacek_at_work: we get the current interp by looking at the current context in lorito, not the other way around 06:05
bacek_at_work: LoritoContext PMC basically has everything that M0 needs 06:06
06:06 rurban_ joined
bacek_at_work dukeleto, it doesn't really matter. I want _explicit_ usage of everything on M0 level. 06:06
06:06 benabik left
dukeleto bacek_at_work: no global interp in M0 06:06
bacek_at_work dukeleto, replace interp->ctx->ccont with ctx->ccont.
dukeleto bacek_at_work: current context isn't a magic global 06:07
bacek_at_work it is
dukeleto bacek_at_work: there is an opcode to return the current context
bacek_at_work "current context" and "current continuation" are different :)
dukeleto bacek_at_work: yeah, i am conflating them a bit
bacek_at_work invoke_cc is invoke with current _continuation_
dukeleto bacek_at_work: isn't a context also a continuation ? 06:08
bacek_at_work dukeleto, I don't now. Maybe
cotto that's been part of the plan
bacek_at_work Can we have different "Continuations" for same context?
06:09 rurban left, rurban_ is now known as rurban
dukeleto bacek_at_work: we have a "new context" opcode 06:09
bacek_at_work: that is a good question
bacek_at_work dukeleto, yes. But it's new context, not new current context
dukeleto bacek_at_work: our current problem is "how do we do 'print 42' in M0 ?
cotto bacek_at_work, you mean like an exception handler or something more generic?
bacek_at_work yes, exception handlers are good example
"push_eh something". What is "something"? 06:10
How many "somethings" we allow per context?
cotto what about either a sub or a label 06:11
bacek_at_work "sub" is?
"label" is?
dukeleto bacek_at_work: currently, my LoritoContext is an invokable Context, with some extra junk
bacek_at_work dukeleto, it is one of the possible solutions. 06:13
dukeleto bacek_at_work: i am just trying to get the prototype to do something useful, so we can hone the spec 06:15
bacek_at_work: i know I am doing hacky things
bacek_at_work indeed :)
dukeleto bacek_at_work: but i just want to get some basic functionality so we can make sure the spec is implementable
bacek_at_work: ;)
bacek_at_work What if we split "invoke_cc" to Context.set_continuation + Context.invoke?
dukeleto bacek_at_work: i guess that is reasonable 06:16
bacek_at_work So, we can have something like:
$ctx = new_ctx 06:17
dukeleto bacek_at_work: i was assuming that every opcode gets passed the current context, in addition to 3 arguments
bacek_at_work set_sub $ctx, subid
set_cont $ctx, <offset>
invoke $ctx
dukeleto, we don't want to invoke current context
dukeleto bacek_at_work: sure, sounds fine to me. You want to update the m0-spec branch with that? 06:18
bacek_at_work: the most important thing right now is improving our spec 06:19
dalek rrot/m0-spec: af8ae5e | cotto++ | docs/pdds/draft/pdd32_m0.pod:
add a runloop definition
rrot/m0-spec: 99d71f5 | cotto++ | docs/pdds/draft/pdd32_m0.pod:
add section for non-M0 topics
cotto If every op gets the current context, what about using that for i/o? 06:24
er, to determine what print prints to
bacek_at_work, the role of :write in src/vtable.tbl in gen_gc should be documented. 06:29
bacek_at_work cotto, go for it :)
cotto d'oh 06:30
bacek_at_work, can you think of someplace better than vtable.tbl? 06:34
bacek_at_work gs_gms.c also 06:35
cotto ok
dalek rrot/generational_gc: 6a76796 | cotto++ | src/ (2 files):
add some docs on :write
06:38
ttbot Parrot 6a767962 MSWin32-x86-multi-thread make error tt.taptinder.org/cmdinfo/8994 06:44
dalek rrot/generational_gc: dddb4ba | bacek++ | src/gc/gc_gms.c:
Revert "Small optimizations for is_foo_ptr."

Looks like it broke win32.
This reverts commit 1880c15da798dae10cde05af63cb74d2ec6135a8.
06:47
cotto dukeleto, do you have any plans for yapc::na? 06:55
bacek_at_work Yay, green taptinder on ge_gc branch! 06:58
cotto good times
06:59 minusnine_ left 07:00 lateau joined
dalek rrot: 464fa68 | NotFound++ | src/ops/core (2 files):
delete unused variable ccont in get_results op
07:12
rrot: b03561f | NotFound++ | src/extend.c:
initialize curctx in the catch part of Parrot_ext_try
07:17
07:18 fperrad joined 07:26 jsut_ joined 07:31 jsut left
dalek rrot: 7055f69 | fperrad++ | runtime/parrot/library/distutils.pir:
[distutils] restore get_nqp (for compat)
07:35
08:00 cosimo left
dukeleto cotto: yes, i plan on going to YAPC::NA, but haven't made tickets yet 08:32
cotto dukeleto, cool. What about? 08:33
dukeleto cotto: also planning on YAPC::EU as well. so many confs
cotto: you mean what talks will I submit?
cotto me too
yeah
pl/perl6, I'm sure 08:34
dukeleto i haven't given any talks about bioinformatics with open source tools
but yeah, PL/Perl6 and some parrot talks too :)
bioperl is pretty big
in terms of the number of scientists that depend on it
cotto I have a dim idea of that. 08:35
dukeleto i think parrot has a lot of potential in the bioinformatics world, because biologist don't give a shit about programming languages
they all re-implement the world in every dynamic language to do the same stuff
so the potential to use a ruby or perl module from PHP would be huge to them 08:36
they just want publications, and whatever is the fastest way to do that, that is what they will migrate to 08:37
moritz we need a new language, "biology paper generator", short bpg 08:38
dukeleto lulz 08:39
cotto There's no way I'm missing this years OS Bridge.
I have a good excuse for making that a priority, especially since I don't need to fly there.
dukeleto cotto: you shouldn't. It is usually the best conf I go to each year.
cotto even over yapc? 08:40
dukeleto cotto: i have actually never been to a YAPC
dukeleto has never been to a Perl conference, amazingly
cotto serious?
dukeleto cotto: dead serious.
cotto That's deeply surprising.
moritz very much liked the perl conferences he has attended so far
dukeleto Indeed. It surprises even me.
I was planning on YAPC::NA last year, but had to cancel. 08:41
cotto I'm excited to hit YAPC::EU this year. There's a good-sized batch of Rakudo folks who don't usually make it stateside. 08:43
"All" we need to do is have something to show for M0 and Lorito by then. 08:45
08:46 lucian joined
dukeleto slowly but surely. At least we have a spec now. 08:48
cotto Yes. and I'm motivated to beat it into something awesome.
dukeleto things are starting to come together
cotto: what kind of M0 ops do we need to interact with the runloop and pc ? 08:49
cotto what kind of interaction with the runloop are you thinking about?
dukeleto cotto: we could just have hard-coded indexes into the LoritoContext PMC do stuff
cotto if the PC is just another register we don't need anything special for it 08:50
dukeleto cotto: well i am thinking of incrementing the pc and exception handling in the runloop
08:50 theory left
dukeleto cotto: we can't be sure that a register won't get stomped on due to flying yaks 08:50
08:51 fperrad left
cotto If something's stomping on the PC, we've got issues. 08:51
dukeleto cotto: it needs to be in some kind of protected memory that is not accessible other than M0 ops
indeed, we do. I guess I am paranoid
cotto dukeleto, that sounds magical
dukeleto cotto: so, if I understand you, we say "the PC is always in $I42". But what happens when generated code assigns to $I42 ? Do we have lexical registers or something? 08:52
cotto: that is what I don't understand 08:53
cotto dukeleto, I'm thinking of the PC as being a special but otherwise unprotected register. 08:54
different from [INSP]\\d+ 08:55
We may be saying the same thing.
I'm thinking that add $PC, $PC, 43 or set $PC, $I2 would be valid 08:56
dukeleto cotto: ah, so you are saying that the PC is some kind of "symbolic register" ? 08:57
register means on of INSP in all our docs, so that is a bit confusing 08:58
but I see that we are talking about the same thing
cotto I like it when that happens.
yes
dukeleto cotto: how do we actually using the "$PC" from PIR ? 08:59
cotto: these lorito dynops will be used from PIR, at first
cotto: how do we actually use, rather
cotto dukeleto, Indirectly. goto X can be sugar around setting $PC, same as ops2c does with C. 09:00
dukeleto cotto: do we want an op to retrieve and set the PC ?
cotto PIR can be a little bit magical.
dukeleto cotto: an M0 op, that is.
cotto dukeleto, That brings up the question of how M0 ops will deal with registers. 09:01
dukeleto cotto: perhaps when we want a JIT, having an op to get/set the PC will be better for optimization?
cotto: yes. I assume we want set/get opcodes for each register type 09:02
cotto If an op is hard-coded to work with a certain register type, then we'd need separate instructions for dealing with the PC.
dukeleto i don't like that
cotto me neither 09:03
dukeleto and ops at M0 must be hard-coded per-register, for performance
we don't want unnecessary indirection at M0
cotto indirection is slightly magical 09:04
(and expensive when used in large quantities)
lucian cotto: i disagree with your terminology
dukeleto lucian: welcome 09:05
lucian: which terminology?
lucian "indirection is slightly magical"
i'd rather say "implicit indirection is slightly magical"
if it's explicit, it's just an explicit abstraction
cotto I need a better word than "magical". 09:06
lucian cotto: :)
dukeleto pony-like
cotto wfm
lucian, indirection is slightly pony-like
lucian cotto: much better :)
lucian apologises for the intrusion 09:07
dukeleto cotto: so the current context has an interp object in it, right ?
cotto lucian, I mean that indirection adds a little bit of complexity. M0 should be as simple as practical.
lucian it just sort of bugs me when people use "magic" for any abstraction
cotto lucian, no intrusion.
dukeleto cotto: we index into the interp object to modify the PC
cotto: and provide an M0 "opcode" that is really just sugar for that 09:08
cotto lucian, I'm always glad when people feel welcome to jump into a discussion.
dukeleto cotto: i sense that we will have "primitive" M0 ops and some "derived" M0 ops
cotto: in the sense that we could get by with only primitive M0 ops but for the sake of carpel-tunnel-syndrome, we provide some sugar 09:09
cotto dukeleto, we need a clear distinction between context and interp
dukeleto cotto: but generated code would never use the sugar
cotto: a context has a single interp. What more do you want?
cotto dukeleto, maybe
dukeleto cotto: such as "what happens when i create 2 interp objects?" 09:10
cotto: each context has a single interp which is the interp that the context was created with
cotto: other created interps are part of the list of PMCs that are alive in that context 09:11
cotto: make sense?
cotto dukeleto, what's the interp responsible for and what's the context responsible for?
lucian dukeleto: i still think there should only be primitive ops
then you get back to something like PIR
cotto that's what needs definition, especially since we're changing some of the assumptions that hold in Parrot now. 09:12
dukeleto lucian: yeah, we shall see. We can make something macro-like that is expanded before compile-time
lucian: i am just trying to save our poor wrists
lucian dukeleto: i may have made this point before, but the best way to save wrists is to use a higher level system language for parrot, like winxed or close
cotto dukeleto, It's a balance between not getting CTS and staying motivated to generate M0. 09:13
dukeleto cotto: everything always defers to the current context to do anything. The current context is the arbiter of all information
cotto lucian, absolutely.
I hope we eventually have a gc implemented mostly in nqp.
dukeleto cotto: i am not sure that will happen. Maybe after a JIT 09:14
cotto eventually
lucian cotto: i'm not sure that's feasible
cotto for now, definitely not
lucian like, ever
dukeleto cotto: NQP is just too slow for the GC, which needs to run all the time
cotto or some other hll
lucian cotto: i meant any HLL on top 09:15
dukeleto cotto: perhaps we can come up with DSL for the GC that compiles to C, that might be feasible
cotto: to make the code easier to understand and maintain
bacek ~~
cotto We'll see what becomes possible. For now, apologies for the distraction.
lucian if C is that problematic, you might want to use one of the many languages that compile to mostly readable C
dukeleto but one yak at a time.
cotto hio bacek
happy Friday 09:16
aloha, clock?
aloha cotto: LAX: Fri, 01:16 PST / CHI: Fri, 03:16 CST / NYC: Fri, 04:16 EST / UTC: Fri, 09:16 UTC / LON: Fri, 09:16 GMT / BER: Fri, 10:16 CET / TOK: Fri, 18:16 JST / SYD: Fri, 20:16 EST
bacek cotto, aloha
dukeleto bacek: happy beer drinking day
bacek dukeleto, it's exactly what I'm doing right now
seen mikehh
aloha mikehh was last seen in #perl6 5 hours 15 mins ago joining the channel.
cotto my $dayjob just got a new beer fridge. It'll be great.
bacek cotto, congratulations! :)
dukeleto lucian: i think you are right. only primitve ops in M0, evertying else is a macro 09:17
cotto Apparently you can put other things in there, but I'm not sure why you would.
dukeleto bacon
lucian dukeleto: or bootstrap Close/Winxed early and have no need for macros :)
dukeleto A fridge full of bacon and beer is a happy fridge indeed.
lucian actually, there isn't even any need for bootstrapping, since a parrot system language has no core types or stdlib
dukeleto lucian: sounds nice, but M0 will be in C for the time-being 09:18
lucian: definitely and interesting thing to experiment with, though
lucian dukeleto: sure, what i mean is that maybe you should avoid writing any M0 by hand. just like people almost never write java bytecode/ass
cotto For anyone reading xkcd, )
dukeleto lucian: sure, that is a fine idea 09:19
cotto You're welcome.
dukeleto lucian: i don't plan to write M0 by hand, but I have to write the C code implementation of M0 by hand :)
lucian dukeleto: sure, the implementation. but actual M0 code needn't be written by humans
dukeleto lucian: yes, i agree 09:20
bacek lucian, +1
cotto lucian, exactly
dukeleto i expect parrot devs will code in M1 which is transformed automagically to M0
lucian dukeleto: that i also disagree with, looking at PIR vs PASM
dukeleto not sure if that is at compile-time or run-time, yet 09:21
could be either
lucian: what do you agree with?
lucian dukeleto: writing in a higher level language
dukeleto lucian: that is the whole design of M0, M1, .. MN
lucian but i don't agree with this language being assembly-like
dukeleto lucian: each level is implemented in the previous level
lucian dukeleto: right, scheme
do you have this design written down somewhere? i may be missing something 09:23
cotto lucian, that's what the m0-spec branch is about. Other materials are rather dispersed. 09:24
lucian right. what i had hoped for parrot was to get rid of writing assembly (PIR) altogether, and just write winxed/close for *everything* above the C level 09:25
dukeleto cotto: is there an M0 op for selecting a runcore? or is that just an index into the interp object?
lucian: that is what we are calling M1
lucian dukeleto: ah, ok. sorry. i had assumed M1 was superset of M0, but otherwise still assembly 09:26
dukeleto lucian: PIR is just the first implementation for M0 and M1. We plan on having other, better languages to interact with M0 and M1 in the future
cotto dukeleto, I haven't thought about that.
dukeleto lucian: M0 and M1 are orthogonal to PIR
lucian dukeleto: ok
dukeleto lucian: currently, we are implementing M0 as C dynops
cotto M1 corresponds somewhat to where PIR lives now 09:27
dukeleto lucian: and using PIR to interact with them. But we could really choose any Parrot language to interact with M*
lucian dukeleto: right
dukeleto lucian: we are concentrating on the spec of M0 now
lucian sure, sorry i digressed 09:28
dukeleto lucian: and not worrying too much about M1 or the fact that we are using PIR
lucian i see
dukeleto lucian: no worries, these are good questions
lucian so you're trying to move away from PIR by changing the backend from under it
cotto I had pictured the runcore living below M0 (i.e. the runcore implements M0). 09:29
dukeleto cotto: i don't parse that
cotto: we need to know our runcore to execute bytecode
cotto: which is what happens after we increment the PC, iirc
cotto dukeleto, the runcore is what executes bytecode. You give it a PC and it knows what to do. 09:30
(this is how I see the world, not necessarily how it is) 09:31
dukeleto cotto: how do you give the runcore the PC from M0? I am not seeing it.
cotto The PC is a register that the runcore knows to look at in order to determine which op to execute. 09:32
bacek Guys.
dukeleto Gals.
bacek Treat every op as sub program.
dukeleto bacek: explain a bit more 09:33
bacek Then execution of of is "Context.invoke(op, pc+2)
if Context is continuation
then PC is just where it's point to
dukeleto bacek: that is the plan
bacek Than we don't need separate handling (logically) of m0 ops 09:34
So, execution of _current_ op is equal to Context.invoke(op_sub, pc+1) 09:35
09:36 lucian left
bacek call of real sub is "$P0 = <fiind_sub_some_how>; $P1 = new_ctx; $P1.invoke($P0, pc + 1)" 09:36
even better 09:37
(partially joking)
Subs are indexed. In something like "ExecutionUnit" (similar to packfile) 09:38
M0 ops have indexes [0...N]
Other subs (including M1 ops) numbered [N+1...M]
Runloop become trivial 09:39
mikehh bacek: you was lookin' fo me
bacek mikehh, can you retest gen_gc? 09:40
dukeleto bacek: shouldn't that be current_ctx ?
cotto I really need to sleep. Please add any ideas to m0-spec. 09:41
'night
bacek dukeleto, yes.
dukeleto cotto: take it easy
bacek cotto, night
dukeleto was right for once!
bacek: why do we want to pass the pc to invoke? 09:42
bacek: seems like it should know how to get it
bacek dukeleto, goto
dukeleto bacek: GET_ATTR_ADDRESS in Continuation PMC gets the PC 09:43
bacek dukeleto, we are passing _next_ address 09:44
mikehh bacek: sure, looked ok about 8 hours ago
dukeleto bacek: ah, yes
bacek mikehh, I did small fix. It was some failures on amd64
mikehh, what about merging it for 3.1? :)
mikehh bacek: had 1 failure on rakudo on amd64/none on rakudo i386 09:45
bacek mikehh, gc-leaky?
dalek rrot: d5a6bc6 | (Gerd Pokorra)++ | NEWS:
add a news about NQP
09:46
mikehh bacek: bumped to 4e7 but failed on 2e7 on both
bacek: did not commit it though 09:47
bacek mikehh, I think it's safe to commit. We can put check into loop to exit it early.
mikehh bacek: we need to incorporate a check for available memory, what if someone had 12GB or more 09:50
bacek: and tune it on that basis 09:51
bacek: anyway I will run some tests now (on amd64 at the moment) 09:52
dukeleto bacek: i have a darwin/x86 smoker on gen_gc running now 09:54
09:58 contingencyplan left 10:03 cotto left
dalek rrot/generational_gc: 2d0471f | bacek++ | t/op/gc-leaky- (2 files):
Made tests more tolerant to big amount of available memory
10:06
bacek mikehh, latest commit into branch should solve it 10:07
dalek rrot/lorito: 246f4f3 | dukeleto++ | / (2 files):
Improve LoritoContext init and tests
10:08
mikehh bacek: had started testing, but will stat again 10:11
start
bacek mikehh, it's just t/op/gc-leaky-*.t
amd64/c++?
mikehh bacek: yes 10:12
bacek mikehh, good.
seen kid51 10:13
aloha kid51 was last seen in #parrot 6 hours 12 mins ago saying "make: *** [runtime/parrot/library/YAML/Tiny.pir] Error 134".
bacek msg kid51 Can you retest gen_gc? I hope this bug is fixed.
aloha OK. I'll deliver the message.
10:17 mtk left
dalek rrot/generational_gc: 8669daa | bacek++ | src/gc/gc_gms.c:
Remove c++-commented code.
10:23
rrot/generational_gc: 5244700 | bacek++ | src/ (2 files):
Remove c++-comment. Put normal comment instead and made code more obvious about semantics
mikehh bacek: ok that seems to work - make corevm/make coretest PASS, but, api_t_test.pir is still not removed
10:24 mtk joined
bacek mikehh, I didn't touch this test at all in branch. 10:24
I think it's from whiteknight's api branch 10:25
ttbot Parrot 5244700f i386-freebsd-64int make error tt.taptinder.org/cmdinfo/9160 10:26
dalek rrot/generational_gc: 5eec12f | bacek++ | src/string/api.c:
Restore previous behaviour of setting GC flags in str_copy.
10:29
mikehh bacek: t/src/embed/api.t has an extra line comparing to master 10:32
bacek mikehh, git diff master -- t/src/embed/api.t doesn't give anything... 10:34
mikehh, may be you have POSTMORTEM environment variable set (or how it's called)? 10:36
no
this file is actually handled wrong in test
but it should be same in master 10:37
nopaste "mikehh" at 192.168.1.3 pasted "git diff master -- t/src/embed/api.t" (15 lines) at nopaste.snit.ch/31331 10:40
mikehh bacek: does for me see nopaste - nopaste.snit.ch/31331 10:41
bacek mikehh, ah 10:42
it was fixed in master recently
Test was added on 7th
Let me merge master to branch
mikehh bacek: ok once done will build and run to fulltest and test rakudo 10:44
bacek mikehh, ok, thanks!
dalek rrot/generational_gc: 0c03f7e | bacek++ | / (9 files):
Merge branch 'master' into generational_gc
10:46
bacek mikehh, pushed
mikehh bacek: building and testin' now 10:48
bacek dukeleto, how is your testing on Darwin? 10:52
dalek rrot/generational_gc: 8802115 | mikehh++ | src/pmc.c:
fix codetest failure - trailing space
10:58
mikehh bacek: codetest now PASSes 11:02
bacek mikehh, hooray!
Merge party? Or wait until after 3.1?
tadzik :)
s/party/madness/ 11:10
bacek tadzik, not at all. Diff with master is quite small :) 11:13
tadzik :) 11:15
well, thursday, friday, little difference :)
11:16 lateau left
tadzik Your branch is behind 'origin/master' by 879 commits, and can be fast-forwarded. 11:17
/o\\
bacek go-go-go!!! :) 11:18
11:27 woosley joined
mikehh bacek: all tests PASS up to fulltest - Kubuntu 10.10 amd64 (g++-4.5) 11:28
bacek mikehh, excellent!
mikehh bacek: now for with --optimize and rakudo
bacek little bit nervous :) 11:29
tadzik ;)
tadzik taps bacek's back
Everything's gonna be alright ;)
bacek of course!
I've got 3 more beers to fix everything.
11:30 fperrad joined 11:44 adu joined 11:50 darbelo joined, clunker3_ joined 11:53 clunker3 joined 11:54 clunker3_ left
mikehh generational_gc branch: 11:57
All tests PASS (pre/post-config, make corevm/make coretest, smoke (#8971) fulltest) at 3_0_0-886-g8802115 - Kubuntu 10.10 amd64 (g++-4.5 with --optimize)
11:58 adu left
mikehh bacek: rakudo date && time make -j -> real 5m42.895s, user 6m55.790s, sys 0m6.460s 12:04
vs last build on master -> real 8m15.501s, user 10m1.750s, sys 0m5.180s
bacek: running spectest_smolder now 12:07
12:10 eternaleye joined 12:15 adu joined 12:17 clunker3 left 12:18 clunker3 joined
mikehh bacek: rakudo alltests PASS - spectest_smolder #8982 12:32
bacek mikehh, hooray! 12:33
mikehh bacek: merge it - we can fix any bugs over the weekend
bacek As you wish! :)
dalek rrot: 2d0471f | bacek++ | t/op/gc-leaky- (2 files):
Made tests more tolerant to big amount of available memory
12:36
rrot: 8669daa | bacek++ | src/gc/gc_gms.c:
Remove c++-commented code.
rrot: 5244700 | bacek++ | src/ (2 files):
Remove c++-comment. Put normal comment instead and made code more obvious about semantics
rrot: 5eec12f | bacek++ | src/string/api.c:
Restore previous behaviour of setting GC flags in str_copy.
bacek hmmm....
dalek rrot: 0c03f7e | bacek++ | / (9 files):
Merge branch 'master' into generational_gc
rrot: 8802115 | mikehh++ | src/pmc.c:
fix codetest failure - trailing space
rrot: b55f22f | bacek++ | / (44 files):
Generational GC enters the building. Merge generational_gc branch
bacek mikehh, done-done 12:38
12:39 adu left
mikehh bacek: winxed also builds and PASSes tests 12:40
12:41 clunker3 left
mikehh bacek: will check out master and tests and then on i386 12:41
bacek mikehh, ok, thanks!
It's bed time for me now. 12:42
G'Night, folks
mikehh bacek++
12:42 clunker3 joined
dalek umage: d6ce79d | darbelo++ | setup.pir:
Update setup.pir to use get_nqp_rx() instead of get_nqp(). Needed after parrot commit 0617415a.
12:45
12:46 bluescreen joined
dalek p: 7387a66 | bacek++ | src/metamodel/reprs/P6opaque.c:
Insert write barrier after compute of allocation strategy.
13:26
TT #2005 created by jkeenan++: Parrot no longer builds on Darwin/PPC
TT #2005: trac.parrot.org/parrot/ticket/2005
13:30 whiteknight joined
whiteknight bacek++ 13:31
...and, good morning #parrot
bacek whiteknight, can you join #perl6? masak have some problems with gen_gc. And I'm almost felt asleep 13:34
mikehh bacek: can you check TT #2005, I will understand if you need sleep first 13:38
bacek mikehh, ouch... 13:40
seen kid51
clunker3 kid51 was last seen on #toolchain 5 months, 12 days, 13 hours, 30 minutes and 8 seconds ago, saying: So today is 29 Aug. Which germans broke what?
aloha kid51 was last seen in #parrot 9 hours 40 mins ago saying "make: *** [runtime/parrot/library/YAML/Tiny.pir] Error 134".
whiteknight that quote is hilarious
Coke bacek++ 13:47
bacek Coke, not yet. 13:48
whiteknight msg cotto_work any preference on what function naming should be for src/interp/*? I need to add at least one new function in there for the IMCC branch, and I'll be damned if I'm not going to use a proper name for it 13:50
aloha OK. I'll deliver the message.
13:53 fperrad_ joined, fperrad left
Coke bacek++ #don't you tell me what to do! 13:53
13:53 fperrad_ is now known as fperrad 13:56 clunker3 left, clunker3_ joined
Coke tries to build partcl after months of neglect. 14:02
whiteknight I sense much fail in your future
I feel a great disturbance in the force, as if many trac tickets were suddenly created and then assigned to me 14:03
mikehh All tests PASS (pre/post-config, make corevm/make coretest, smoke (#9001) fulltest) at 3_0_0-887-gb55f22f - Kubuntu 10.10 amd64 (g++-4.5) 14:04
mikehh got to go out for a bit 14:06
14:06 rurban_ joined
mikehh will test on Ubuntu i386 when I get back 14:06
14:06 mikehh left
dalek rrot: 77b57cc | bacek++ | include/parrot/gc_api.h:
Disable shortcutting of mark_PMC_alive. It's needed for calculating of youngest child.
14:06
14:09 rurban left, rurban_ is now known as rurban 14:13 plobsing left
Coke looks like one of the changes is in dealing with named function params. 14:27
whiteknight yeah, there was a special case for a while where we weren't doing error checking on named parameters in certain situations. We removed the special case 14:28
I don't remember what it was or why, but I know it's gone
Coke good night, magical coding robot. 14:29
14:30 mikehh joined
Hackbinary good afternoon #parrot 14:32
mikehh hay Hackbinary 14:33
Hackbinary: it was mentioned somewhere that you are in Scotland
Hackbinary it's true 14:34
I'm in Edinburgh
mikehh I am in Aderdeen
bacek night humans
Hackbinary g'night bacek
mikehh cheers bacek
Hackbinary Aberdeen is the only large city in Scotland that I haven't been to yet 14:35
mikehh Hackbinary: whatcha ya doin' in Edinburgh 14:36
Hackbinary right now, looking for work
:( 14:37
mikehh ah, sad way to spend time
Hackbinary yah it's not the best
what you doing in aberdeen? 14:39
mikehh generally I work from home, doing various development for clients, none actually here in Aberdeen 14:40
in fact only one client in Scotland at the moment. 14:42
Hackbinary perlish type stuff? 14:43
mikehh Linux based usually, c++, c, perl and others, some Web type stuff as well, I also do sys admin for a couple of websites, although how I got into that I have no idea 14:45
mikehh fresh out of milk and other things, really need to get some stuff - bbl 14:50
Hackbinary okay, see you in awhile 14:57
dalek TT #2006 created by masak++: Problem compiling Rakudo's Test.pm on Debian x64 15:04
TT #2006: trac.parrot.org/parrot/ticket/2006
15:04 benabik joined
whiteknight yay! I think I just fixed a large number of the test failures in the imcc branch 15:05
I wish Parrot's test harness would give a final count of number of test failures, so I could compare progress quickly 15:08
Coke isn't that a function of whatever perl test harness we're using? 15:10
15:14 rurban_ joined, cotto joined
whiteknight Coke: yeah, I don't know the details 15:16
I seem to remember seeing a short totals summary table at one point, but it isn't there now 15:17
15:19 rurban left, rurban_ is now known as rurban, lateau joined 15:25 theory joined 15:27 woosley left 15:28 Andy joined
cotto_work ~~ 15:40
darbelo ~~ 15:41
15:42 plobsing joined
whiteknight on the bright side, I think fixing all the test failures in my imcc branch is going to require me to completely rip out the hack-job homebrew exception handling that IMCC uses 15:42
atrodo That's a good thing, right? 15:43
cotto_work whiteknight: that will the new function do? 15:44
whiteknight cotto_work: Get an Interp* from a ParrotInterpreter PMC, without having an Interp* around already for calling vtables
necessary for the API 15:45
cotto_work I can see where you might want to do that.
What name were you thinking? Also, how would that work? You need an Interp* before you can do anything. 15:48
whiteknight in the branch now, I'm calling it "Parrot_int_get_interp_something_something_something" 15:50
I don't remember what I called it
the API renaming page on the wiki says "Parrot_int_*", but clearly no functions in that folder follow that naming scheme
15:50 contingencyplan joined
cotto_work "int"? 15:50
do not want
That's too ambiguous. "int" has a very different meaning from "interp". 15:51
imcc_interp_code branch? 15:52
I don't see "Parrot_int_*" in either imcc_ branch. 15:54
whiteknight cotto_work: the whiteknight/imcc_compreg_pmc branch. I haven't pushed this change yet 15:56
what would you prefer, Parrot_interp_*?
I ask because there is no prior art here, so we can pick whatever we want and get it right 15:57
cotto_work I'd prefer Parrot_interp_*. Names don't need to be artificially short if it hurts readability.
We have modern compilers. They can deal with long function names. 15:58
whiteknight that's true, but at the same time we start ending up with unnecessarily large prefixes on function names
15:58 PerlJam left
whiteknight Parrot_interp_ is fine 15:58
15:58 PerlJam joined
cotto_work wfm 16:01
Hackbinary hello everyone, the smolder server for cardinal doesn't seem to work anymore, has it been migrated? 16:11
smolder.plusthree.com/app/public_pr...reports/16
darbelo Hackbinary: check smolder.parrot.org 16:12
Hackbinary I don't see cardinal on there? 16:15
cotto_work I love the gen_gc branch, but I'm not thrilled that it was merged into master without even a mention at #ps. 16:16
16:17 Patterner left, Psyche^ joined, Psyche^ is now known as Patterner
plobsing gen_gc got merged? 16:18
cotto_work especially since it's clear that nqp didn't get sufficient testing
plobsing: yes
plobsing this close to a release? when there were still hacky workarounds? 16:19
are we insane?
cotto_work It's also a violation of our support policy since some languages may need to add write barriers. 16:20
plobsing sure, there were significant speedups in some very common use cases, but I am 99% sure I can find a case where the ctx-dirty/register workaround makes things notably slower
Coke bacek got approval from the release manager. Also, I hear we have the ability to undo things. ;) 16:21
cotto_work I saw that, but this is more than a feature addition.
Coke speedups in the common case but slowdowns in uncommon cases is not a reason not to merge. (the write barriers might be.) - but in that case, cotto, the merge will have to wait 2 more months. (not arguing, just pointing out.) 16:22
whiteknight we do not want to wait 2 months on this
2 weeks, there's an argument to be made. 2 months is out of the question
cotto_work whiteknight: I agree, but this was too fast.
Coke I suspect just after the release with a big note in the news saying "Sorry, but this is really worth it" (re: the write barriers changes) is a good compromise. 16:23
cotto_work Coke: that would have been preferable.
Coke especially since you we can leave the macros in master even if we rollback the code. 16:24
cotto_work yes
Coke cotto_work: so make it work that way. the release hasn't happened yet.
cotto_work Coke: indeed 16:25
dukeleto: ping
plobsing Coke: the "uncommon" case is more common than you think. Every register access is slower. 16:26
darbelo Ouch.
whiteknight plobsing: what's the story there? I wasn't aware of a slowdown on register accesses
plobsing look at REG_INT
it used to be, in optimized builds, registers were accessed through a couple of pointer dereferences and an array lookup. 16:27
Coke plobsing: I took you at your word when you said uncommon.
that sounds like it might actually be what we call common.
plobsing with gen_gc, that meant that the ctx could be updated without marking it dirty. the workaround was to always go through accessor functions (which we already had for debug builds), which marked the ctx. 16:28
these accessor functions are in a separate file and not inlinable
whiteknight that does sound like something we could optimize in-place 16:29
NotFound Marking int registers?
plobsing the *correct* solution is to get ops2c to generate different code for accesses that could actually make the CTX dirty (either call the accessors or WB inplace)
whiteknight plobsing: right, I thought it was agreed yesterday to do that very thing? 16:30
plobsing 90% of register accesses are not this
whiteknight: there was a sense that this should be done. my opinion is that should have happened before the merge.
whiteknight we know that gen_gc brings about a 25% speedup to Rakudo in most tests. reverting that because there is a slowdown on certain accesses hardly seems prudent 16:31
Either we revert the gen_gc merge now because it has problems, or we stick with it and use it as the new basis for future optimizations
at least, that 25% number is what I have been told. I haven't done the testing myself 16:32
plobsing my concern is that this regression never gets adressed
Coke well, if it stays in master, step 1: open a ticket so it doesn't get lost. 16:33
whiteknight how hard would it be to address it? I've never monkeyed around in ops2c, but I can't imagine it's uber-difficult to generate different accessors
Coke (or as soon as it gets back in master.)
cotto_work whiteknight: it depends on how accustomed you are to nqp. 16:34
plobsing whiteknight: my past attempts at modifications to ops2c have resulted in nothing but frustration. IMHO, it is a ball of spaghetti Perl 5 which was ported to NQP nearly verbatim. I have no desire to touch it again. 16:35
NotFound Also, while doing that it will be good to get rid of generating the current context var in ops that doesn't use it.
whiteknight NotFound: yes, that is another good optimization
cotto_work I'm still on the fence about reverting the merge. 16:36
NotFound Alternative approach: create a branch from a point before the merge and cut the release from it. 16:37
cotto_work NotFound: I like that idea if mikehh feels comfortable enough with git to do it. 16:38
whiteknight if the merge causes a problem, that's not a bad idea
I wish we weren't having this conversation while bacek was sleeping 16:39
cotto_work Awesome. Take a look at support_policy.pod and look for "<<<<<<<". 16:41
fixing now 16:42
Coke SWEET
most awesome that it's from our git master. ;)
NotFound And none of the alternatives is correct. 16:44
dalek rrot: ad9c8a0 | cotto++ | docs/project/support_policy.pod:
fix some unresolved conflicts from deprecations as data
NotFound cotto_work: Isn't api.yaml now? 16:45
Coke misses the diffs-in-email.
cotto_work d'oh 16:46
dalek rrot: cd7619c | cotto++ | docs/project/support_policy.pod:
refer to the right file
NotFound TODO: add a test that verify docs refered to in pod do exists. 16:47
cotto_work NotFound: are you volunteering? 16:48
NotFound whistles
nopaste "coke" at 192.168.1.3 pasted "segfault in partcl." (3 lines) at nopaste.snit.ch/31363 16:52
16:52 bluescreen left
cotto_work Coke: is that new since the gen_gc merge? 16:53
Coke cotto_work: partcl has been so broken for so long I have no idea how long it's been there. 16:54
trying to get it back to passing again as time permits.
bisecting to identify changes is, IME, useless, so I won't volunteer it.
dalek rtcl-nqp: 9b45b77 | coke++ | build/PARROT_REVISION:
lie so we can build with latest parrot
16:55
rtcl-nqp: 34a4df4 | coke++ | src/Partcl/commands/time.pm:
Avoid "TclString doesn't have set_string_native" error.

this avoids it. :(
rtcl-nqp: d0fa4e9 | coke++ | src/Partcl/commands/string.pm:
parrot now complains about this extra arg
Coke happy to provide backtrace, etc. 16:56
Hackbinary notfound / cotto_work, I'm happy to work on some of the documentation 16:57
nopaste "coke" at 192.168.1.3 pasted "2 segfaults..." (11 lines) at nopaste.snit.ch/31366 16:59
whiteknight awesome 17:01
cotto_work Hackbinary: thanks. The idea is to make sure that anything in F<...> in Pod is a real file. You could probably copy/modify t/codingstd/pod_syntax.t as a starting point.
whiteknight Hackbinary: send in a CLA 17:02
plobsing for a tangible example of the slowdown I complained about earlier, examples/pir/md5sum.pir /usr/lib/libc.a went from ~3.25s to ~7.75 seconds for me
whiteknight plobsing: okay, that is pretty substantial 17:03
plobsing I'd say. heavy math getting >2x slower is not acceptable IMO.
cotto_work aloha: clock?
aloha cotto_work: LAX: Fri, 09:03 PST / CHI: Fri, 11:03 CST / NYC: Fri, 12:03 EST / UTC: Fri, 17:03 UTC / LON: Fri, 17:03 GMT / BER: Fri, 18:03 CET / TOK: Sat, 02:03 JST / SYD: Sat, 04:03 EST
atrodo cotto_work> github.com/atrodo/parrot/blob/m0-s...d32_m0.pod
cotto_work plobsing: how many cases like that do you expect there to be? 17:05
17:05 dip left
cotto_work atrodo: I gauss I cant spel 17:06
Hackbinary www.parrot.org/files/parrot_cla.pdf --> 404
atrodo cotto_work> ? 17:07
plobsing cotto_work: I expect nearly anything that isn't PCT-based to suffer. This is an example chosen to highlight the issue, so the magnitude of the slowdown experienced in the average case will likely be less.
NotFound plobsing: you mean winxed, for example? 17:08
cotto_work atrodo: nm. I didn't realize which parts were yours.
NotFound: there's an easy way to find out.
plobsing NotFound: certainly some code written in winxed could suffer from the issue. Not sure about the compiler. How much garbage does it churn through?
NotFound cotto_work: yes, but I'm short of time right now, I should be on the road now. 17:09
plobsing I use PCT-based as a first-order approximation for "generates a lot of garbage"
cotto_work NotFound: ok
plobsing I also see a slowdown on examples/hexdump.winxed 17:14
cotto_work seen mikehh 17:15
clunker3_ mikehh was last seen on #parrot 2 hours, 29 minutes and 59 seconds ago, saying: Linux based usually, c++, c, perl and others, some Web type stuff as well, I also do sys admin for a couple of websites, although how I got into that I have no idea
aloha mikehh was last seen in #parrot 2 hours 30 mins ago saying "Linux based usually, c++, c, perl and others, some Web type stuff as well, I also do sys admin for a couple of websites, although how I got into that I have no idea".
cotto_work msg mikehh It's becoming clear that gen_gc was merged too early and without enough discussion and testing. Are you comfortable making a branch from before the merge and cutting the release from that? 17:16
aloha OK. I'll deliver the message.
17:17 dmalcolm joined
cotto_work I'm leaning toward either that or reverting and re-merging after the release. 17:19
whiteknight the two options are basically equivalent 17:20
creating a new branch from before the merge saves the effort of unmerging
17:25 bluescreen joined
mikehh cotto_work: if necessary - however I wass testing the branch and we got it passing everything as well as rakudo and winxed 17:27
cotto_work mikehh: yes but there are performance concerns 17:28
It's much faster for Rakudo but slower for other kinds of programs.
mikehh possibly, but it builds rakudo much faster, spectest did not take much longer 17:29
cotto_work It also was merged without much discussion, which is bad because it breaks our support policy.
mikehh we can optimize it a lot, however I have never been too happy with the gc, this has much better potential 17:30
that is probably my fault (merging that is) because we got everything passing and rakudo works with it 17:31
in what way does it breask the support policy - gc is internal? 17:33
break
cotto_work mikehh: some HLLs need to add write barriers to some VTABLE slots. 17:34
mikehh really, which working ones?
Coke rakudo
cotto_work Rakudo at least, possibly nqp
mikehh tested that - spectest smolder passes 17:35
Coke obviously, rakudo is already fixed, there, but if our main language needed it...
cotto_work mikehh: that's because bacek gave them a patch
mikehh sure I saw it 17:36
everything was passing (on parrot) before the merge, so I can probably pick it up there if absolutely necessary 17:39
I was hoping to test everything over the weekend, with some help of course, and fix any outstanding bugs 17:43
there is a lot of room for optimization in gen_gc as it stands, but that can come over the course of the next couple of months 17:45
plobsing gen_gc is a good idea. the problem is it isn't ready yet. this is experienced in the form of large performance regressions. 17:46
mikehh I don't really want to go forward with the old gc and wait until 3.3 or 3.6 to put it in
cotto_work mikehh: I'm not suggesting that. I'm just saying 3.1 is too soon.
mikehh cotto_work: it's probably your decision, but I don't really agree with that 17:47
cotto_work We can occasionally go against our support policy if we believe that the trade-off will benefit users, but I never want that to happen without some discussion at a #ps.
My preference would be to merge shortly after 3.1 (or cut 3.1 from a pre-merge branch) and optimize from there, along with adding a proper deprecation notice. 17:48
17:48 ryan joined
mikehh cotto_work: I thought we had agreed to put it in as soon as possiblky, I could be wrong though 17:48
17:51 chromatic joined
chromatic How about fixing the non-PMC register accesses instead of reverting everything? 17:52
See include/parrot/context.h line 35.
mikehh chromatic: good idea
cotto_work also an option if we can make it work within the next day or so
mikehh I'll create a branch from just before the mergem just in case 17:53
chromatic Let me try something quick.
cotto_work mikehh: thanks
Coke (releasing from branch) this may also mess up rakudo, temporarily. not sure how smart their configure.pl script is yet. 18:01
nopaste "chromatic" at 192.168.1.3 pasted "Re-enable register access optimizations" (41 lines) at nopaste.snit.ch/31376
plobsing chromatic: also need WB on string registers 18:02
chromatic Really? Should be easy to add.
plobsing true. just pointing it out.
chromatic I don't have time at the moment; anyone who wants to take over is welcome to do so. 18:03
18:04 mtk left
chromatic All of the core tests did pass for me, FWIW. 18:05
18:06 chromatic left
plobsing the problem is that the corner-case is very small. it is quite likely the core tests don't show the problem 18:06
Coke it is hard to not break things we have no tests for. 18:07
plobsing I'm trying to come up with something that demos it. 18:09
Coke \\o/
Hackbinary whiteknight, where should I send in the cla? and do you need a scan of page 2 as well? 18:10
cotto_work Hackbinary: you can scan and email if you prefer. 18:11
Coke Hackbinary: parrot.org/foundation should have details
whiteknight Hackbinary: both pages. Address and fax number should be on the CLA itself I think
18:11 mtk joined
Hackbinary sorry, I need an email address 18:11
i'm blind, legal@ 18:12
okay, I've sent in page 1 and page 3; if you need me to send in page 2, just let me know. (There was nothing to fill in on page 2) 18:16
=) 18:17
18:27 minusnine_ joined
dukeleto ~~ 18:28
cotto_work good morning, dukeleto 18:29
dukeleto why was gen_gc merged to master? 18:30
cotto_work: mornin'
cotto_work dukeleto: welcome to the madhouse
It shouldn't have been.
dukeleto we didn't do any benchmarking
18:31 lateau left
dukeleto running rakudo spectest and looking at build times is not the same as doing real run-time benchmarking of various nontrivial stuff 18:32
cotto_work plobsing pointed out that there are cases that are substantially slower due to the write barrier 18:34
they can be improved, but it was the first I've heard of those cases 18:35
dukeleto so we need benchmarks that constantly modify many long-lived PMCs 18:37
cotto_work dukeleto: the md5sum test is slowed down measurably
the PMCs don't need to be long-lived
18:39 lateau joined
cotto_work (according to plobsing. I haven't tested it myself.) 18:39
plobsing you just need to do more work with registers than is made up for by GC churn. PCC generates considerable churn, so any "well factored" code improves, whereas more straightforward imperative code suffers
dukeleto cotto_work: how much has md5 slowed down? 18:40
plobsing dukeleto: >2x
on large files
dukeleto so, do we want generational_gc to stay merged? Do we care about un-even performance changes in a dev release? 18:45
This does not bode well: trac.parrot.org/parrot/ticket/2006
I don't think this branch merge followed the merge guidelines
cotto_work stupid inability to join #perl6 18:46
18:46 lateau_ joined
dukeleto cotto_work: what irc client are you using? 18:47
cotto_work xchat
2.8.8
dukeleto something is borked
cotto_work clearly
plobsing dukeleto: I wouldn't be averse to uneven performance if it were *discussed* beforehand. but this is a result of a quick *hack* to get gms working. there is a correct solution, which I feel should have been implemented *before* gen_gc was mereged.
cotto_work plobsing: that's a big part of my problem with the way this merge was done too. 18:48
dukeleto We have github.com/parrot/parrot/blob/mast...elines.pod for a reason. 18:49
plobsing also note that before, we were only 100 times worse than C for md5 (on my system), which is nothing to scoff at. now we're between 200 and 250 times worse.
dukeleto Performance characteristics 18:50
How does your branch affect performance on our selected benchmarks? For hosted languages? Does it have memory leaks? Does it affect memory use or startup time? We have traditionally let these questions go unanswered, but we can be more disciplined here.
generational_gc did not get enough testing for these things
i expected it to get merged just after 3.1, and then it would have a month for tuning 18:51
merging a huge branch a few days before a release is bad ju-ju
plobsing what does "selected benchmark" mean? does that mean only the benchmarks which the branch targets or all parrot benchmarks? the use of only the former is what caused this regression to go unnoticed. 18:52
dukeleto plobsing: we need very specific guidelines, such as "these 10 benchmark programs must not show regressions" or something like that 18:53
that is how we can move forward, instead of in circles
We keep going in circles of performance. Tweaking, tuning, failing to test, making it waaaay slower, then rinse and repeat.
moritz real programs > benchmarks
dukeleto moritz: real benchmarks :) 18:54
plobsing moritz: md5 is a real program
dukeleto plobsing: can you send a quick email to parrot-dev about exactly how you ran the md5 benchmarks and what you found? 18:55
plobsing dukeleto: I don't think a fixed set of benchmarks is necessarily a good choice. I selected this benchmark because I already "knew" about the potential for regression using common sense.
dukeleto: sure thing 18:56
dukeleto plobsing: having no gauntlet of benchmarks to test stuff against is worse, in my opinion
whiteknight okay, let's come up with a plan right now. Based on what we are seeing, I suggest the generational_gc should not be in the release branch
dukeleto plobsing: sure, our gauntlet could be found to be not good enough, but then we add things to the guantlet
cotto_work whiteknight: +1
whiteknight I don't think we can do enough testing and benchmarking between now and tuesday, along with the necessary tweaking and tuning
dukeleto whiteknight: +1 18:57
whiteknight so we can unmerge it, or we can take a new branch as the basis for 3.2 and keep master "dirty" with gen_gc
I don't care which strategy is used
dukeleto whiteknight: let me suggest an easier way
whiteknight dukeleto: you have the floor
dukeleto whiteknight: create a new branch from where master is right now. gen_gc2 or whatever
whiteknight: then, go back to the commit before gen_gc was merged, and branch from there 18:58
whiteknight: call that new_master or something
whiteknight: then merge new_master into master, which should wipe out the gen_gc merge, 18:59
and then we still have the gen_gc2 branch pointed at what is master right now
i am not sure if other stuff has been added to master since the gen_gc merge. I assume not much.
whiteknight that's fine. Like I said, I don't care about the mechanism, only the fact that the release-making branch does not include generational_gc 19:00
whoever fixes it first gets to pick how it gets fixed
dukeleto joy to the world.
works for me, that is just one possible way to skin that yak
whiteknight that said, we *need* generational_gc in some capacity. The performance benefits to Rakudo are not ignorable
dukeleto whiteknight: rakudo already bumped their parrot_revision to get gen_gc, so this needs coordination with them 19:01
whiteknight so we should immediately start new work (possibly a new branch) to start properly addressing the write-barrier nonsense
cotto_work whiteknight: I absolutely agree. It just wasn't merged with due diligence.
dukeleto moritz: what are your thoughts?
whiteknight that means we need to identify (or create) some key benchmarks that show different aspects of the performance changes
dukeleto the md5 and sha examples are probably pretty decent benchmarks. We obviously need more, though. 19:02
whiteknight the MD5 one is probably a great candidate. We do need things that are garbage hungry to emulate PCT and NQP applications
everything in the middle
dukeleto we need benchmarks written in NQP
whiteknight that should definitely be a set of them, yes 19:03
19:04 lateau_ left
whiteknight Okay, action list. I'm going to start spitting out steps. Speak up if you want to volunteer for them: 19:04
19:04 [hudnix] left
whiteknight 1) Unmerge/move generational_gc 19:04
2) identify benchmarks that demonstrate the performance changes (both good and bad)
3) Start working on a way to make register accesses cheaper 19:05
any takers?
19:05 lucian joined
moritz dukeleto: I don't really care; we won't base a Star release on this parrot + rakudo 19:06
I too was surprised at the early merge
19:07 minusnine_ left, hudnix joined, lateau_ joined
lucian i was thinking whether java could possibly be coaxed into being a parrot system language/ jikesrvm.org/MMTk 19:08
mikehh I think bacek and I were both a bit tired and we all the tests to pass and rakudo and winxed I said go ahead and merge it
we got all
and rakudo built a lot quicker 19:09
whiteknight mikehh: that's fine. Like I said, we do want this
we just want to make sure it's right, and with some effort it can be right
plobsing lucian: Java is coaxable to be a Parrot system language, sure. But just try to get most Parrot developers to spend their volunteer time writing Java. 19:10
lucian plobsing: well, they wouldn't have to. it would only be useful if it was compatible with existing java code 19:11
plobsing lucian: there was even a paper written about integrating Jikes w/ Parrot. Not sure how far they went.
lucian: Java-the-language is fairly easy. It is Java-the-kitchen-sink which is tricky. And yes, I've looked at GNU Classpath
lucian plobsing: i'll look for that paper. at least jikes doesn't assume the kitchen sink 19:12
19:13 lateau_ left
lucian plobsing: i think classpath is reasonably tame in that the VM-specific bit is small. classpath itself is a bit crap, though 19:14
plobsing lucian: the main issue highlighted by classpath is incremental implementation does not see incremental benefit because the whole thing is so highly self-referential 19:15
dalek rrot: 6e5cd4a | dukeleto++ | tools/dev/headerizer.pl:
Remove a remnant of the dark days of Subversion
19:16
plobsing it's kinda like your "need python core objects to implement python core objects" issue taken to the nth degree.
lucian plobsing: yeah, i get it
mostly i'd like to steal jikes' gcs
mikehh I think we are looking at commit d5a6bc669b77742316cac48b23cb6fd0a708b773 as pre-merge 19:18
whiteknight I read that immix paper this morning. Very interesting stuff
There are some things I think we can easily steal from there for our fixed-size allocators and our PMC/STRING allocators 19:19
line-based allocations and lazy sweep could each be implemented relatively quickly for some gain
if GC pauses are a problem, lazy sweep would shrink those significantly 19:20
line-based allocators with bump-pointer allocations would be an improvement over our current free-list allocator in most counts 19:21
there's a question about how much extra memory bloat and fragmentation we would suffer
dalek Heuristic branch merge: pushed 19 commits to parrot by leto
Coke dukeleto: you might want to run "ack -Q '$Id$'" - there's more than one there. 19:22
lucian whiteknight: i think there's been research about how most mallocs are bad for gcs for a while now
whiteknight lucian: we already don't use malloc much. Only to allocate the initial arenas 19:23
lucian whiteknight: i see
Coke um, we shouldn't be making our docs point to github.
whiteknight once we have the arenas, we're doing slab allocations and management
Coke msg dukeleto you might want to run "ack -Q '$Id$'" - there's more than one there. 19:24
aloha OK. I'll deliver the message.
19:24 sri left
Coke msg dukeleto - -1 on making all those links point to github. we should be making them work with "make html". 19:24
aloha OK. I'll deliver the message.
plobsing why do we use malloc for arenas? those are large allocations. shouldn't we be using mmap or sbrk directly?
lucian whiteknight: slabs within the arenas, right
whiteknight plobsing: maybe, yes
Coke msg hackbinary - -1 on making all those links point to github. we should be making them work with "make html".
aloha OK. I'll deliver the message.
19:24 sri joined
lucian it wasn't clear to me from reading the docs what sizes the arenas are 19:24
whiteknight lucian: in Parrot's GC, "slab == arena". Pools contain multiple arenas 19:25
lucian in the gengc
whiteknight we should probably update the terminology one day
dalek rrot: 93710cd | dukeleto++ | tools/dev/merge_pull_request.pl:
[tools] Script to make merging pull requests easier
19:26
lucian whiteknight: a "legend" would probably be enough
lucian i do understand that docs aren't written yet because the code's so new
dukeleto Coke: feel free to fix stuff, but I merged that stuff already
dukeleto would like feedback on tools/dev/merge_pull_request.pl 19:27
it just saved me about 5 minutes, using it for one pull request
i hope it makes peoples lives a bit easier 19:28
it will even stash working copy changes if you have them
it requires wget and autodie right now, but we can fiddle with that. I just wanted something that worked *right now*
dalek rrot: 56df0ae | dukeleto++ | docs/glossary.pod:
[doc] Make the link point to the canonical repo
19:30
lucian plobsing: i keep coming back to the same issue, the lack of a good system language that isn't C 19:32
plobsing winxed is unacceptable for some reason?
lucian plobsing: i mean lower than parrot, for implementing parrot itself
jikes has nice gcs because the language is nicer 19:33
partly, i mean
Coke dukeleto: I'll open a ticket.
dukeleto Coke: danke
lucian plobsing: for pynie, winxed does indeed look like the best option
19:33 lateau_ joined
whiteknight lucian: One thing not to overlook is that we have several extremely competent C coders on the team right now 19:34
lucian: on a different language, maybe not so much expertise
lucian whiteknight: sure, and they do awesome work
whiteknight damn straight
:)
lucian whiteknight: on a higher level language though, i'm pretty sure these great C coders would keep doing great work
cyclone, bitc or something else 19:35
whiteknight we certainly can't use cyclone. We need pointer arithmetic for the GC, and we need setjmp/longjmp for exceptions 19:36
other than that, I like the concept 19:37
lucian D is very nice, it's just kinda immature right now
plobsing cyclone, bitc, and c-- are decent options from a certain perspective
Coke D++
er, I like D.
lucian Coke: sure, let's not do another C++ :)
plobsing I kinda agree with Linus' exclusion argument against C++ for C++ and Java 19:38
whiteknight what argument is that?
plobsing we don't want the contributions of those that require such languages to acheive results in stead of C 19:39
19:39 lateau_ left
plobsing such languages can enable great power. but they can also be used as a crutch. 19:39
whiteknight from everything I've read, I've always thought Linus's attitude towards certain languages is a bit assinine
lucian plobsing: no offence, but i think that's elitist and silly 19:40
whiteknight C++ isn't a great language, but choice of C++ does not a bad programmer make
19:40 lateau_ joined
whiteknight choice of Java? maybe. :) 19:40
19:40 GodFather joined
plobsing no, but the requirement of C++ to get results does. 19:40
whiteknight no, that's true. If you can do it in C++ you should be able to do it in C
personally, if we had a language that was basically "C with thin classes", I would take it 19:41
lucian then you can do it in assembly too
whiteknight: vala?
19:41 AzureSto_ joined
whiteknight lucian: right. It's a matter of trading off and getting results in a timely manner 19:41
plobsing vala for parrot would be cool
whiteknight deep down we all want to be writing assembly. We just can't find the time
lucian plobsing: you mean like a HLL?
plobsing no, like Vala, but swap PMC for GObject 19:42
lucian whiteknight: except for me, who'd rather write the highest level possible langauge :)
plobsing: right. well, that's not too far from Close
benabik whiteknight: No, I've been very very happy with writing C++ for school.
lucian s/write/write in/
plobsing lucian: that's similar to what Close promised. I think it diverged somewhat from that.
lucian plobsing: it's dead now anyway 19:43
whiteknight I still do think that a GObject-based MOP for Parrot as one option would be a very good thing 19:44
19:44 AzureStone left
lucian whiteknight: in fact, gobject interop is a requirement for gtk. and with gobject-introspection it's not bad at all 19:44
whiteknight right
plobsing wait? I thought the GObject-based MOP was to create an optional GObject repr, not to base all parrot objects off of GObject. 19:45
whiteknight no, I wanted to use gobject as our underlying object system. At least as one pluggable option
plobsing isn't GObject single-inheritance?
whiteknight 6model should probably be our default still
cotto_work whiteknight: I thought the same thing as plobsing
whiteknight we wouldn't need to base all parrot objects off a GObject MOP. It could be separate and distinct from our normal PMCs and from Class/Object system now 19:46
or 6model
But we could have a GObjectClass type, which manages and instantiates GObject PMCs
plobsing ah, so the PMC/Object dichotomy all over again
whiteknight parrot should be able to support multiple pluggable MOPS. At least eventually 19:47
and a good GObject interface will be a major boost to Parrot getting integrated to gtk applications
lucian whiteknight: i don't see how that'll work 19:48
plobsing mono is used for a lot of Gtk stuff. It's base objects aren't GObject are they?
lucian the pluggable MOPs i mean
plobsing as is python. same deal. 19:49
whiteknight I'm sure mono has wrappers or mappers between it's objects and GObject
same with python. There's got to be a translation step, or a wrapper type
plobsing zomg heating up these benchmarks takes so long
19:50 mj41_ joined
lucian whiteknight: wrappers. there's a mono/python-level GObject you get that all GObject objects inherit 19:50
and it's rather foreign much of the time
dalek TT #2007 created by coke++: documentation now links offsite
TT #2007: trac.parrot.org/parrot/ticket/2007
dukeleto plobsing: if you describe exactly how you are running benchmarks, i can put them in a cron job on the gcc compile farm or something
plobsing: hint hint
plobsing dukeleto: I'm nearly done. I just have to run hexdump.winxed 3 more times on libc.a 19:51
whiteknight lucian: In Parrot, if I do a "$P0 = new ['Foo']", we look up a class object with that key and instantiate it. There's no reason why that class object we find has to be a Class PMC. It could be registered as any other type of PMC
then there's no reason why it couldn't be a GObjectClass object, without the user ever having to know
so long as we implement the necessary interfaces, we should be able to use any kind of class object we want for instantiating a class. And as long as we use methods and vtables at the parrot level, anybody can communicate with it 19:52
lucian whiteknight: right, then it's nothing too fancy
19:52 mj41 left
whiteknight it doesn't need to be fancy 19:52
19:52 mj41_ is now known as mj41
plobsing I can see why that would be cool. I'm not convinced it would be desirable. It has the potential to create a set of mutually slightly incompatible parrots and affiliated libraries. 19:52
whiteknight it certainly doesn't need to be disruptive or even obvious 19:53
lucian i thought it was something like CLOS's MOP, which is a tad insane
19:53 bluescreen left
lucian plobsing: i'd also rather see something like $P0 = GObject.new ['Bla'] and $P1 = Python.new ['bla'] 19:54
benabik I would think that it could be done inside 6model's idea of HOW/REPR. GObjectClassHOW and GObjectREPR.
cotto_work I'd really like to see something like that.
that has the potential for some shiny interop between disparate systems. 19:55
lucian yeah, as long as all object systems define how they can be used
in terms of native parrot types/operations
benabik lucian: Couldn't the translation layer (HOW) handle that?
lucian benabik: i don't know, i'm not familiar with 6model 19:56
but i don't think a translation is possible in general, N to N
whiteknight if i have a type registered, I shouldn't need to know what object system that type uses
get an object, use the object, never worry about how it's implemented
lucian whiteknight: but how do you use it? even between python and ruby (which are quite similar in many ways) that wouldn't work 19:57
ruby has only methods and no attributes or functions
python has no methods and only attributes and functions (for methods)
how do you fetch a method? 19:58
benabik Look up an attribute and see if it's a function?
lucian benabik: and if it's a ruby object? 19:59
whiteknight what does a method call look like in python?
lucian what if you set an attribute
in python, that could mean replacing a method
whiteknight lucian: for any object, you still have to know it's interface 20:00
lucian whiteknight: the attribute is fetched, if it's a function it gets called with self as the first argument
whiteknight but the interface is the only thing you need to know. Not the internal representation
plobsing dukeleto: benchmarks sent
lucian whiteknight: that's what i'm saying, the interface can only give a lowest common denominator, which is useless
dukeleto plobsing++
whiteknight I could make a class in NQP that has no methods, but can return functions through the get_attr_str vtable 20:01
lucian: and there's no reason that python-on-parrot objects can't implement VTABLE_find_method, to search for attributes and return PMCNULL if the attribute it finds is not invocable
lucian whiteknight: sure, but i don't think a general interface can be made 20:02
whiteknight lucian: the vtable is the general interface
lucian whiteknight: how would inheritance work?
whiteknight however you want it to work. that's a problem for the object designer, not the object consumer
if the question is "can a python class inherit from a ruby class" the answer might be "no" 20:03
lucian whiteknight: yeah, i meant inheritance by the consumer
plobsing lucian: classes implement 'add_method'. in python that's equivalent to 'add_attribute'. in other languages it may not be.
lucian some APIs require inheritance
whiteknight well, if I do find_method on a python object, it could ask it's class to find the attribute. When the class can't find it, it delegates up the chain of inheritance. That asks the ruby parent class for a method, which it can return 20:04
so long as everybody respects the vtable interface, no harm no foul
lucian whiteknight: hmm
plobsing: how would that work for purely functional languages?
20:04 bluescreen joined
whiteknight right now the linearization routine (C3) is provided by Parrot and is not pluggable, but that could be changed 20:04
lucian whiteknight: that's not a big deal, most multiple inheritance languages use C3 anyway 20:05
whiteknight right, that's why nobody has bothered to make it pluggable yet
plobsing lucian: purely functional language implementers have mapping their ideal math into an imperative world down to a fine art.
lucian plobsing: heh, nice way of putting it 20:06
so the interface is the PMC's vtable? that's exceedingly simple
i wonder if it'll work
my brain keeps bugging me that something doesn't quite fit 20:07
i probably just need to read more
20:07 lateau_ left
whiteknight lucian: that said, the vtable interface is clearly not perfect right now, so it does need some teaks 20:08
tweaks
but there are a lot of commonalities in operations between objects and metamodels
20:14 lateau_ joined
atrodo is rakudo not building a known issue? 20:16
cotto_work there's tt #2006 that masak++ filed 20:19
atrodo Yep, that looks like the error that isparrotfastyet is getting 20:20
20:25 lateau left
whiteknight Hackbinary: ping 20:28
dalek p-rx: 14741af | moritz++ | src/HLL/Grammar.pm:
change error reporting in <charspec>

This makes no difference in nqp itself, but in rakudo the old way caused a
  "Method 'paniuc' not found for invocant of class 'Regex;Match'
20:30
20:30 ryan left
p-rx: e18bf4e | moritz++ | src/stage0/ (3 files):
update bootstrap files
cotto_work dukeleto: do you have the tuits to put gen_gc into its own branch? 20:37
dukeleto cotto_work: hmm 20:41
cotto_work: what exactly do you want me to do?
cotto_work: has no one volunteered to fix the mess yet? 20:42
cotto_work dukeleto: nope
whiteknight dukeleto: pick whatever strategy you prefer
dukeleto doesn't understand why he isn't smart enough yet to not volunteer for this stuff
whiteknight I can do it myself, but it would have to happen later tonight 20:43
20:45 AzureStone joined, lateau_ left
dalek rrot: 2d62367 | plobsing++ | / (4 files):
macro hygiene
20:46
rrot: 2ee7af9 | plobsing++ | include/parrot/context.h:
dedup macros
rrot: 5829c74 | plobsing++ | include/parrot/context.h:
optimize non-gcable register access (somewhat mitigates WB issues)

  chromatic++ for idea
dukeleto BLARG 20:47
can everyone stop committing to master right now?
plobsing: ^^^
20:48 AzureSto_ left
plobsing I'm done. I was just trying chromatic's gen_gc regression mitigation. Sorry. 20:48
whiteknight plobsing++ 20:50
dukeleto plobsing: save those commits locally, 'cause i am stomping on them right now
darbelo How much does it mitigate?
whiteknight we should be able to add in dummy read/write macros for string and pmc types right now. When we're ready to update ops2c we can make use of them 20:51
dukeleto plobsing: can you push those to the gen_gc2 branch ?
dalek rrot: b1d3cb5 | dukeleto++ | / (44 files):
Revert "Generational GC enters the building. Merge generational_gc branch"

This reverts commit b55f22f6757b9f77fb851a07f69ddec1a708f329, reversing changes made to d5a6bc669b77742316cac48b23cb6fd0a708b773.
20:52
dukeleto does a force push, hopefully nobody notices
rrot/gen_gc2: 2d62367 | plobsing++ | / (4 files):
macro hygiene
dukeleto plobsing: nm, did it already
dalek rrot/gen_gc2: 2ee7af9 | plobsing++ | include/parrot/context.h:
dedup macros
rrot/gen_gc2: 5829c74 | plobsing++ | include/parrot/context.h:
optimize non-gcable register access (somewhat mitigates WB issues)

  chromatic++ for idea
dukeleto ok, generationa_gc branch is unmerged, now lives in the gen_gc2 branch, with plobsing++'s recent tweaks 20:54
You all owe me beer.
whiteknight dukeleto: I'll put one in the mail right now
cotto_work dukeleto: sure. Catch me at YAPC::EU.
(or sooner)
dukeleto i didn't test stuff, i just unmerged, so master might be borked right now
please test
whiteknight I've been squirreling away extra change in my "buy dukeleto a beer" jar for a while now 20:55
cotto_work deal
dukeleto hopes it is a very large jar
whiteknight not nearly as big as my "buy bacek more computer chips" jar, but still pretty big
20:55 plobsing left 20:56 darbelo left
cotto_work msg bacek We've reverted the gen_gc branch merge. There are some performance regressions that need to be addressed (plobsing++ started on these), and the branch was merged without nearly enough discussion beforehand. We'll most likely re-merge just after 3.1 is kicked out and continue work from there. 20:58
aloha OK. I'll deliver the message.
dukeleto just sent an email to parrot-dev as well 21:01
You are all very lucky that you didn't have to read www.kernel.org/pub/software/scm/git...-merge.txt 21:03
cotto_work It took 4 seconds for my eyes to glaze over.
To be fair, I'm definitely feeling how late I stayed up last night. 21:04
dukeleto git revert -m 1 is all I did, and that seemed to work 21:05
arnsholt "In such a situation, you would want to first revert the previous revert" Oh god, it sounds like redo in Emacs... 21:06
dalek TT #451 closed by cotto++: Anticipated changes to bytecode 21:11
TT #451: trac.parrot.org/parrot/ticket/451
Hackbinary whitenight: pong 21:12
pmichaud good afternoon, #parrot
gc_gen branch discussion is .... interesting. :-) 21:13
21:14 fperrad left
whiteknight Hackbinary: we received your CLA. At the next #ps meeting somebody can nominate you to become a committer now 21:15
dukeleto pmichaud: howdy
Hackbinary ah, okay cool
whiteknight Hackbinary: Somebody will nominate you, and somebody will offer to mentor you, and if there's a positive vote you get the commit bit 21:16
dukeleto pmichaud: we unmerged the generational gc due to performance regressions
pmichaud: but we just need to tweak a few things and it will mostly likely be merged just after 3.1 goes out 21:17
Hackbinary cool
pmichaud dukeleto: yes; I'm fine with whatever you all decide to do. I think it points to continued difficulty with the deprecation policy, though
whiteknight pmichaud: yeah, don't worry. We are definitely going to merge it, we just don't want to rush
pmichaud I totally agree it had to be unmerged 21:18
Hackbinary whiteknight: I promise not to break anything ... I'm pretty conservative about changes
whiteknight Hackbinary: good. If you break something we take away your birthday
pmichaud I'm very eager for its performance benefits for Rakudo, but (1) not within 5 days of a Parrot release, and (2) not without a mention in the deprecations file, and (3) not at the expensive of huge performance regressions elsewhere, and ... 21:19
Hackbinary hmm ..... would that mean I stop aging?
;)
pmichaud *expense
atrodo The revert made my building of rakudo work again 21:20
whiteknight pmichaud: definitely after the release. I think we're all willing to "bend" the deprecation policy because this change is so fundamentally important
we don't want to wait until after 3.3 for it
pmichaud it doesn't matter that much to Rakudo anyway at this point -- the next rakudo Star isn't slated until April
whiteknight still, we want to have a lot of experience with the performance changes
pmichaud although if gen_gc lands in 3.2 we might issue a special R* to grab it 21:21
but we're kind of hoping that by then R* will be using the new 6-model based NQP
whiteknight it will definitely be in place shortly after 3.1
pmichaud yeah, that's the other reason it shouldn't be in 3.1 -- I suspect it broke the new nqp
I don't think anyone's tested that
whiteknight I wasn't aware it was ready for testing 21:22
pmichaud that's kind of not the point, though
the point is that it would be a huge example of a non-deprecated/non-noticed change breaking a HLL 21:23
Hackbinary seen coke
clunker3_ Coke was last seen on #parrot 1 hour, 46 minutes and 8 seconds ago, saying: er, I like D.
coke was last seen on #parrot 2 years, 5 months, 21 days, 18 hours, 2 minutes and 51 seconds ago, saying: I'll get you an answer on that one by Friday.
aloha coke was last seen in #parrot 1 hours 46 mins ago saying "er, I like D.".
whiteknight pmichaud: so what is your suggestion, wait until 3.3?
pmichaud no 21:24
(more)
I'm not arguing for/against any specific action, other than what you've already done (revert until after 3.1). I just find it interesting from a process perspective.
something still isn't right somewhere if this could happen again
Hackbinary coke, that's cool, I'll fix it. I asked lastnight about it, but not very many people where online
whiteknight pmichaud: Everybody here knows that I would like to light the deprecation policy on fire, snort the ashes, and dance a happy dance about it. I'm trying not to make many decisions about this whole issue 21:25
pmichaud anyway, I agree with whatever parrot decides to do. If it were me, I'd probably do what you propose -- i.e., say "it's too big an improvement to wait until 3.4" (which is how long it would have to wait in order to follow the deprecation policy, and 3.6 would be the next supported release with the improvement) 21:26
I'm just really glad we're on 3-month deprecation cycles instead of 6-month
6-month would've been... horrible
21:26 plobsing joined
whiteknight I do forsee the argument being made that GC write barriers aren't covered by the deprecation policy. I'm not saying it, but I expect it will be said before the issue is resolved 21:27
fair warning
pmichaud I think they have to be considered part of the dep policy (more) 21:28
if we expect HLLs and other users to create custom PMCs (and that's been a core component of Parrot's design since day 1), then the requirement to add GC write barriers is part of the API.
we can't say "custom PMCs aren't part of the API" -- they have to be.
whiteknight I will say that this represents a weird case. It's difficult to deprecate something we don't have, so that it can be safely added. It's also not like there is any real way we could have both solutions available simulaneously 21:29
that is, we can't really have a release where we both have and do not have write barriers so the users can safely migrate
in any case, I have to catch a train. Later 21:30
pmichaud later
plobsing I'll point out that I mentioned the dep policy WRT read/write barriers back in *September*
pmichaud plobsing++ :-)
21:30 whiteknight left
moritz don't we have pluggable GCs? 21:31
plobsing we do. so it should be possible to use ms2 even after gms lands. 21:32
pmichaud would it be possible to keep ms2 as the default, and let a HLL switch to gms?
plobsing but that does not resolve the issue that gms is the default GC, and that the optimizations that were removed (the perf regressions) were removed universally 21:33
moritz so why not make gen_gc available via a command line option, so that people can test the deprecation that way?
ok, the optimizations are a good point
pmichaud agreed fully
21:34 nwellnhof joined
nwellnhof ~ 21:34
pmichaud anyway, we'll all manage it as best we can. plobsing++ on noticing the performance regressions for non-GC heavy code 21:35
I completely agree that's a problem that needs addressing before the merge
tbh, I wasn't expecting gc_gen to be able to merge (because of deprecation/policy issues) until well after 3.1. 21:36
and only in 3.2 or 3.3 with a policy exception
cotto_work It's not so much a problem of the deprecation policy as of that policy being ignored.
21:36 mtk left
pmichaud cotto_work: yes, I think that's what I'm trying to say 21:36
it's a process and cultural issue
cotto_work yes 21:37
pmichaud afk, kid pickup from school 21:38
see you all later
also, I'll be largely afk for the next 5 days -- we're taking a last-minute vacation this weekend
the folks on #perl6 can answer any critical questions you might have, or email me.
cotto_work pmichaud: have fun!
Coke pmichaud: be well. 21:48
benabik master builds, passes tests, and builds rakudo on Darwin/x86 22:01
22:02 wknight-phone joined
lucian i don't mean to be insulting, but how many parrot users are there? 22:05
i don't think deprecation matters at this point
everyone outside #parrot thinks parrot's getting rewritten the 3rd or 4th time, and avoiding it until someone announces "the fresh new parrot has arrived"
plobsing lucian: 5. I know because we phone home with usage stats. 22:06
22:07 rurban_ joined
lucian plobsing: parrot phones home? cool 22:08
22:09 rurban left, rurban_ is now known as rurban
Hackbinary I'm also using parrot to run my l33t 16 node bbc, running pcboard 16, customized to the max 22:10
plobsing but, all jokes aside, even if we do not have a lot of users, a conservative approach is likely the best approach for *attracting* users and retaining them
lucian plobsing: sure, after you can say "lorito is done, we have pluggable gc and jit"
before that, it's unlikely people will care much 22:11
plobsing parrot has historically taken the other approach "full ahead, consequences be damned" and burned out a lot of depending projects
lucian right
plobsing partcl is a recent, and perenial (it seems), example of this
22:13 ryan joined
Coke of course, considering partcl an actual "user base" would be overselling it, but yes, it's certainly a PITA to keep up, even with the deprecation policy. 22:14
but for some time, it was the canary in the coal mine.
plobsing you do that to enough developers, you'll build up a reputation, and no amount of shiny will attract the good developers. 22:15
lucian plobsing: well, parrot already has a reputation of not delivering 22:16
i would think shiny, quick could be more attractive
Coke at this point, I would think "keeping rakudo happy and not breaking lua" is our best bet.
plobsing I'll take "well thought out" over "runs fast for me" any day. A conservative approach to improvement encourages the former. 22:17
22:18 ambs joined
lucian plobsing: hopefully. from the extreme skepticism i've been hearing, i'm not so sure 22:18
plobsing I'm not saying the dep policy is perfect. But having standards we hold ourselves to is a Good Thing (TM), even if they may be annoying in the small.
and in many cases, we at least have the opportunity to put the notices in. this includes gen_gc. 22:20
dukeleto lucian: i question the fact that HLL's want a pluggable GC. They want a fast GC that works. 22:26
lucian: just about 0% of HLL authors want to write their own GC
lucian dukeleto: of course no one really wants to write one 22:27
dukeleto lucian: so pluggable GC is just abstraction for abstractions sake
lucian but having several gcs selectable at runtime is a good idea
dukeleto lucian: i question that
lucian: choosing at compile-time, sure. Run-time? I haven't seen a good sales pitch yet.
lucian works pretty well for the jvm
dukeleto lucian: the jvm can switch GC's at run-time ? I wasn't aware. 22:28
lucian you need about 3 classes of gcs
dukeleto: yeah, it has 4-5 gcs you can select
dukeleto lucian: i see. It seems more convenient, but when do you actually need to choose a GC at runtime?
lucian: if I am on a real-time OS, i know I need a real-time GC at compile time 22:29
lucian: if I am on a phone, I know I want the mobile-friendly-gc
lucian many music processing apps choose a real-time gc on the jvm
dukeleto lucian: when do you not know which GC you want until runtime?
lucian applications might want different gcs
dukeleto lucian: sure, which they can choose at compile-time. Why would they wait until run-time ?
lucian: i agree. I just don't see the need to work on the engine of a car while driving it 90mph on the highway. 22:30
lucian compile-time of what?
compile-time of the app, run-time of parrot
dukeleto lucian: well, a GC can already be chosen with command line arguments to the parrot binary 22:31
lucian dukeleto: sure, that's what i meant
dukeleto lucian: but once you choose, that is it. No changing it half-way through execution
22:31 ambs left
lucian of course, the jvm can't do that either 22:31
dukeleto lucian: ah, ok. We are back on the same boat.
lucian yeah :)
nwellnhof notes that JIT can help a lot with pluggable GCs 22:32
plobsing still, until you've exhausted all other avenues, you really shouldn't be doing that
lucian when i listed that as shiny, i meant a few pluggable gcs
dukeleto lucian: let's concentrate one making *one* really good first, but I agree.
lucian so your app could choose the slow-but-low-memory or the fast-but-high-memory or the slow-but-incremental gc
dukeleto: yes, of course
but the potential to do this would be enough "shiny" i think 22:33
22:33 wknight-phone left
dukeleto lucian: we already have that. You can choose a gc now. 22:33
plobsing you could of course have multiple parrots sitting around to provide that functionality. that way, you have the benefits of knowing the GC statically and being able to eliminate read/write barriers for the GCs that don't require them. 22:34
lucian plobsing: i think that's what the jvm does, to some extent
dukeleto: yes, and it's nice
nwellnhof you can plug in another mark and sweep GC right now, but that's it. Parrot doesn't support any other type of GC yet. 22:35
plobsing nwellnhof: there is the infinite memory GC. that's something else... 22:36
and it works great on real turing machines
nwellnhof it's a mark and sweep GC without marking and sweeping ;)
lucian plobsing: i'll get you one for your birthday
btw, i forgot to list tachyon.in/clay/ when i was ranting about nicer system languages 22:37
plobsing lucian: great. now I just have to get someone to buy me pushable rope. and some frictionless, massless pulleys. 22:38
lucian plobsing: don't forget the ideal point mass 22:39
ryan Hello, I'm looking for GSOC ideas and Dukeleto++ informed me that I should speak to some people in the IRC. Does any one have any ideas? 22:41
nwellnhof ryan: a copying garbage collector 22:42
plobsing ryan: have you looked at trac.parrot.org/parrot/wiki/BigProjectIdeas 22:44
22:44 vmspb joined
ryan no I'll look at that now thanks 22:45
nwellnhof what does "context-threaded runcore" mean? 22:47
ryan I saw this "GObject Metamodel", this is to work with GTK right? 22:48
is there a project like this for qt? 22:49
lucian ryan: you could implement a SMOKE binding, i guess
smoke is the qt equivalent of gobject-introspection
22:51 whiteknight joined
ryan lucian: sounds cool 22:53
lucian ryan: for example, RubyQt is made with SMOKE 22:54
perhaps you could implement a QObject metamodel with SMOKE, but i don't really know
ryan thanks 22:55
sorear ryan: before implementing something, make sure it's actually wanted 23:00
whiteknight what is ryan implementing?
sorear whiteknight: nothing, yet 23:01
whiteknight has some backloggin' to do
23:01 kid51 joined
whiteknight nwellnhof: a context-threaded runcore is a type of runcore 23:02
it's a way to dispatch ops
lucian whiteknight: btw, i think runcores are an awesome feature of parrot 23:03
a way to market parrot would be to look at existing mainline vms and see what they can't do 23:04
plobsing we've already neutered the most interesting aspect of runcores for practical reasons 23:05
op-dispatch strategy is fixed
lucian ah. oh well 23:06
plobsing because otherwise we need separate oplibs and supporting stuff for every runcore
I'd like to see op-dispatch strategy re-introduced as a compile-time-fixed option
what our runcores currently provide is orthogonal to op-dispatch strategy 23:07
23:09 vmspb left
plobsing they're still really cool though. just less cool than the name implies 23:11
whiteknight a context-threaded runcore could easily be added to parrot as-is
because we could still be using the op function bodies
lucian right 23:12
nwellnhof is context-threading some kind of poor man's JIT?
sorear no 23:13
context threading is basically just a reinvention of subroutine-threaded-code
lucian is it this? en.wikipedia.org/wiki/Threaded_code
sorear check out any Forth book for an explanation of that term 23:14
plobsing it is a JIT in some sense. it has all of the requirements with fewer advantages. 23:15
IIUC, you need to deal with W^X and generate machine code. 23:17
lucian it's pretty cool. i do think it's named horribly
plobsing: python's threaded interp is pure C
plobsing lucian: is it context threaded?
op-dispatch strategy is commonly refered to as "threading" regardless of what type it is 23:18
lucian plobsing: don't think so
plobsing: bugs.python.org/issue4753 23:19
nothing fancy at all, just a compiler trick
23:20 Andy left
plobsing that's what cgoto (also cgp) did 23:20
arnsholt Does anyone know why PAST::Op(:pasttype<try>) doesn't pop_eh until the end of the recovery clause?
plobsing and it was worth it sometimes. for some workloads our branch mispredict went from 100% (which it is effectively all the time right now) to 5%. 23:21
but most workloads aren't dominated by op dispatch
sorear plobsing: "generate machine code" is not boolean
plobsing: the x86 instruction encoding is incredibly complex, and I don't fancy writing a full JIT (even non-optimizing), ever 23:22
plobsing sorear: anything that generates machine code at runtime can be classified as JIT in some sense.
tadzik is amd64 any better?
sorear but remembering 9F xx xx xx xx where *(int*)(ip+1) = dest - (ip + 5) isn't that hard
lucian i think a llvm jit would be more useful
tadzik or is it just extended x86?
sorear and yes, I know that by heart
tadzik: amd64 is almost a compatible extension of x86 23:23
lucian i think if you use amd64 in 64 more it's better
sorear tadzik: they axed setalc to make room for a new encoding form
tadzik axed setalc?
lucian you have to put in x86 mode for full compat
23:30 plobsing left 23:31 nwellnhof left 23:34 nwellnhof joined 23:35 plobsing joined
whiteknight the benefit to context-threading is that it's not the same weight as a JIT, and you end up with huge cache benefits. opdispatch costs drop down to zero 23:35
admittedly our op dispatch costs are not high right now
at least not comparitively
plobsing cgoto had effectively the same advantage. see how many people cared. 23:36
whiteknight in Lorito world we will conceivably have to execute many more ops to perform the same operations
plobsing: cgoto was a completely different architecture and wasn't supported on one of our key target platforms
context threading will be perfectly supported, requires no fancy features from C99, and can reuse the fast/slow core op libraries and op bodies 23:37
plobsing yes Lorito might make op dispatch important. we should address this when it happens or when it become clear that it is imminent
whiteknight: at the cost of dirtying PBC with a direct-threading equivalent.
whiteknight I don't think runcore improvements are high-priority right now in any case 23:38
if somebody implemented it and delivered it to us on a silver platter, awesome. 23:39
sorear whiteknight: now that W^X et al exist I don't think the benefit of context-threading is as big as it once was
whiteknight what do you mean "W^X"
?
sorear write xor execute
plobsing Write XOR eXecute
memory access modes 23:40
whiteknight ah, okay
plobsing modern OSen often enforce that at any given time only one of these can be set
sorear whiteknight: ten years ago, when everybody who could run real software ran 32-bit x86 and execute protection wasn't used, you could write a decent context threader in 200 lines of C since JMP, CALL, RET are a tiny subset of the complexity of an assembler 23:41
nowadays:
whiteknight it's still no so bad with mmap. And we have a PMC for mmapping
sorear - x86_64 and ARM exist on the desktop
- a lot of OSes implement execute protection in mutually incompatible ways
plobsing not to mention, from the explanations I've seen, CTT (context threaded), like DT (direct threaded), requires writting into the op stream. this means the mmapped pages are dirty and cannot be shared. 23:44
Tene arnsholt: you don't pop_eh until the end of the handler because for many situations you want to leave the handler active; anything with resuming the exception, basically
arnsholt: Let me know if you want more information or examples of that
arnsholt Resuming the exception is a good point 23:45
Tene arnsholt: when providing flow control support to loops, you don't want to be pushing and popping the eh over and over 23:46
afk meeting
dalek rrot: 9dadd29 | jkeenan++ | / (19 files):
Per TT #2004: Remove remaining references to former '--cxx' option to Configure.pl.
arnsholt Indeed a good point. But it's a bit annoying in my case, which is essentially try { function() } catch { /* Complicated recovery and condition checking goes here. */ } 23:50
Ideally, I'd have the pop_eh at the top of the recovery, but if I add pop_eh at the top of my recovery PAST it'll blow up on the automatic pop_eh at the end if it gets through the recovery without a rethrow 23:53
dalek TT #2004 closed by jkeenan++: Where did Configure.pl option '--cxx' go to? 23:54
TT #2004: trac.parrot.org/parrot/ticket/2004
whiteknight arnsholt: you can create a new mini-handler in the try section, to catch errors from your error handler
then do pop_eh\\npop_eh
23:56 ryan left
arnsholt Hmm. That'd work 23:56
A bit hacky, but working and hacky beats clean and broken
lucian hmm, i might play with writing bits of parrot with clay 23:59
i mean, in clay
can the gc be plugged in if written in something other than C?
like plugin in a .so?