01:13 jnap joined 01:52 jnap joined
dalek arVM/patch-1: 14c623e | jimmy++ | src/6model/ (2 files):
removed REFVAR_VM_HASH_STR_VAR, and fix MSVC build
02:00
JimmyZ timotimo: ^^
dalek arVM/patch-1: d5a6b8c | jimmy++ | src/6model/ (2 files):
removed REFVAR_VM_HASH_STR_VAR, and fix MSVC build
02:14
02:47 ilbot3 joined 04:08 lue joined 04:59 krunen joined 05:02 flussence joined 05:04 flussence joined 06:57 krunen joined 07:35 FROGGS joined
timotimo JimmyZ: msvc doesn't have 0b... literals? :o 07:41
FROGGS timotimo: I learned recently: is has not :o) 07:42
timotimo thank you, JimmyZ 07:43
JimmyZ timotimo: I removed REFVAR_VM_HASH_STR_VAR too, it's not needed in MoarVM after bump version :P
timotimo i didn't know that. seems good, feel free to merge 07:44
can i force my gcc to enforce the "define vars only at the beginning" stuff?
JimmyZ timotimo: feel free to merge if you compile nqp ok, I got problems on windows, not sure if it's because of my patch or not. 07:46
it is: Invalid dependencies table index encountered (index -2139095040) 07:47
timotimo oh 07:49
i'll have a look
FROGGS timotimo: maybe try this? -std=c89 -pedantic-errors
timotimo it could very well be a mistake i made. where does it explode?
JimmyZ Thanks
compile NQPCORE.setting 07:50
FROGGS (or -std=c89 -pedantic)
see gcc.gnu.org/onlinedocs/gcc-3.4.6/gc...dards.html
timotimo thank you 07:51
3.4 is a tad old, though :)
FROGGS I guess the flags are still there :o)
timotimo fair enough
JimmyZ: if you want i'll push my "varint_stats" branch that will verify every varint it writes to make sure it's the same before as after 07:52
i'm building rakudo-moar right now, so i can build nqp fine :\
dalek arVM/varint_diagnostics: 25f59e1 | (Timo Paulssen)++ | src/6model/ (2 files):
statistics for varint serialization
07:54
arVM/varint_diagnostics: 45dedae | (Timo Paulssen)++ | src/6model/serialization.c:
Merge branch 'varint' into varint_diagnostics

