jnthn On my box, even a Java say hello world is > 10 MB... 23:00
timotimo for memory usage, at least.
as in: how little can you possibly pay
jnthn I'm sure we can slim it down a bunch from how it is now. 23:01
But not sure we'll get it *that* far down.
timotimo right. 50 megabytes seems reachable
since we're already at ~98
maybe i should really make that heap analyser before diving into the littlebigint stuff again. 23:05
01:25 jnap joined 02:23 colomon joined 02:25 jnap joined 03:26 jnap joined 03:38 cognominal joined 04:27 jnap joined 05:28 jnap joined 07:06 FROGGS joined
FROGGS o/ 07:08
diakopter o! 07:24
07:25 tokuhirom joined 07:29 jnap joined 08:09 tgt joined 08:37 odc joined
nwc10 jnthn: trying this paste.scsys.co.uk/296660 to stop wrongly chasing "REPR" on STables, and I get this paste.scsys.co.uk/296661 which makes me think that it was concealing another garbage collection bug... :-( 08:42
not sure if I will have time to torture *that* one out
FROGGS nwc10: I did pretty much the same about 20 minutes ago :o) 08:48
that is, applied the STable check, and let my rakudo build explode
and then I thought: I am not supposed to do that :o) 08:49
hoelzro: you need to take care of MVMObject *env when you allocate things in here: github.com/hoelzro/MoarVM/commit/5...dae81R1058 08:52
hoelzro I have to free it after I'm done?
FROGGS no, not that 08:53
when you allocate (or encode a string), you trigger a gc run
and then your pointers are likely to move
hoelzro oh, I see
FROGGS and if you don't temp_root or MVMROOT them, you're looking at outdated pointers
the rule is: is a pointer retrieved before, and used after an allocation, root it 08:54
hoelzro does that just apply to objects, or any Moar data (such as strings)? 08:55
I was kinda just doing by example
FROGGS only MVMObjects as I see it 08:57
nwc10: correct?
because a MVMString has no MVMCollectible header 08:58
nwc10 I don't know the answer to that one 08:59
hoelzro I'll look for other examples of MVMObject 09:21
thanks, FROGGS!
FROGGS hoelzro: either MVMROOT(tc, env, { <code here> }); 09:23
MVM_gc_root_temp_push(tc, (MVMCollectable **)&env);
and a pop later 09:24
hoelzro alright 09:26
FROGGS hoelzro: you can also do a pop_n, if you intend to pop several 09:27
09:31 jnap joined
jnthn And MVMString is actually an MVMObject too. Also, MVMSTable would need rooting, though you rarely hold those. 10:10
nwc10 bother. Yaks stacked - 2 10:19
-2) figure out why the torture goes SEGV as of rebasing a week or more ago 10:20
-1) use torture to figure out this bug
actually maybe I have an off-by one
-0) fix this bug
and *then* maybe a few more before I can do the thing I actualyl want to do
10:23 ggoebel1113 joined 10:31 jnap joined
FROGGS nwc10: what is the thing you want to do, ooc? 10:34
nwc10 reduce the object header by 1 pointer 10:36
hoelzro I don't know if I ever got an answer to this -- is nqp::close($pipe) supposed to silently fail? 10:55
the JVM openpipe test closes a handle twice, and doesn't seem to expect complaints 10:56
FROGGS hoelzro: dunno 10:59
jnthn Does Perl count double-close as an error, in general? 11:01
FROGGS jnthn: you mean Peril? the old one?
nwc10 $ perl -e 'close STDIN or warn $!;' -e 'close STDIN or warn $!;' 11:03
Bad file descriptor at -e line 2.
can camelia do that?
moritz no, camelia only does 6
it's not onion or camel, after all :-)
FROGGS perl -E 'use strict; use warnings; open(FH, ">hurz"); print(FH "hello"); close(FH) or warn 1; close(FH) or warn 2;'
2 at -e line 1.
yeah 11:04
hoelzro I think I found a bug in close, actually 11:07
after closing, the old value of fd is still in the handle 11:08
so if that fd is re-distributed to the program by the OS, a double close could accidentally close an unrelated file
small chance, but it's possible
especially in a long running program
FROGGS hoelzro++ 11:11
hoelzro I'll fix that tonight
jnthn yes, that wants fixing 11:12
hoelzro++
hoelzro \o/
I'm helping!
FROGGS of course you are
brb
11:19 tgt joined 11:21 woolfy1 joined 11:24 lizmat joined 11:29 tgt joined
hoelzro can I configure it so that libuv is built with debugging symbols? 12:03
FROGGS hack the makefile and make clean && make install ? 12:09
hoelzro ok, so get my hands dirty =) 12:11
jnthn nqp: say(nqp::can(nqp::null(), 'dugong')) 12:12
camelia nqp-parrot: OUTPUT«Null PMC access in find_method('dugong')␤current instr.: '' pc 42 ((file unknown):69510504) (/tmp/tmpfile:1)␤»
..nqp-moarvm: OUTPUT«(signal SEGV)»
..nqp-jvm: OUTPUT«Can not call method 'dugong' on a null object␤ in (/tmp/tmpfile:1)␤ in (gen/jvm/stage2/NQPHLL.nqp:1099)␤ in eval (gen/jvm/stage2/NQPHLL.nqp:1085)␤ in evalfiles (gen/jvm/stage2/NQPHLL.nqp:1291)␤ in command_eval (gen/jvm/stage2/NQPHLL.nqp:1195)␤ in …»
FROGGS jnthn: do you have any pointers (haha!) about my v5 STable problem? 12:16
jnthn FROGGS: Well, mostly just working out where the STable is repossessed, and why... 12:17
FROGGS hmmm
dalek arVM: 4080274 | jnthn++ | src/6model/6model.c:
Make nqp::can have null check like nqp::findmethod
12:23
arVM: 57206b0 | jnthn++ | src/core/ (2 files):
Bring lookup semantics in line with other backends
FROGGS hmmm, it calls Perl5::Grammar.add_categorical for pre-/infixes that are in Perl5::Terms.pm which is v6 code 12:32
12:33 jnap joined
jnthn That should mix in rather than modify the existing thing... 12:34
FROGGS true 12:35
jnthn I did fix one thing that made it not do so, though
Which is that the cache flushing would touch it
I added scwbdisable and scwbenagle around that 12:36
FROGGS: github.com/perl6/nqp/commit/080ce0...a05d83a5d9
12:41 tgt joined
FROGGS I think the problem is that v5 loads Perl5::Terms as a v6 module, but it does it itself, when it should tell rakudo to do it 12:51
wait no, I mean sort of... 12:53
kinda
hmmm
the question is: why does it use the Perl6::Grammar for parsing but then calls my add_categorical? 12:54
moritz
.oO( it's a kind of magic )
12:55
FROGGS
.oO( Merlin's Pants! )
12:56
Perl6::Grammar calls add_categorical on $/.CURSOR, I'll change that to self for testing 13:05
13:34 jnap joined 13:42 dalek joined
moritz somehow I have MANIFEST files in my 3rdparty submodules 14:07
is that an artifact of something I did? or do others have that too?
jnthn moritz: I see that it thinks there's untracked stuff in 2 of my 3rdparty submodules... 14:08
dalek arVM: 52fc525 | moritz++ | .gitignore:
.gitignore release tarballs
14:09
14:23 jnthn joined 14:35 jnap joined 14:42 jnap joined
timotimo is digging around in the python api docs for gdb 14:50
FROGGS I am switching back to $/.CURSOR.add_categorical now, but do a rebless of the cursor when switching grammars
timotimo and now i'll have to dig deeper into the moarvm code so that i can write the automated garbage collector analyzer
does run_gc seem like a good entry point? 14:51
diakopter what do you want to analyze 14:52
timotimo ever^H^H^H^Has much a spossible 14:53
like what kinds of objects are how common on the heap 14:54
how many of each type get thrown out, how many get kept, how many get promoted to gen2
how many things get kicked out of the gen2
that sort of thing
since the gc already runs over all that data anyway, it'd be a good place to look, IMO.
diakopter hm 14:55
timotimo hm?
dalek arVM: 96dc4ea | diakopter++ | / (6 files):
skeleton parts for call profiling
timotimo i think run_gc is a very good place to look
diakopter hm - to summarize all of that, you could count how many gc runs each object lives 14:56
then when it's destroyed, write the data to a log in memory or something 14:57
of the reprname, typename (if available)
timotimo i'm working on a gdb plugin 14:59
i can just have a python-level dict collect all that data
in as much detail as i'd like
the good thing is you don't have to compile the support into the moarvm binary, all you need is gdb 15:00
FROGGS Incompatible MROs in P6opaque rebless :o( # though, it feels a bit saner now
timotimo and you can put the stats gathering into it only for select runs/frames/threads/... 15:01
really, you can have an arbitrary watchpoint trigger the analysis
that's pretty neat
one thing that'll be a bit harder is to identify the classes properly 15:06
since getting the name of an object's class requires me to do some runloop trickery :\
so i'll probably end up counting lots and lots of P6opaque objects
okay, need to get off this train soon
15:13 tgt joined 15:16 ggoebel1113 joined 15:59 tgt joined
timotimo i can't add breakpoints with commands to gdb from python, except by using the eval facility of gdb 16:17
so i'll probably have to use "step to" and friends from python
jnthn Rakudo Moar builds CORE.setting a little faster than Rakudo JVM on my box these days. 16:43
Not quite a fair comparison, mind, since Moar doesn't have to build hundreds of lines of concurrency stuff 16:45
[Coke] all is fair. 16:51
TimToady All for fair, and fair for all! --the Fair Musketeers 16:59
timotimo gdb apparently won't let me do things the way i had hoped to :( 17:10
so i'll have to spit out data from moarvm - into a file perhaps - and then postprocess that 17:11
because i don't want to do the data analysis in C :|
17:20 benabik joined 17:23 FROGGS joined
FROGGS jnthn: I think I have worked around that STable problem 17:38
jnthn FROGGS: yay 17:39
FROGGS it is like $/.CURSOR is still the v5 one when switching back and forth and then try to mixin an infix in a v6 block 17:40
and since I don't need these as proper infixes, I can just declare them as ::('infix:<P5+>'), and can still call them as subs 17:41
so I don't even have to touch Perl5::Actions 17:42
timotimo sounds good 17:43
how far do you get after that? :)
FROGGS still failing like 80% of what v5-p passed
openpipe is one of the big things there 17:44
because the test suite needs it
timotimo good point. 17:47
since you've worked around the problem yourself, does that mean you won't do openpipe on moar now? :(
well, at least for windows
FROGGS I still do it of course
I am not a git :o)
timotimo :) 17:48
18:57 japhb_ joined 19:00 jnap joined
FROGGS ll lib/Perl5/Config.* 19:38
-rw-r--r-- 1 froggs froggs 580313 Jan 28 18:02 lib/Perl5/Config.jar
-rw-r--r-- 1 froggs froggs 33240641 Jan 30 20:34 lib/Perl5/Config.moarvm
-rw-r--r-- 1 froggs froggs 53899 Jan 26 20:16 lib/Perl5/Config.pm
Project Euler
err 19:39
LOL!!
jnthn: --------------^
timotimo wat. 19:40
FROGGS that explains why it takes like ten minutes to compile
it has to pull all these bytes of its sleeves 19:41
timotimo what is all that data? >_>
FROGGS I guess it is a result of the heavy "sub ::('foo')(...) {...}" usage 19:42
v5 seems to be a nice test case for moar :o)
maybe because of the absurdities its author does 19:43
19:48 jnap joined
FROGGS perl6-m -I/home/froggs/dev/v5/lib --stagestats --target=mbc --output=lib/Perl5/Config.moarvm lib/Perl5/Config.pm 19:59
Stage start : 0.000
Stage parse : 965.384
jnthn I'll bet it's deriving shitloads of languages and then keeping the NFAs somehow... 20:07
FROGGS jnthn: either that, or the 1k lines hash it contains is expensive 20:09
because other modules like English.pm depend on Terms.pm too, but are only 3meg in size
damn 20:10
declaring subs like ::('infix:<P5+>') call add_categorical too :o(
so I got my STable problem back
damn
20:32 eternaleye joined
timotimo ;( 20:32
FROGGS I just put a return in my add_categorical which is called accidently :/ 20:34
timotimo :<
masak add... catgegorical? 20:40
masak perks up
did somebody say category theory? :)
FROGGS no, not at all :o)
FROGGS hides
jnthn shoots a terminal arrow at masak 20:43
masak hehe, it's objects that are terminal, not arrows... :) 20:44
jnthn bah 20:45
masak maybe I should hold a category theory session on IRC... :> 20:47
masak .oO( #perl6-cat-theory )
FROGGS hmmm, if I would declare my subs like ::('infix<P5+>') it would not be recognized as a categorical
jnthn FROGGS: Uh, you're using a syntax explicitly intended to defer lookups at runtime to try and mutate the grammar at compile time? :) 20:48
Unless you're using that to set up an export hash...
stash
In which case you want the & on there and a : after infix.
FROGGS I don't want to mutate the grammar at all 20:49
because no one will actually use infix P5+
they will type + which results in a call to sub infix:<P5+> 20:50
jnthn ah
FROGGS so I don't need that extra rubbish :o) 20:51
and I got rid of the monkey typing today too fwiw
jnthn hopes his wrist is fully better soon so he can stop monkey typing... 20:52
20:52 jnap joined
FROGGS my hands are fine atm, even when I hack like 14 hours a day 20:53
timotimo wow
do yourself a favor and start using workrave 20:54
jnthn Well, the wrist is more thanks to landing on it when I slipped on some ice a few days back...
timotimo :(
masak :( 21:03
21:03 benabik joined
FROGGS jnthn: it took ages again because my custom postcircumfix tried to match everywhere again 21:21
jnthn: here, look yourself :o) gist.github.com/FROGGS/f2784975d7553ca15d5b 21:23
takes 10s as it is, an 0.5s when the hash's content is commented 21:24
and takes 0.2s when only the postcircumfix is commented
the resulting file size is 1_758_864, but only 435_232 when the hash's content is commented, and only 12_598 without the postcircumfix 21:26
diakopter FROGGS: lolololololol 21:27
FROGGS :o)
jnthn What on earth is in the hash... :)
FROGGS as I said, v5 is weird enough to highlight such strange things :o)
TEXT!!
bloody text
jnthn Nearly nothing...wtf...
FROGGS *g* 21:28
FROGGS .oO( A design flaw in the VM? How much has to be rewritten? Are there already blog posts about the end of MoarVM? )
:P
jnthn: I can provide a bigger hash if you want to see it compiling for >900s :o) 21:31
but I guess 10s is nice enough
diakopter well
the dumper doesn't dump the serialized stuff
jnthn FROGGS: If you remove the postcircumfix, does it make a difference?
FROGGS jnthn: yes, 0.2s compile time and a tinsy file 21:32
diakopter only thing I can think of is inadvertent duplication of data by the serializer
jnthn OK, so it's nothing to do with the hash
FROGGS jnthn: no, I think random code will behave the same 21:33
jnthn FROGGS: If you just have a file of general bits of code and that postcircumfix at the top, does it do the same?
FROGGS I'll check
jnthn OK. How high is memory use with/without the postcircumfix? Notably different also?
diakopter: I'm suspecting it's not the serializer itself; I think it may just be Doing Its Job 21:34
diakopter: And it's the stuff it's being asked to do that's the problem.
FROGGS yes, fifty lines of "1 + 2 + 3 + 4;" and that postcircumfix take >20s to compile
42s to be exact 21:35
with: 27.68user 0.05system 0:27.75elapsed 99%CPU (0avgtext+0avgdata 232820maxresident)k 21:36
0inputs+23160outputs (0major+62425minor)pagefaults 0swaps
without 0.35user 0.04system 0:00.40elapsed 99%CPU (0avgtext+0avgdata 102448maxresident)k
0inputs+24outputs (0major+26689minor)pagefaults 0swaps
jnthn Whee 21:37
OK, I don't *know* what it is, but that gives me some clues. Thanks.
I really should work on my slides right now...
But will see if I can get at it tomorrow or the weekend. 21:38
FROGGS maybe here is something obviously wrong, dunno: github.com/rakudo/rakudo/commit/6a...86daa57e75
no hurry, nobody is using that atm :o)
diakopter it's not a sev 1? ;)
FROGGS no, certainly not :o) 21:39
jnthn
.oO( SIGSEV1 )
FROGGS no problem, I got one atm :/ 21:40
I wonder... src/core/interp.c:252 21:41
bindlex_no
hmmm
dalek arVM: d44d015 | (Tobias Leich)++ | src/core/interp.c:
find_lex_by_name can return NULL, check for it
21:53
21:53 jnap joined
diakopter I suppose that's one approach 21:53
(adding null checks) 21:54
FROGGS and the other?
diakopter well someday we wanted to make the pmcnull thingy
<- teasing jnthn by calling it pmc ;)
FROGGS hehe 21:55
well, for me atm I prefer to get the following rather a SIGSEGV: 21:56
Cannot bind to not existing lexical 'self'
in sub P5unpack at lib/Perl5/Terms.pm:1216
diakopter :)
jnthn Aye, this one isn't even the case that the null strawberry unicorn would handle anyway...
FROGGS spot the error: multi P5unpack(Str:D: \SELF) is export { SELF.P5unpack( CALLER::DYNAMIC::<$_> ) } 21:57
diakopter $*CALLER
FROGGS no
it is about a lexical 'self'
*g*
jnthn uh, yeah...why the : in a sub :P 21:58
FROGGS :P
yeah
jnthn Wrong failure mode, though...should never even compile
FROGGS this is the definition of WAT
diakopter std: multi P5unpack(Str:D: \SELF) is export { SELF.P5unpack( CALLER::DYNAMIC::<$_> ) }
camelia std 09dda5b: OUTPUT«ok 00:01 128m␤»
FROGGS std is lying
this is really annoying when you turn methods into subs or subs into methods 21:59
22:12 tgt joined 22:50 arnsholt joined 22:53 jnap joined