Parrot 6.3.0 "Black-cheeked Lovebird" | parrot.org/ | Log: irclog.perlgeek.de/parrot | #parrotsketch meeting Tuesday 19:30 UTC
Set by moderator on 15 April 2014.
01:23 FROGGS_ joined 02:01 particle joined 02:39 rurban1 joined 02:42 cooper joined 02:44 rurban2 joined 03:48 plobsing joined 04:31 Psyche^ joined 05:50 rurban1 joined 05:52 rurban2 joined 06:53 rurban1 joined 07:53 rurban1 joined 08:07 particle joined 08:49 basiliscos joined 08:54 rurban1 joined, FROGGS joined 09:55 rurban1 joined 10:56 rurban1 joined 11:56 rurban1 joined 12:57 rurban1 joined 13:39 bluescreen joined 13:49 bluescreen_ joined 13:58 rurban1 joined 14:15 rurban1 joined 14:23 particle joined 14:58 me joined
me Hi, is there interest in rewriting the parrot/tools in pir or pasm ? 15:14
FROGGS me: hi 15:15
me: what could be the reason to do that?
I mean, my guess is that at least some of them are used to build parrot, so you would have a bootstrapping problem if these were not Perl 5 scripts anymore 15:17
me more streamlined development environment. Ive been tinkering with parrot and I noticed I had to jump through a few hoops to dabble with the pct. ie, i had to install strawberry perl. 15:18
FROGGS I see
me i thought it might be nice if you could do it all from within parrot itself
FROGGS but as I said, you can only rewrite scripts that are not used to build parrot
rurban there was interest, and it was an explicit goal once, yes. 15:19
ops2c for example was previously perl5, and is now nqp. This turned out to be bad. 15:20
me maybe I will start with a few dev tools like make_language, and bring my progress to parrot
rurban make_language should be easy, yes.
me awesome, i thought id ask here before i started. 15:21
FROGGS me: but anyway, I do not think you can come around installing a Perl 5... you'll need to run Configure.PL at least :o)
me yea, i will start with the easy stuff, make_language seemed simple and self contained 15:22
FROGGS me: have fun
brb &
rurban but we rather need better examples, benchmarks and tests if you want to learn pir. pasm is deprecated. 15:23
or pir libraries, like semaphores or threaded hyper-op helpers for perl6
the tools are pretty hard to maintain in pir/nqp. perl5 is usually easier 15:24
me im interested in seeing golang on parrot
rurban that would a good lang to target, yes
go or rust or elixir or D 15:25
me these small project will get me familiar with parrot
running golang on parrot would be nice, golang has very little supported platforms 15:26
rurban because they have their own compiler and linker. but now they got gccgo back in 15:27
golang would be a good fit, because of select and channels. moarvm did the same recently but they still have their lock based threading model, while parrot data structures need no locks 15:29
we need to defer writes to the owner, which is a different kind of beast. but fits better to golang
15:31 bluescreen joined
me ok, I will get my feet wet with the dev tools rewrites, and learn more about parrot. I might take up the golang challenge. 15:31
rurban :) the parser and compiler will be easy and fun. but the lib support is not that easy then. parrots idea was to share lib code accross languages (as in .net). but we are still lacking 15:32
I'm not so happy with dev/tools rewrites btw. 15:33
me Why? 15:35
I thought it would be nice to have the dev tools written in a langauge the vm understood. 15:36
rurban nice yes, but maintaining perl5 tools is even nicer. we still have no dev tools to deal with pir code. no debugger
missing libraries 15:37
refactoring previous tools from perl5 to pir turned out bad for parrot (jit, ops2c)
just saying that it is not the best idea 15:38
me oh, seemed like a cool project that I could use to get myself familiar with parrot, rewriting one tool at a time, and maybe even digging deeper into the core of parrot 15:40
I will take what you said into consideration and rethink my approach to learning parrot. thanks for responding. 15:44
rurban :) 15:47
but converting make_language is not a problem. would be an easy enough project and we don't care that much about it 15:48
me a few tools are self contained, so it shouldn't be a big deal. 15:49
rurban we were considering removing our old nqp-rx and use the new upstream one, but we have now tools requiring it. 15:50
15:54 Chirag joined
Chirag Hey! 16:00
I am trying to add WBs to arrayiterator.pmc but I am not sure if I am doing it right..
For instance, I changed
VTABLE FLOATVAL pop_float() {
-----
SET_ATTR_pos(INTERP, SELF, --pos);
return VTABLE_get_number_keyed_int(INTERP, array, pos);
}
to --> 16:01
VTABLE FLOATVAL pop_float() {
-----
SET_ATTR_pos(INTERP, SELF, --pos);
PARROT_GC_WRITE_BARRIER(interp, _self);
arrayiterator.c gets updated accordingly but 'make' still shows TODO GC WB to pop_float
Where am I going wrong?
rurban Because you need to change the pmc2c compiler to omit that warning if you see that the WB is already there :) 16:03
I just added that warning, but the code is not complete nor correct yet
Chirag oh.. I was expecting it to magically disappear :D 16:04
rurban ah, and write SELF instead of _self in .pmc files
:)
Chirag and INTERP
right?
16:06 FROGGS joined
rurban yes 16:14
Chirag rurban: how to change the pmc2c compiler?
to omit the warning?
rurban look at the code, and my changes to pmc2c in the branch 16:17
Chirag ok.. 16:18
rurban see # Skip methods with manual WBs. 16:33
next if $self->vtable_method_has_manual_wb($name);
so we can add manual :manual_wb attributes to each method. see capture.pmc and fixedintegerarray.pmc 16:35
or we can parse for PARROT_GC_WRITE_BARRIER in the body 16:36
and set $method->attrs->{manual_wb} then
Chirag ok.. i was going through pmc2c/emitter.pm .. but that todo warning is for all the pmc files .. I ll try what you have suggested 16:38
rurban add_write_barrier is wrong. it should really use rewrite_RETURNS 16:40
I'll clean it up a bit
`git grep RETURN\\( src/pmc` shows the already correct code which can get WB automatically 16:46
lower case return not 16:47
Chirag should I make all the ones i edit - manual > 16:50
? 16:51
rurban wait a bit. I'll improve pmc2s 16:53
You can add manual WB where needed, and pmc2c will pick it up. If not, and you use RETURN() pmc2c will WB it automatically 16:54
16:54 bluescreen joined
rurban and be sure to make clean before make, because the pmc vtables are cached. 17:13
Chirag I think I am missing a trick here..
according to me, I have two alternatives - automatic or manual WB 17:14
1. automatic does not require me to add "PARROT_GC_WRITE_BARRIER(INTERP, SELF);" or "manual_wb"
"RETURN(VTABLE_get_number_keyed_int(INTERP, array, pos));" should suffice
2. manual would look like -
VTABLE FLOATVAL pop_float():manual_wb {
}
rurban 3rd case: manual by simply adding a PARROT_GC_WRITE_BARRIER or /* no PARROT_GC_WRITE_BARRIER 17:15
I'm just coding this one
Chirag so i have got that right?
rurban RETURN did only work for PCCMETHOD's, I'll add support for all method types now 17:16
yes
exactly
Chirag but the first case doesnt get rid of the TODO warning and the second case throws an error of RETURN being an implicit declaration 17:17
oh only PCC methods
rurban extra work is only needed for cases without manual PARROT_GC_WRITE_BARRIER yet, and with multiple returns, or where the single last return bla needs a WB
current work: gist.github.com/rurban/11224739 17:18
Chirag but why is the first case not getting rid of the warning? 17:19
rurban the warning is wrong
Chirag oh.. 17:20
rurban and add_write_barrier is also wrong 17:29
17:50 rurban1 joined 17:52 rurban2 joined 17:55 benabik joined
Coke eliminating in-repo tools that require nqp-rx is probably a good idea, esp. since we have another language written for parrot that we ship. We should probably standardize on that one. (And anything that happens post-build that is currently using perl5 could be switched to be written in that lang also. It's just the stuff that happens pre-build that's tricky) 18:01
(^^ from deep in backlog)
18:36 rurban1 joined
Chirag rurban: In default.pmc, there are no pop_float, pop_integer ... functions; 19:15
but default.c has them
Where do I put the write barriers? there are no values returning for any function 19:17
rurban default needs none I guess 19:37
well, a few: add_method, assign_pmc, and the arithmetic methods which return PMCs 19:39
divide 19:40
the other methods are auto-generated by pmc2c
because default and undef are fallbacks 19:41
19:48 bluescreen joined
Chirag so i ll just ignore the TODO warnings for them 19:54
rurban yes. I added a new :no_wb attribute in my gist 19:55
:manual_wb if the WB is hidden in a macro (like capture)
:no_wb if no WB is needed at all 19:56
Chirag I have used manual_wb even if its not hidden 19:57
rurban yeah, but we could remove it when the compilers sees the WB
19:58 cooper joined
Chirag I have pushed two commits till now .. can u please take a look to see if i am doing it right? 19:58
rurban well, for arrayiterator.pmc the :manual_wb's are not really needed. we just need to improve pmc2c. the WB look good 20:01
same for callcontext.pmc 20:02
Chirag so i ll remove manual_wb from all of them? 20:03
rurban yes, it's too much noise 20:04
Chirag alright so manual .. only when WB is hidden
rurban or :no_wb when no WB is needed
Chirag so that would be for all the remaining functions .. 20:05
rurban yes 20:06
all which do not create a new PMC
with pointers to the old one 20:07
so simple INTVAL, FLOATVAL, STRING are safe without
this will speed up our methods measurably
Chirag i cant update my branch with your changes now? 20:08
rurban see e.g. for glossary www.iecc.com/gclist/GC-algorithms.html 20:09
my changes are not really good enough yet. add_write_barrier still broken
but you can try to debug it
Ok, I'll push it as WIP 20:10
Chirag I came across this before.. will give it another read 20:12
dalek rrot/rurban/pmc2c_orig: d3f21ff | rurban++ | lib/Parrot/Pmc2c/ (4 files):
[pmc2c] WIP :no_wb, detection of :manual_wb, RETURN() also for VTABLE methods

add_write_barrier now calls Parrot::Pmc2c::PCCMETHOD::rewrite_RETURNs, but this does not work yet.
rrot/rurban/pmc2c_orig: 94cecb2 | rurban++ | src/pmc/ (2 files):
[pmc] partially use new WB markers
rurban WB is only needed when GC pointers (i.e. PMC stuff) interact with each other during a GC 20:13
INT, FLOAT are atomic
you can rebase now 20:14
git fetch; git rebase rurban/pmc2c_orig
you can try to debug add_write_barrier. the manual_wb attribute must be visible for the method, but is not 20:15
You can increase your perl debugging foo :)
step until gen_c, then set a breakpoint at add_write_barrier 20:16
perl -d -Ilib tools/build/pmc2c.pl --c src/pmc/arrayiterator.pmc
Chirag I ll change the manual_wb part and look into this tomorrow .. early classes :( 20:18
rurban perl -d -Ilib tools/build/pmc2c.pl --dump src/pmc/arrayiterator.dump it is 20:19
The trick is to tell the compiler to do most of the stupid and obvious work
no prob, have fun
Chirag thanks! bye :)
dalek rrot/rurban/pmc2c_orig: 164fd19 | rurban++ | lib/Parrot/Pmc2c/Parser.pm:
[pmc2c] set manual_wb for :no_wb and PARROT_GC_WRITE_BARRIER in --dump

detect it now earlier, in the parser
20:55
rrot/rurban/pmc2c_orig: 8a61e52 | rurban++ | lib/Parrot/Pmc2c/Method.pm:
[pmc2c] small decl optimization
22:01
rrot: 532d915 | rurban++ | examples/shootout/regexdna.pir:
[examples] enable regexdna.pir argv to allow gdb debugging

we now accept an optional filename arg to regexdna.pir to study GC write barrier crashes with gdb --args ./parrot examples/shootout/regexdna.pir examples/shootout/regexdna.pir_input
parrot/rurban/pmc2c_orig: 3e8b2f5 | rurban++ | / (49 files): 22:02
parrot/rurban/pmc2c_orig: pmc2c: inline gc write barrier into vtable methods
parrot/rurban/pmc2c_orig:
parrot/rurban/pmc2c_orig: removed wrong UNUSED(INTERP) and UNUSED(SELF)
parrot/rurban/pmc2c_orig: some methods with return values are marked TODO, need to add the write barriers manually.
parrot/rurban/pmc2c_orig:
parrot/rurban/pmc2c_orig: A missing write barrier caused one error:
parrot/rurban/pmc2c_orig: t/examples/shootout.t: 16 examples/shootout/regexdna.pir SEGV
parrot/rurban/pmc2c_orig:
parrot/rurban/pmc2c_orig: TODO GC write barrier to:
parrot/rurban/pmc2c_orig: default.pop_float
parrot/rurban/pmc2c_orig: default.pop_integer
parrot/rurban/pmc2c_orig: default.pop_pmc
parrot/rurban/pmc2c_orig: default.pop_string
parrot/rurban/pmc2c_orig: default.shift_float
parrot/rurban/pmc2c_orig: default.shift_integer
parrot/rurban/pmc2c_orig: default.shift_pmc
parrot/rurban/pmc2c_orig: default.shift_string
parrot/rurban/pmc2c_orig: CallContext.shift_pmc
parrot/rurban/pmc2c_orig: CallContext.shift_string
parrot/rurban/pmc2c_orig: Key.shift_pmc
parrot/rurban/pmc2c_orig: ArrayIterator.pop_float
parrot/rurban/pmc2c_orig: ArrayIterator.pop_integer
parrot/rurban/pmc2c_orig: ArrayIterator.pop_pmc
parrot/rurban/pmc2c_orig: ArrayIterator.pop_string
parrot/rurban/pmc2c_orig: ArrayIterator.shift_float
parrot/rurban/pmc2c_orig: ArrayIterator.shift_integer
parrot/rurban/pmc2c_orig: ArrayIterator.shift_pmc
parrot/rurban/pmc2c_orig: ArrayIterator.shift_string
parrot/rurban/pmc2c_orig: Task.pop_pmc
parrot/rurban/pmc2c_orig: Capture.pop_float
parrot/rurban/pmc2c_orig: Capture.pop_integer
parrot/rurban/pmc2c_orig: Capture.pop_pmc
parrot/rurban/pmc2c_orig: Capture.pop_string
parrot/rurban/pmc2c_orig: Capture.shift_float
parrot/rurban/pmc2c_orig: Capture.shift_integer
parrot/rurban/pmc2c_orig: Capture.shift_pmc
parrot/rurban/pmc2c_orig: Capture.shift_string
parrot/rurban/pmc2c_orig: HashIterator.shift_integer
parrot/rurban/pmc2c_orig: HashIterator.shift_pmc
parrot/rurban/pmc2c_orig: HashIterator.shift_string
parrot/rurban/pmc2c_orig: ImageIOThaw.shift_float
parrot/rurban/pmc2c_orig: ImageIOThaw.shift_integer
parrot/rurban/pmc2c_orig: ImageIOThaw.shift_pmc
parrot/rurban/pmc2c_orig: ImageIOThaw.shift_string
parrot/rurban/pmc2c_orig: ResizablePMCArray.pop_float
parrot/rurban/pmc2c_orig: ResizablePMCArray.pop_integer
parrot/rurban/pmc2c_orig: ResizablePMCArray.pop_pmc
parrot/rurban/pmc2c_orig: ResizablePMCArray.pop_string
parrot/rurban/pmc2c_orig: ResizablePMCArray.shift_float
parrot/rurban/pmc2c_orig: ResizablePMCArray.shift_integer
parrot/rurban/pmc2c_orig: ResizablePMCArray.shift_pmc
parrot/rurban/pmc2c_orig: ResizablePMCArray.shift_string
parrot/rurban/pmc2c_orig: Object.pop_float
parrot/rurban/pmc2c_orig: Object.pop_integer
parrot/rurban/pmc2c_orig: Object.pop_pmc
parrot/rurban/pmc2c_orig: Object.pop_string 22:03
parrot/rurban/pmc2c_orig: Object.shift_float
parrot/rurban/pmc2c_orig: Object.shift_integer
parrot/rurban/pmc2c_orig: Object.shift_pmc
parrot/rurban/pmc2c_orig: Object.shift_string
parrot/rurban/pmc2c_orig: OrderedHashIterator.pop_pmc
parrot/rurban/pmc2c_orig: OrderedHashIterator.shift_pmc
parrot/rurban/pmc2c_orig: OrderedHashIterator.shift_string
parrot/rurban/pmc2c_orig: PMCList.pop_pmc
parrot/rurban/pmc2c_orig: PMCList.shift_pmc
22:04 dalek joined 22:09 rurban1 joined 22:10 rurban2 joined 22:17 travis-ci joined
travis-ci [travis-ci] parrot/parrot#1025 (master - 532d915 : Reini Urban): The build passed. 22:17
[travis-ci] Change view : github.com/parrot/parrot/compare/4...2d915c6992
[travis-ci] Build details : travis-ci.org/parrot/parrot/builds/23630093
22:17 travis-ci left 23:04 rurban1 joined 23:05 benabik joined 23:09 davidfetter joined 23:15 rurban1 joined 23:19 janus joined 23:41 benabik joined 23:56 benabik joined