Conflicts: src/6model/serialization.c
timotimo JimmyZ: ^^ try that
dalek arVM/varint_diagnostics: a2f48d3 | (Timo Paulssen)++ | src/6model/serialization.c:
more verbosity
MoarVM/varint_diagnostics: af02b68 | (Timo Paulssen)++ | src/6model/ (2 files):
JimmyZ timotimo: still the same error 08:04
dalek arVM: f40b466 | jimmy++ | src/6model/ (2 files):
removed REFVAR_VM_HASH_STR_VAR, and fix MSVC build
08:12
08:30 odc joined 08:43 arnsholt_ joined, timotimo joined
JimmyZ doesn't know how to debug into moar.dll by using msvc2012 09:07
Is there a easy way to do it? 09:08
diakopter did you --debug ?
JimmyZ yeah
moar.exe is fine. just can't debug into moar.dll 09:09
Microsoft Visual Studio 2012 Express
diakopter hm, don't know..
timotimo i better get rid of my changes until we can figure out what's wrong? 09:12
but maybe jnthn wants to try building it before we do that
diakopter wants to see the branch diff
timotimo github.com/MoarVM/MoarVM/compare/d......cc57bd4 ā† diakopter 09:15
JimmyZ timotimo: I think it read int32 as int64 somewhere 09:16
timotimo oof. 09:18
JimmyZ timotimo: I tried to debug into moar.dll and msvc doesn't allow me to do it and I don't know how to ...
timotimo :o 09:19
i looked through the diff to make sure i never replaced an int\d\d with a varint directly
and at least in reprs/ there are no read_int\d\d left to transform 09:20
maybe you can find it like that?
i'm AFK for a bit now
JimmyZ can't find it 09:32
09:47 krunen joined
timotimo JimmyZ: just a safety-ask, did you try a complete clean rebuild yet? 09:54
JimmyZ timotimo: yeah
timotimo i have no idea what's wrong :(
JimmyZ me either. 09:55
09:58 crab2313 joined
JimmyZ timotimo: I think it's a easy fix if someone get a `bt ful` output on msvc :P 10:00
JimmyZ decommutes 10:01
timotimo maybe i'll tackle storing a 32bit integer for our big ints if we can today 10:24
now i'll have to lay out p6smallbigintbody so that it matches up its "these must all be 1" field with the mp_digit *dp 11:05
that should be fairly easy
oh, huh, but i need to make extra sure i handle 32bit architectures right 11:07
moritz and big endian :( 11:15
timotimo in this case, i don't think i'll have to 11:16
oh, wait.
i think i know what you mean
but in this case i don't care if the int32s end up switched, i'm thinking i should first approximate bigint serializing for "compressed" bigints by turning them into a bigint before serializing 11:17
since there'll have to be a bounds check on creation anyway
hm. and since i don't have to serialize the padding anyway, i think it'd Just Work
is there some sane place i can put an assertion like "assert sizeof(MVMP6smallbigintbody) == sizeof(mp_int)? 11:20
"
hm. i could use a value of 1 instead of 0b1111....1111 for the flag, because pointer 11:21
and then i don't have to #define a constant that'll have the proper amount of ones on each platform
11:23 colomon joined
timotimo is some ways into the thing and will soon be able to try it out 13:32
where soon is like ... half an hour to an hour :P
src/6model/reprs/P6bigint.h:18:9: error: unknown type name ā€˜MVMP6smallbigintBodyā€™ 13:35
... but i declared it just above that?!
i even copypasted the name and it's still complaining :o
FROGGS timotimo: gist? 13:36
timotimo one sec.
dalek arVM/small_big_ints: e8654bb | (Timo Paulssen)++ | src/6model/reprs/P6bigint. (2 files):
first progress into smallbigints.
timotimo github.com/MoarVM/MoarVM/commit/e8...91aeebaR18 13:37
FROGGS timotimo: maybe you need to add it to: MoarVM/src/types.h:76:typedef struct MVMP6bigintBody MVMP6bigintBody; 13:38
timotimo oh!
who would have known >_<
FROGGS ā†
:P
timotimo yeah. 13:39
i was sure i'd have to put a typedef in there for C, but i didn't see one in that file and the only other file that file included was libtommatht
how do i manually set the address of a pointer to a specific value? 13:40
&thepointer = thevalue says i need an lvalue on the left side
is it just thepointer = thevalue?
hoelzro timotimo: yes
assuming thevalue is a pointer
if you want to point to where thevalue is stored, thepointer = &thevalue; 13:41
timotimo no, thevalue is an integer
i want to put the integer into the raw storage of the pointer
so if thevalue is 0, i get a null pointer
FROGGS thepointer = &thevalue ? 13:42
err, hoelzro mentioned it already
timotimo ā€¦
FROGGS ahh
*thepointer = thevalue
timotimo ... er
doesn't that look where thepointer points and changes the data that it points at?
FROGGS yes
timotimo how can i express myself any more clearly? 13:43
FROGGS you want to cast the integer value to a pointer address instead?
timotimo yes
FROGGS cast it then, no?
timotimo that will work?
fine, then
FROGGS should work
[Coke] (moar had better numbers) yes, but that was when the JVM was failing. 13:44
if you check the # of passing tests, I bet it's steadily climbing.
nwc10 how are the numbers? Is there a web site with a simple graph for the lazy and curious? 13:46
timotimo we have a csv file 13:47
FROGGS nwc10: github.com/coke/perl6-roast-data/b..._rates.csv
it is a pure textual graph
dalek arVM/small_big_ints: 80e7764 | (Timo Paulssen)++ | src/ (3 files):
first progress into smallbigints.
13:49
arnsholt Small bigints ^_^ 13:50
timotimo :)
i expect this to explode horribly when i try to compile stuff
but i'll set up some debug output to see what's happening 13:51
[Coke] you can search for "moar" at that URL, which helps a bit.
arnsholt timotimo: Making bigints for small numbers less memory-hungry, or somesuch I assume? 13:53
timotimo yes 13:55
if the number fits into a 32bit integer, we store that and then we don't have to mp_init which mallocs
moritz and moar storage efficient
timotimo well, at the moment a smallbigint will force itself to become an actual bigint before serialization
at some point i can implement that, though 13:56
how do i factor out the force_bigint and make_smallbigint functions so that i can use it inside the math ops?
oh, wait
the bigintops act on mp_int rather than P6bigint 13:57
i'd have to move the code one layer up, that'd probably be in interp.c
alternatively i can just introduce the P6smallbigintBody to the ops and do the logic that way with just a cast 13:58
ah, i was wrong 13:59
it *does* handle MVMObjects, just further down in the code file
arnsholt: the program "say 1" in rakudo takes 98 megs of ram on my machine now; the same with parrot takes about 240 14:05
arnsholt Nice! What's the win relative to master Moar? 14:10
JimmyZ timotimo: union needs a name, solaris doesn't support anonymous union 14:11
timotimo JimmyZ: thank you, i can do that a bit later
arnsholt: this is about a change already in master
i'm not at the point where smallbigints do anything but segfault in compilation 14:12
but it used to be about 100.5 mb before the serialization with varints stuff
unfortunately there seems to be a bug that makes nqp not compile on JimmyZ's windows
:(
arnsholt Oh, that's annoying
But 2.5 megs shaved off sounds like a pretty good win to me 14:13
JimmyZ well, I think I cant fix it if I know how to debug into maor.dll
s/cant/can/
14:25 jnap joined 14:28 cognominal joined 14:43 cognominal joined
timotimo what type do i cast a pointer to if i want it to be an integer value? 14:46
arnsholt long, IIRC 14:47
But there be dragons
diakopter uint_ptr
timotimo what diakopter said sounds nice.
what do i have to include to get that? 14:48
arnsholt Looks like uint_ptr might be a Windows-only type
diakopter wtypes
timotimo OK
i'm having some difficulty with IS_SBI and SET_SBI >_> 14:49
diakopter er
arnsholt Why do you need to convert a pointer to an int, though? That's really, really evil
dalek arVM/small_big_ints: 8fd1d5e | (Timo Paulssen)++ | / (6 files):
towards a p6smallbigint that does nothing

especially not crash. which it currently does.
14:50
timotimo i am using the same data region as a pointer to store a flag
in the spot where normally there'd be the mp_digit * i want to have a flag that i can set to 1
diakopter usually one uses the lowest 2-3 bits 14:51
arnsholt Oh
You just want to set the pointer to some flag value?
timotimo yes
i should probably just use long instead of mp_digit * 14:52
arnsholt In that case you can just set it to a literal, I think
timotimo i don't understand what i'm doing wrong. i ought to check more stuff i'm doing 14:53
diakopter well in moarvm source, AO_t is already an alias of pointer-sized integer due to libatomicops 14:54
timotimo: you can also use a union 14:55
timotimo i was using an union :) 14:56
but apparently too far outside
gist.github.com/timo/5804138fc21801a3498e 14:59
the flag is 0x1 and it steps into the else-branch of that ... ?!?
dalek arVM/small_big_ints: 346850c | (Timo Paulssen)++ | src/6model/reprs/P6bigint.h:
maybe this is correcter?
15:07
timotimo errand& 15:22
i figured out what's wrong with the code at least.
jnthn Shouldn't do force_bigint modifying the thing in place. P6bigint must the immutable or we're in for a world of pain when we thread... 15:47
um, when I try and build NQP on Moar HEAD, I get "Invalid dependencies table index encountered (index -2139095040)" 15:49
diakopter eww 15:50
jnthn It's NQP HEAD also 15:51
I wish folks would make atomic commits 15:56
f40b466739 does two things, meaning I can't revert half of it easily to see if it's to blame :/
timotimo git reset --patch :) 16:04
jnthn Well, reverting the hash_str_ref thing still leaves it broken... 16:05
timotimo JimmyZ mentioned it breaks on nqp for him, but he can't debug into moar.dll 16:06
it builds cleanly for me on linux, so i can't help debug :(
jnthn :(
Well, going back to before the varint merge works... 16:07
timotimo some of my bit operations may be unsafe on MSVC? 16:13
i have a branch that reads a varint after it writes it and makes sure the values match up
it didn't give any extra output for JimmyZ, though 16:14
jnthn I don't immediately see what's wrong... 16:16
Tried one thing, but no help
timotimo i looked the diff over twice :(
jnthn int read_on = !!(buffer[offset] & 0x80) + 1; 16:17
huh...
What's the !!
timotimo ensure it's either 0 or 1
tadzik boolification
jnthn oh... 16:18
timotimo could have used > 1, too, but that has looser precedence
oof. in order to convert the smallbigints, i'll have to carry around the threadcontext and probably steal the type of the MVMObject, too 16:19
jnthn Convert? 16:22
timotimo i mean create new big integers that are actually big integers 16:23
like you said; they must remain immutable
jnthn Yeah, but that only needs creating an mp_int...
timotimo er ... it does? 16:24
i think i misunderstood you in that case and all is going to be well :)
but they are never shared, so all i need to do is have an atomical swap from one pointer to the other and mp_clear the other one? 16:25
jnthn huh 16:26
There should be no atomic ops needed in this.
If the operation needs a bigint the logic should be just like 16:27
timotimo okay. please rephrase this sentence: Shouldn't do force_bigint modifying the thing in place. P6bigint must the immutable or we're in for a world of pain when we thread...
jnthn if (it's already big)
the_mp_int_to_work_with = directly_from_P6bigint;
else
the_mp_int_to_work_with = make_mp_int_from(the_32_bit_value); 16:28
And some tracking so we know the free the mp_int at the end of the operation in the latter caes.
*case
timotimo huh. but then using the same value over and over will cause a conversion from 32bit int to mp_int every time we use it 16:29
jnthn Yes, but that's going to be relatively rare, given most operations (e.g., not is_prime) can be done directly on the 32-bit integers...
timotimo fair enough.
i'll try that then 16:30
jnthn Oh, and you don't need to free track...
timotimo not exactly sure how to do the tracking properly yet
jnthn Just keep the mp_int we box to on the stack
And the free tracking is just checking if the address matches or so...
timotimo you mean if the address of the mp_int i got from the force_bigint is the same as TheMVMObject->body.i 16:31
jnthn Yeah
timotimo that sounds fair
thank you for your insight :)
jnthn Though I think obtain_bigint is maybe a better name.
Hopefully most of the time we don't need that, though... 16:32
timotimo yes, that'll be a better name now that it's had its functionality changed
that's my hope as well.
i just wanted to get to a state where i do have small bigints that are just always forced to become bigints immediately again
jnthn I mean, I know we will for primality testing and a few other thing, but the common operations (add, etc) don't...
timotimo so that i can make sure the fallbacks already work and don't segfault :)
jnthn That's a reasonable way to go.
timotimo do you see a problem with force_smallbigint? 16:33
jnthn I'm having no luck working out what's wrong with varint :(
timotimo okay then; revert it and we'll get back to it some time in the future?
i could also rewrite the serialization code that it can emit either version 8 or 9
and have the current version ifdef decide what it does 16:34
that way we could get the old, working, but fixed-sized ints on windows and the new, shiny, also working varints on linux
jnthn I'm sure it's going to work out to something small/weird...
timotimo that's my fear :(
jnthn Not immediately sure of the best way to debug it, though...
What's the goal of force_smallbigint? 16:36
timotimo: I added to the end of read_varint9 this: 16:42
printf("read %d bytes; got %d\n", (int)inner_offset, (int)*value);
And see things like 16:43
read 8 bytes; got 0
read 8 bytes; got 8
I'm guessing for numbers that size it should...not have read 8 bytes?
16:57 krunen joined
timotimo that's right 16:59
i'll try it now, too 17:06
i'm filtering out every output with inner_offset == 1 17:07
the values here seem correct 17:08
you should check if the bytes really do have their 8th bit set
or if it keeps going regardless
assuming we're writing them correctly and the read part is wrong in reading 8 bytes instead of 1, the following bytes must 1) have their 8th bit set and 2) must otherwise be null, otherwise you'd get much different values 17:09
jnthn timotimo: Yeah, it claims it's 128 each time... 17:12
timotimo that doesn't seem right 17:13
does the writer write properly at all?
i do value & 0x7f, so the uppermost bit shouldn't leak through
and the other line sets the uppermost bit for all except the needed_bytes-1th bit 17:14
does needed_bytes give you the expected values?
jnthn Well, now, the 128 each time is the flag bit
timotimo yeah 17:15
does the writer write the value and then a bunch fo 128?!
well, the value | 0xf0
jnthn Writing 0 in 11 bytes 17:16
oops :)
That's from
printf("Writing %d in %d bytes\n", (int)value, (int)needed_bytes);
timotimo wow, yowch! 17:17
yeah, that's not right at all
jnthn What's log2 of 0? :)
timotimo oh ... minus infinity?
diakopter infinity over zero 17:18
timotimo fortunately i nudge it +1
if the value is 0
before calculating the log2
jnthn oh...
timotimo at least now we know the failure is inside varintsize
jnthn If I do: 17:20
printf("%d, %d, %d\n", (int)sign_nudge, (int)varlog, (int)needed_bytes);
I get
1, 8100, 1158
1, 128, 19
Writing 0 in 19 bytes
17:20 jnap joined
timotimo er .. huh? 17:21
jnthn indeed
given it was meant to be being called with the same value each time... 17:22
timotimo stack corruption?
undefined behaviour?! 17:23
... the ... what ?
diakopter teh wut 17:24
jnthn Seems it's the log2 to blame... 17:27
What's odd is that I look it up and it claims it's not supported by MSVC... 17:29
diakopter oh, assumes positive?
jnthn We're only giving it positive...
question is, if math.h with MSVC is supposedly missing log2...where're we getting it from... 17:30
diakopter url to the algorithm?
oh
timotimo it's a function pointer into a random place? :) 17:32
and that place changes itself in between invocations?
jnthn no clue 17:33
size_t varlog = ceil(log(abs(value) + sign_nudge) / log(2));
seems to work
timotimo very well
gcc will be able to turn that into a log2 easily, i believe.
or even into a "what's the highest bit set?" operation if available
jnthn tossed my debug code, doing make test... 17:34
pass 17:35
timotimo thank you kindly
jnthn I still don't quite know how/where log2 is getting defined to...something. 17:36
timotimo yes, agreed. it's very wacky
jnthn ah well, at least we don't need to revert it now... 17:37
Happy Rakudo make test too 17:39
dalek arVM: 6558605 | jonathan++ | src/6model/serialization.c:
Make varint serialization work on MSVC.
jnthn There we go. 17:40
And yeah, makes a good difference to size of various things 17:41
diakopter :) 17:45
timotimo++ jnthn++
(likely adds negligible unmeasurable cpu time)
jnthn What we add in CPU instructions we win back in cache locality, I suspect. 17:46
timotimo we only ever run through that thing once, don't we?
oh, but we don't trash as many cache lines, i guess
jnthn Well, we just have to go through less memory 17:47
timotimo how does instruction caching work? is the instruction cache usually separate from the data cache? 17:48
diakopter likely depends on the OS 17:49
jnthn Probably varies...I would imagine it typically is.
diakopter and config
jnthn I'd have guessed it's hardware dependent more than OS dependent...
I would imagine if it's separate then it's only separate instruction cache and L1 data cache, though, and they both source stuff through L2. Could be wrong... 17:50
timotimo well, anyway. using less memory for the source data before making a round trip on the same instructions again might indeed help us
and for things like integer arrays, we get a bunch of small varints in a row 17:51
i bet someone proficient in C could make that code a whole bunch prettier, too 17:53
the different parts of the data i used are all over the place 17:54
17:57 FROGGS joined
tadzik which MoarVM level structs are used the most when running rakudo-moar? 17:59
apart from 6model
by used the most I mean: allocated most often 18:00
jnthn Probably MVMFrame 'cus we don't hit the frame cache as much as we should 18:05
(improvable, though) 18:06
timotimo another thing i like hearing :3
that would also cause the memory usage to be too big, eh? 18:07
18:07 tgt joined
jnthn Well, also malloc/free more than needed 18:07
timotimo i wonder if the february release gets down to 50 MB of ram usage for "say 1" in perl6
that would be amazing
well, everything else is amazing, too :P
diakopter jnthn: why missing the frame cache? 18:09
jnthn diakopter: 'cus it's full 18:10
diakopter: Many frames live longer than they really should.
The easy case to fix is lexotic.
The tricker one is immediate
bbl
tadzik heh. I tried reordering the struct members in src/6model by size, in order to improve their caching. The performance win, as expected, is zero :P 18:22
it was worth a try though
timotimo it may make more sense to group by which attributes are often accessed together 18:32
moritz tadzik: what did you go for? alignment? 18:39
nwc10 suggests taking a look at linux.die.net/man/1/pahole 18:40
in debian (at least) it's in package dwaves
coo, MoarVM is fast at building the setting when you're not doing anything "stupid" :-) 18:41
18:41 krunen joined
tadzik moritz: yup 18:43
well, mostly space-saving in the end
moritz and thus cache saving 18:44
tadzik so if it has MVMint8 and then a pointer, it doesn't waste 56 bytes
moritz and thus performance, and world saving
tadzik yeah
that was the general idea :)
nwc10 just use pahole
tadzik interesting, thanks 18:45
18:48 tgt joined 19:03 FROGGS[mobile] joined 19:19 tgt joined 19:37 tgt joined
nwc10 aarrrrrrrrrrgh. zillions of bloody errors under valgrind. Not Good. 19:54
timotimo :(
nwc10 including, but certainly not limited to, varintsize 19:55
timotimo varintsize? oops :) 19:56
that'd be me
nwc10 not totally - it's being fed bogus data
writer->write_varint(tc, writer, repr_data->unbox_slots[i].repr_id); 19:57
I think that repr_data->unbox_slots[i].repr_id is the culprit
yaks :-( 20:03
jnthn: when it comes to serialize_repr_data, are all of repr_data->unbox_slots supposed to be initialised? 20:06
diakopter if they're not currently, sounds like they should be 20:08
<- captain obvious, sorry :)
FROGGS jnthn: am I allowed to commit that? gist.github.com/FROGGS/cc7e4db40bd18c1aec66 20:12
nwc10 jnthn: specifically, static void compose in P6opaque.c does repr_data->unbox_slots = (MVMP6opaqueBoxedTypeMap *)malloc(total_attrs * sizeof(MVMP6opaqueBoxedTypeMap)); 20:14
jnthn: and in this case, total_attrs is 3, but only the first is used, so the rest are garbage memroy
memroy
gah
jnthn nwc10: I'm not sure if we look at the invalid ones to use them... 20:15
nwc10 serialise (attempts to) serialise garbage memory
jnthn Yeah. It's wasteful now we've varint.
nwc10 which gives a ton of crap from valgrind, which gets in the way of working out if something else is unhappy.
jnthn Since a 0 would encode much smaller
nwc10 I think I can make it a 0 with calloc() 20:16
jnthn That'll do too
nwc10 also not sure why the code likes malloc() and memset()
as best I can tell from the source of jemalloc() (used at least by FreeBSD() calloc() is no real advantage over malloc() [other than maybe less code size]
but I thought that one some OSes, calloc() would track if memory was already zeroed, and avoid work 20:17
diakopter nwc10: jnthn explained he preferred malloc/memset because later we might need to change what it memset to - ie for pointers to the null pmc
nwc10 also, serialising crap means that I can't binary compare the setting to see if the build is unchanged
aha
jnthn Yes, that holds true in various cases
nwc10 but I think you can searcn & destroy^Wreplace on calloc() just as easily as memset() 20:18
diakopter hm, true
afk&
jnthn FROGGS: Looks good to me 20:19
FROGGS cool, thanks
dalek arVM: f22a386 | (Tobias Leich)++ | src/6model/serialization.c:
port reposession conflict resolution for objects from nqp-p
20:21
jnthn FROGGS: How's v5 now? 20:23
FROGGS jnthn: stumbling about the STable still :/
jnthn FROGGS: I guess it doesn't do that on Parrot?
FROGGS I am bisecting Perl5::Terms atm, but it looks like it explodes when a critical number of mixins is reached 20:24
jnthn: correct 20:25
m: multi infix:Ā«P5<=>Ā»(\a, \b) is export { nqp::p6box_i(nqp::cmp_I(nqp::decont(&prefix:<P5+>(a)), nqp::decont(&prefix:<P5+>(b)))) } 20:29
camelia rakudo-moar acf7bd: OUTPUTĀ«===SORRY!=== Error while compiling /tmp/JkcPUJdup2ā¤Undeclared name:ā¤ &prefix:<P5+> used at line 1ā¤ā¤Ā»
FROGGS m: sub prefix:<P5+>(\a) { }; multi infix:Ā«P5<=>Ā»(\a, \b) is export { nqp::p6box_i(nqp::cmp_I(nqp::decont(&prefix:<P5+>(a)), nqp::decont(&prefix:<P5+>(b)))) } 20:30
camelia ( no output )
FROGGS yeah, it *is* about some sort of critical mass 20:37
it does not matter what infix/prefix I uncomment, either breaks the code 20:38
I can precompile Perl5::Terms (the one with the infixes), and I can precompile Perl5::Config, which uses it
but when I load Config, it asplodes
funny thing is that I can uncomment subs but not multis 20:41
jnthn: where do I need to bump MAX_MULTI_COUNT_PER_CU ?
btw, I do not declare any proto 20:43
jnthn Max...multi count? Huh? 20:44
jnthn didn't know that existed...
FROGGS well, it does not... (officially) 20:45
but... why does it explode?
can you make sense of it whatsoever?
jnthn No, though one thing you may wish to do is to add something into the STable write barrier in sc.c and see when it gets hit 20:46
When I was tracking donw the others I just shoved an MVM_exception_throw_adhoc into there 20:47
FROGGS yeah, printing a backtrace (without dying) is also helpful 20:48
I remember I did that in interp.c once or twice
jnthn also that, yeah
FROGGS hmmm, it already hits, even for the working-code-case 20:50
when loading the setting or so 20:51
jnthn yeah, the problem tends to show up downstream though 20:53
Where's it hit?
And which setting? The Rakudo one?
FROGGS gist.github.com/FROGGS/75012929138cb207b35e 20:55
rakudo's yeah
that is a backtrace for every time MVM_sc_wb_hit_obj is called... that was right, right? 20:56
jnthn oh, I thought you were going for the _st one, since it's an STable conflict? 20:57
FROGGS ahh :o) 20:58
that looks different, yes: gist.github.com/FROGGS/75012929138cb207b35e 20:59
this is the offending line btw: multi infix:<P5cmp>(int $a, int $b) is export { nqp::p6box_i(nqp::cmp_i($a, $b)) } 21:01
and the last bt shows that pretty well
jnthn hmm, i wonder... 21:04
FROGGS: Does v5 work under JVM, ooc? 21:13
FROGGS dunno 21:15
need to create a Makefile.in for it first
but I can do that (tomorrow)
timotimo what, it'll take you more than 1.75 hours? :) 21:19
FROGGS no, it will take less, but I am too sleepy to do that right today :o) 21:21
FROGGS does it now 21:27
dah!
gah*
21:36 jnap joined
dalek arVM: ae04515 | jonathan++ | src/io/fileops.c:
Don't try to sync things that can't.
21:46
FROGGS cool 21:48
hmmm, v5-j explodes because it can't find Perl6::Pod 21:49
jnthn: tomorrow by that time I will have v5 on jvm I guess... 21:53
but now: sleep
gnight all
timotimo jnthn: i just got some $workload for $dayjob, so we'll see if i'll get to something semi-working for smallbigint tomorrow 21:56
jnthn timotimo: OK, no hurry. I'm quite distracted with $dayjob these next days also. 21:57
timotimo d'aaw
well, i don.t think i can keep my fingers off of rakudo and moarvm for long :3 21:58
jnthn :)
22:37 eternaleye joined 23:24 dalek joined 23:47 colomon_ joined 23:55 krunen joined