dalek | arVM: 68a18b4 | timotimo++ | src/ (2 files): cannot * in a type object also outputs the debug_name. |
01:33 | |
01:40
mst joined,
BinGOs joined
01:44
mst joined
06:23
domidumont joined
06:28
domidumont joined
06:56
domidumont joined
07:05
sivoais joined
07:51
sivoais joined
08:23
brrt joined
|
|||
brrt | good *, #moarvm | 08:26 | |
nwc10 | good *, brrt | ||
brrt: I finally got round to watching air.mozilla.org/language-composition/ | 08:28 | ||
(it's from 2014) | |||
brrt | then evidently you got further than me :-) | ||
what is it about? | |||
nwc10 | and apart from the content, a bit of me is wondering "what happened next?" because the concepts and projects described seem to have vanished | ||
using 2 (or more) languages at the same time | 08:29 | ||
brrt | oh, that seems... evil | ||
nwc10 | specific examples were Prolog and Python (on the PyPy backend) | ||
and PHP and Python (again with PyPy) | |||
but the interesting part was that there was very little overhead in calling between them | 08:30 | ||
brrt | hmmm | ||
nwc10 | because it's all written in RPython | ||
brrt | aha | ||
nwc10 | *one* interesting part was that | ||
there was also "Even with mixed source files, our performance is better than the stock PHP interpreter." from the abstract | |||
brrt | well, that is .... | ||
nwc10 | it's not clear why hippyvm.baroquesoftware.com/ stalled | ||
brrt | not all that unexpected, given when comparing pypy with php | ||
nwc10 | but I'm going to guess "because no-one wants it enough to pay for it" | 08:31 | |
brrt resists snarking about facebooks' php engineers | |||
I will remark only that writing your own interpreter is much more fun than using another ones | 08:32 | ||
also, and that is I guess part of the problem/barrier that the PyPy folks are facing, it isn't exactly hard | 08:33 | ||
unlike compilers | |||
well, 'good' compilers | |||
nwc10 | I admit that "I read it on the Internet" and not in a technical publication | 08:34 | |
(IIRC it was reputable, and I think it was bloomberg) | |||
how it took a *long* time to get HHVM to out-perform HipHop | |||
but implied was that this wasn't done for "fun", but because it was thought to make (some) business sense | |||
brrt | I'm very, very curious what that business sense could be | 08:35 | |
nwc10 | hardware is expensive, at Facebook scale | ||
brrt | note that those remarks also go, just as well, to the question 'why didn't we use LLVM for the JIT' | ||
nwc10 | I thought that Pyston had demonstrated why LLVM isn't great for a dynamic language JIT :-) | 08:36 | |
brrt | part of the answer is of course 'using LLVM is total pain for a dynamic language JIT' | ||
nwc10 | well, more, at Facebook scale, engineering time may actually be cheaper than even more hardware | ||
brrt | but that doesn't... hold *completely*, because Julia does get away with it | ||
nwc10 | was Julia designed for it? | ||
brrt | yes | ||
nwc10 | my understanding is that Scala makes trade-offs to fit the JVM | ||
brrt | on it, is maybe a better way to say it | ||
nwc10 | Julia is like that? | 08:37 | |
(for its target) | |||
08:37
zakharyas joined
|
|||
brrt | actually, Julia was designed to be like R, but with the added luxury of writing your own for loops | 08:37 | |
but yes, I got that impression that Julia was bound to LLVM tightly | |||
I guess I'm saying that, given all the things the facebook folks could've chosen to do with HHVM, it doesn't seem like they chose the shortest / most efficient path | 08:38 | ||
nwc10 | ah OK. I missed that that was what you were saying | 08:39 | |
brrt | and I get that for facebook, none of that matters | ||
because scale | |||
nwc10 | and I assume "because x86_64" | ||
and IIRC "because Ubuntu" | 08:40 | ||
at least, they can assume that they don't need portability | |||
brrt | and one of the things that they could've done was build on something like HippyVM or started their own PyPy based effort - PyPy ought to be considered proven by now | ||
nwc10 | I think that they *did* pay for HippyVM for a while | ||
I've not looked at the HHVM source. Maybe I should. How long does it take to build? | 08:41 | ||
brrt | never looked at it, never built it, probably C++ | ||
so 'longish' | |||
nwc10 | IIRC MoarVM is seconds | ||
brrt | yes :-D | ||
nwc10 | Rubinius (which is C++)(when I could get it to build) was about 10 minutes | ||
PyPy was 40 | |||
and is a complete RAM hog | |||
brrt | that is the other part of pypy's problem | 08:42 | |
the problem that RPython is solving, strictly speaking, isn't a hard one and can be done in C/C++ by an experienced engineer easily | |||
nwc10 | :-) | 08:43 | |
brrt | the problem solved by their JIT compiler and meta-tracing backend, that *is hard*, but people forego it because using RPython is a pain | ||
nwc10 | the :-) was because I was jumping to the conclusion "so they would be better of *not* self-hosting" | ||
brrt | .. I think so, yes | 08:44 | |
but I may be wrong about that | |||
nwc10 | well, we need a parallel universe before we can prove it | 08:45 | |
and probably several, so that we have enough experiments to avoid errors :-) | |||
brrt | :-) | ||
10:44
JimmyZ joined
10:45
ilmari joined
12:19
zakharyas joined
13:42
JimmyZ joined
18:47
domidumont joined
19:12
masak joined
|
|||
masak | jnthn: according to a git grep I just made of the moarvm source code, you're a three-star programmer ;) | 19:12 | |
three asterisks occur in 15 places of the source code. four don't occur. | 19:13 | ||
I'm not stating this as any kind of challenge or call for action, by the way :P | |||
19:41
sivoais joined
|
|||
jnthn | I didn't make it to four stars anywhere? :) | 19:48 | |
timotimo | hm, can i break upon entering a .c file from anywhere in gdb? | ||
jnthn | masak: At a guess, those 15 places are largely under src/gc/? :) | 19:50 | |
nine | timotimo: don't think so :/ | ||
jnthn | Moving GCs talk a lot about the location of pointers, which gets you to two stars. And you're sometimes interested in lists of those locations, which gets you to three. | 19:51 | |
So in that domain you kinda end up there without doing anything clever. | 19:52 | ||
masak | jnthn: 10 are in src/gc | ||
jnthn | To the extent that a moving GC isn't already sorta clever. :P | ||
nine | .oO(lists of locations of string arrays) |
||
masak | jnthn: 3 are in src/core, 1 is in src/strings/unicode_db.c, 1 is in tools/ucd2c.pl (but still C code) | 19:53 | |
jnthn | Oh man, I wonder if that Unicode one is the primary composites table :P | ||
masak | jnthn: comp_p? :) | ||
jnthn | Yup :) | ||
masak | it's actually `static const MVMint32 ***comp_p[]`, so I guess that one could be seen as four stars :P | 19:54 | |
jnthn | And I'll get in sr/core one or more is in threadcontext.h and is GC related. | ||
*src/core | |||
timotimo | nine: here's my setup (it has nothing to do with perl6 or moarvm): i have a game that misbehaves when multiple monitors are connected. it still has DWARF symbols for the SDL2 that's compiled into it (i.e. statically linked and partially inlined). i'd like to see how exactly it uses the SDL api without manually typing every SDL function i could be interested in as breakpoints | ||
jnthn | *guess also :) | ||
timotimo: ltrace? | 19:56 | ||
timotimo | "It intercepts and records the dynamic library calls which are called by the executed process" | 19:57 | |
does it also handle non-dynamic library calls? | |||
nine | (gdb) help rbreak | ||
Set a breakpoint for all functions matching REGEXP. | |||
jnthn | No idea, sorry | ||
nine | Do SDL functions have a common prefix? | ||
timotimo | oooh | ||
yes, they do | |||
jnthn | nine++ # I didn't know about that one either...nice! :) | ||
timotimo | Breakpoint 1289 at 0x8404fb0 | 19:58 | |
<function, no debug info> NInputHandler::InitInputDevices(SDL_Window*, void*, bool, bool); | |||
nine | Apparently one can even do: rbreak file.c:. | ||
timotimo | %) | ||
neat. | 19:59 | ||
another question: this file is full of references to /home/kyle/blahblah/blahblah/SDL2-2.0.1/src/... files | 20:02 | ||
can i tell gdb "i have the same files, but at a different path"? | |||
aha | 20:03 | ||
set substitute-path | |||
ohmygosh it works | 20:07 | ||
this is pretty cool | |||
jnthn: how come we don't have a serialization and deserialization function for MVMHash? | 21:04 | ||
lizmat | jnthn: gist.github.com/lizmat/32ce2b17a5a...9a64ca9bef # concurrent fail on OS X | 21:07 | |
{ my $*PROMISE := $p; $vow.keep(code(|c)) }, | 21:08 | ||
looks like it lost the code to be executed | |||
jnthn | timotimo: It's handled specially (grep for MVMHash in serialization.c) | 21:11 | |
timotimo | oh | ||
well, that explains it. but why do we get errors for it missing? just a bug? | |||
jnthn | lizmat: I suspect elsewhere. | ||
timotimo: Yeah, sounds like | |||
timotimo | OK, good to know | ||
jnthn | timotimo: Something doing write_obj_ref instead of write_ref or something I guess | ||
lizmat: As in, I suspect not just OSX :) | 21:12 | ||
timotimo | interesting. that should be findable | ||
jnthn | I've seen that one on Linux also | ||
timotimo | ltrace gives me an incredible amount of output | ||
lizmat | jnthn: ok | ||
jnthn | Didn't get to the bottom of why yet | ||
timotimo | because ltrace also gives operator new, operator new[], operator delete, operator delete[], but also memcmp, memcpy, str*cmp, ... | 21:18 | |
jnthn | Hm, you can't tell it which libraries you do/don't care about? :) | 21:19 | |
timotimo | -l, --library filename | 21:20 | |
Display only the symbols included in the library filename. | |||
this ought to be it, but i'm not sure it actually considers the statically linked SDL a "library" in that sense | |||
jnthn | ah, ok | 21:21 | |
timotimo | "Because it uses the dynamic library hooking mechanism, ltrace cannot trace calls to libraries which are statically linked directly to the target" | 21:26 |