dalek | arVM/native-ref: e25acbc | jnthn++ | src/core/args.c: Fix arg passing unbox SEGV found by TimToady++. |
00:25 | |
01:08
vendethiel joined
02:06
vendethiel joined
02:58
vendethiel joined
03:15
colomon joined
03:18
colomon_ joined
03:21
vendethiel joined
03:49
colomon joined
04:20
vendethiel joined
04:43
camelia joined
05:11
vendethiel joined
05:40
vendethiel joined
06:17
vendethiel joined
06:43
vendethiel joined
07:12
vendethiel joined
07:42
brrt joined
07:47
vendethiel joined
07:54
FROGGS joined
|
|||
FROGGS | o/ | 07:54 | |
brrt | \o | 08:21 | |
JimmyZ | \o/ | 08:26 | |
FROGGS | ╰☻╯ # such unicode | 08:27 | |
tadzik | :O | ||
FROGGS | sad that there is a white and black smiling face but no red haired smiling face | 08:29 | |
JimmyZ | FROGGS: encrypted-tbn0.gstatic.com/images?...zDV0pBu6fw | 08:30 | |
08:30
vendethiel joined
|
|||
FROGGS | JimmyZ: :D | 08:30 | |
:), even | |||
08:33
zakharyas joined
08:37
colomon joined
09:35
vendethiel joined
|
|||
dalek | arVM/native-ref: de2e72c | jnthn++ | src/6model/containers.c: Use containers HLL to locate auto-box type. Important for maintaining native/non-native transparency. |
10:44 | |
10:55
vendethiel joined
|
|||
jnthn | Ewww. | 10:58 | |
Heap corruption detected: pointer 0000000000C5B448 to past fromspace | |||
And the infamous | |||
Internal error: zeroed target thread ID in work pass | |||
oh duh, I fail it | 11:01 | ||
FROGGS | :o( | 11:02 | |
dalek | arVM/native-ref: 0992e50 | jnthn++ | src/6model/reprs/NativeRef.c: Mark frame of a NativeRef to a lexical. |
11:05 | |
jnthn | OK, with that I seem to be down to one native-ref regression. Which is...a hang. Ugh. | 11:09 | |
oh, or is it just slow | 11:10 | ||
nwc10 runs ASAN on it | 11:13 | ||
11:29
ilbot3 joined
|
|||
nwc10 | /spec/S02-types/num.t ........................................ Dubious, test returned 1 (wstat 256, 0x100) | 11:33 | |
t/spec/S04-declarations/my.rakudo.moar ........................ Dubious, test returned 2 (wstat 512, 0x200) | |||
jnthn | Oh? I thought I had my.t clean here... | ||
nwc10 | t/spec/S32-list/pick.rakudo.moar hanging | ||
jnthn | oh, hang on | ||
nwc10 | that's current roast | ||
jnthn | oh no, all pushed | 11:34 | |
Yeah, the hang is what I'm looking at now. | |||
nwc10 | I should just kill that one to get the final results? | ||
jnthn | Yeah | ||
It'll probably run out of RAM before finishing. | |||
Since it's trying to make a list of length 10 ** 10000 | 11:35 | ||
nwc10 | not ok 65 - 0xFFFFFFFFFFFFFFFF is not -1 | ||
how much RAM would that need? | |||
jnthn | I suspect that one may be related to what I'm currently looking at. | ||
A lot :) | |||
See the size of the integer posted on #perl6 :P | |||
nwc10 | aha, I don't think that even the new virtualisation host currently under test here in the office has that much RAM | 11:36 | |
jnthn | Yeah, it seems it ends up picking a native multi candidate when it should not. | ||
nwc10 | # Failed test 'Types in declarator sig 2/2 constrain' | 11:37 | |
# at t/spec/S04-declarations/my.rakudo.moar line 233 | |||
not ok 65 - native outside declarator sig 1 | |||
# Failed test 'native outside declarator sig 1' | |||
# at t/spec/S04-declarations/my.rakudo.moar line 221 | |||
# Error: Cannot unbox a type object | |||
not ok 66 - native outside declarator sig 2 | |||
those are all the erros that I got that you didn't expect | |||
dalek | arVM/native-ref: d4b00a8 | jnthn++ | src/6model/reprs/MVMMultiCache.c: Make multi-cache aware of native containers. It should not just go decontainerizing them as if all containers are objects, otherwise it'll end up with false equivalences. |
12:11 | |
jnthn | That deals with num.t and pick.rakudo.moar | ||
nwc10 | confirmed | 12:36 | |
12:41
vendethiel joined
13:28
vendethiel joined
|
|||
jnthn | Rakudo nom currently does 67,284,727 instructions on startup | 16:36 | |
Wait, that can't be right... | |||
no, it's not. grr | 16:37 | ||
742,971,696 is correct number. Down from 760,773,418 last I measured, probably thanks to less to deserialize due to the mixin cache and the donaldh++ fix | 16:41 | ||
FROGGS | that sounds like still a lot... | 16:42 | |
like how-the-heck-can-that-even-be-fast much | 16:43 | ||
jnthn | It's not fast :P | ||
FROGGS | ahh, that explains it :o) | 16:52 | |
japhb | <relentlessly optimistic> Well, it's less than a billion! That's good, right? | 17:08 | |
jnthn: Are those machine (CPU) instructions? | 17:09 | ||
17:13
FROGGS[mobile] joined
|
|||
jnthn | japhb: Yeah, measured by callgrind | 17:16 | |
m: say 44 / 742 | 17:17 | ||
camelia | rakudo-moar f53a94: OUTPUT«0.059299» | ||
jnthn | Geez. 6% of time in bind_key. | ||
m: say 36.5 / 742 | |||
camelia | rakudo-moar f53a94: OUTPUT«0.049191» | ||
jnthn | 5% in malloc | ||
japhb | <optimistic still> Target rich environment! | 17:30 | |
jnthn | Well, we need to re-enable the lazy deserialization stuff yet too | 17:33 | |
It just needs doing at a time when I can jump on pre-comp bugs. | |||
And for now it's more strategic that I spend my tuits hammering out implementations of the native stuff and NFG | 17:34 | ||
moritz | jnthn: would prototyping some NFG code in, let's say, perl 5, help you? | 17:36 | |
jnthn | moritz: Not sure, perhaps so. Exploring the behavior of various operations on strings that perhaps aren't immediately obvious in behavior in an NFG context might be interesting. | 17:42 | |
moritz: Data structure design wise, the options in C and Perl 5 differ quite a bit, so I'm not sure that'd be quite so informative. | 17:43 | ||
lizmat | re : 4e79d840405dd2 are we sure we need to MVM_free req.ptr ? I thought that was owned by libuv ? | ||
jnthn | lizmat: I think it's ours to free; note there's nowhere we give libuv any chance to free it. | 17:45 | |
(req is stackalloc'd) | 17:46 | ||
lizmat | ok, just wanted to understand why that was happening | ||
jnthn | I did do a double-take on that line when I code-reviewed the patch also. :) | 17:47 | |
But I think FROGGS++ got it right. | |||
moritz | then maybe add a comment? | ||
lizmat | actually, it was e98ea2506c3ef5492ead066dc5f93973532381c5 | 17:48 | |
*argh* copy pasto | |||
actually, it was Jimmy Zhuo | |||
jnthn didn't look at the commit, just remembered the code in question ;) | |||
Oh. :) | |||
lizmat | maybe you should look at the commit then ? | ||
just to be sure ? | |||
jnthn can | |||
I don't tend to pay a huge amount of attention to who did the patch when reviewing. :) | 17:49 | ||
lizmat | the libuv doc states "Stores the result of uv_fs_readlink() and serves as an alias to statbuf." | 17:50 | |
I don't think we need to free statbuf ? | |||
jnthn | So, e98ea2506c3 was the original that lacked the free | 17:51 | |
And 4e79d840405 adds the free | |||
lizmat | yes | ||
jnthn | uv_fs_t req; | ||
That's just living on the local stack | 17:52 | ||
req.ptr is presumably a result we're returned from libuv | |||
lizmat | yes | ||
jnthn | So if we don't free it, and then req goes out of scope, then I'd expect we'd simply lose the pointer to it and so leak it... | ||
lizmat | well, if you put it like that | 17:53 | |
it's just that I don't see any free's for statbuf in the code either | |||
jnthn | I'm a little curious about the "alias to statbuf" thing... | 17:54 | |
lizmat | well, that piqued my interest | ||
but if it would not be allocated by MVM, would the free not fail ? | 17:55 | ||
jnthn | No, MVM_free is just an alias for free | ||
lizmat | ah, ok | 17:56 | |
jnthn | Just reading libuv source | ||
static ssize_t uv__fs_readlink(uv_fs_t* req) { | |||
That's the impl for on posix-y places | 17:57 | ||
In there it does... | |||
buf = malloc(len + 1); | |||
Later | |||
len = readlink(req->path, buf, len); | |||
Then | |||
req->ptr = buf; | |||
So, libuv is allocating that memory and returning it to us | 17:58 | ||
So yeah, we're right to free it. | |||
Was worth checking. :) | |||
lizmat++ | |||
lizmat | ok, *phew* :-) | ||
just so I understand: MVM_free is an alias for free | 18:00 | ||
but with the intent that it can be something else for debugging, right? | |||
jnthn | Yes. | ||
MVM_malloc is the more interesting one | |||
It delegates to malloc | 18:01 | ||
But then does a NULL check | |||
So we don't have to do that everywhere else. | |||
lizmat | shouldn't this then not be a "free" rather than an MVM_free ? | ||
otherwise you might get unmatching MVM_alloc / MVM_free ? | |||
jnthn | lizmat: Yes, that'd be reasonable enough. | 18:02 | |
We don't have a particularly strong policy there yet, though, I'm afraid. | |||
lizmat | hmmm... ok, so I should leave it ? | ||
jnthn | When MVM_malloc/MVM_realloc came (which do check for NULL), MVM_free came along with them, and we got s/free/MVM_free/ | 18:03 | |
lizmat: Maybe it's best until we figure out some clearer policy on it. | |||
lizmat | ah, so there could be more MVM_free's that should really just be free() | ||
ok | |||
jnthn | lizmat: If we do decide we really want that then there'll be a bunch of places to change. | ||
lizmat | ok | ||
jnthn | The other thing is that while *in theory* you might want to use it to hook in debugging stuff, these days it feels unlikely. | 18:08 | |
lizmat | ok | ||
jnthn | On Linux there's easy access to ASAN and Valgrind, which dynamically replace malloc. On OSX you inject their debug malloc in lldb by setting an env var. Similar story with the MSVC toolchain. | 18:09 | |
18:40
FROGGS joined
|
|||
lizmat | hmmm... could there be a leak in file ops on Moar? | 18:44 | |
the file ops, like .d, use MVM_file_stat | |||
the check for IS_DIR is done by calling file_info() | |||
file_info returns req.statbuf | 18:45 | ||
which is used directly in MVM_file_stat thus: | |||
case MVM_STAT_ISDIR: r = (file_info(tc, filename).st_mode & S_IFMT) == S_IFDIR; break; | |||
shouldn't we then free the return value of file_info() ?? | |||
jnthn FROGGS JimmyZ ^^^ opinions? | 18:47 | ||
jnthn | lizmat: req.statbuf.st_size | 18:57 | |
Note it's all ., not -> | |||
lizmat | but file_info returns req.statbuf | 18:58 | |
ah, by value | |||
jnthn | Yeah | 18:59 | |
lizmat | ok, *phew* | ||
jnthn | And we do . to access it too | ||
So by value | |||
So looks good to me | |||
lizmat | ok | ||
bit rusty on my C, but getting there :-) | |||
hmm... I just realized that the current nqp::start, should really be called nqp::lstat | 19:00 | ||
*nqp::stat | |||
jnthn | Does it call lstat underneath? | ||
lizmat | because file_info does a uv_fs_lstat | ||
rather than a uv_fs_stat | |||
yup | |||
jnthn | ah | ||
lizmat | I guess I could throw in an extra parameter to indicate stat vs lstat ? | 19:01 | |
jnthn | I'd rather go with two ops | 19:02 | |
lizmat | two ops at the nqp level | ||
jnthn | Yeah | ||
lizmat | which would mean basically copy file_info and MVM_file_stat | ||
jnthn | But inside of Moar we can do it as a flag if it saves copy-paste code :) | 19:03 | |
lizmat | ok | ||
that looks like a plan then... :-) | |||
will probably cause some spectest breakage | 19:04 | ||
because "stat" will become the uv_fs_stat case | |||
what is the preferred way of passing a bool in Moar? | |||
jnthn | Well, unless we decide to lstat in some places we currently stat in Rakudo of course | ||
Just use an integer | 19:05 | ||
MVMint32 is fine enough | |||
FROGGS | lizmat: rurban++ also said that the stat we expose is actually lstat, so you agree | 19:06 | |
lizmat | yeah :-) | 19:07 | |
19:40
btyler joined
19:55
zakharyas joined
20:01
zakharyas1 joined
20:58
tgt joined
|
|||
lizmat | jnthn: what does it mean if I find e.g. an "exists_f" op in the src/core/oplist, but no associated nqp::exists_f op in nqp ? | 21:20 | |
would that imply an obsolete op? | |||
jnthn | lizmat: Sounds like | 21:22 | |
lizmat | ok, so I just leave it for now? | 21:23 | |
jnthn | lizmat: I'm in the middle of some...fun...refactors, mebbe you could file a MoarVM issue on github? | ||
lizmat | ok, will do | ||
once I'm done with my lstat/stat refactor :-) | |||
jnthn | Thanks :) | ||
lizmat | Set of changes to MoarVM: gist.github.com/lizmat/47b01056f84d40539df2 | 21:33 | |
21:34
colomon joined
|
|||
jnthn | lizmat: Hmm...are isreadable/iswritable/isexecutable used? Seems they are just cases stat/lstat can cover too? | 21:36 | |
FROGGS | lizmat: hint: you can only change the signature of an op if it is *not* used in nqp's stage1 | ||
lizmat | jnthn: lemme check | 21:37 | |
jnthn | FROGGS: I didn't see that happen anywhere? | ||
FROGGS: The changes in interp.c just pass something extra to the implementation of the op... | 21:38 | ||
lizmat | yes, to keep the current behaviour | ||
FROGGS | jnthn: ohh, good point then :o) | 21:39 | |
jnthn | So that bit's fine. | ||
FROGGS | lizmat: btw, you are reformatting my nicely formatted code there :P | ||
yeah | |||
lizmat | well, I was reading Joel on Software lately :-) | ||
www.joelonsoftware.com/articles/Wrong.html | 21:40 | ||
jnthn | Yes, a case that doesn't declare any variables doesn't really need the curlies | ||
At least, that's how we have it in most places :) | |||
lizmat | ok, so you want me to change that back? | ||
fine by me... | |||
I felt it became more readable | 21:41 | ||
jnthn | Well, I'd be fine with a line break after the case ...: | ||
And the break on a line of its own | |||
lizmat | ok | ||
jnthn | But don't need loads of whitespace and braces all over, imho :) | ||
jnthn notes that he has to work with a larger font than many folks, so is a tad more sensitive on vertical spreading than most :) | 21:42 | ||
lizmat | ok, fair enough | ||
hadn't thought of that :-( | |||
should have :-( | |||
jnthn | Don't worry, I'm not going to reject the patch 'cus of it :P | ||
A little consistency across a codebase can ease reading, though. | 21:43 | ||
Anyway, it looks good overall | 21:44 | ||
lizmat | updated the gist for the {} removal | 21:48 | |
hmmm... I have trouble building nqp with the locally changed moar | 21:49 | ||
using --with-moar, should I point to the moar executable ? | |||
jnthn | I think that should do it | 21:50 | |
lizmat | hmm.... the freshly compiled moar states it is 2015.01-23-ga7b842c | 21:52 | |
while git describe says | |||
2015.01-31-g79171dc | |||
jnthn | I think we call git describe during Configure, not in each make. | ||
lizmat | ah | ||
that could be it :-) | |||
ok, clean test on nqp | 21:56 | ||
ok for me to bump Moar / NQP revision ? | 21:57 | ||
jnthn | lizmat: Sure, if Rakudo builds on it :) | ||
lizmat | not sure how I can build rakudo with a local NQP | 21:59 | |
--with-nqp doesn't work :-) | 22:00 | ||
jnthn | I always just --prefix=...path to install dir... | ||
lizmat | thanks :-) | 22:01 | |
22:04
FROGGS_ joined
|
|||
lizmat | rakudo spectest clean (except for 2 known flappers) so going to bump | 22:06 | |
dalek | arVM: 0ee65f4 | lizmat++ | src/ (3 files): Add flag to switch between stat/lstat Many file ops now use stat, rather than lstat as before. This in preparation for an nqp::lstat op to be added in the near future. |
22:08 | |
lizmat | hmmm.... seems my change broke .IO.l (always false at the moment) | 22:27 | |
will sleep on this and provide a fix somehow tomorrow | |||
(which was actually not caught by nqp tests (on my machine) or rakudo spec tests :-( | 22:28 | ||
good night, #moarvm :-) | |||
TimToady | sweet dreams | ||
jnthn | 'night, lizmat | 22:32 | |
22:39
colomon joined
23:05
vendethiel joined
|