Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes. Set by lizmat on 24 May 2021. |
|||
02:11
MasterDuke joined
|
|||
Geth | MoarVM/main: 6d8a4c7521 | (Daniel Green)++ | 3rdparty/mimalloc Bump mimalloc to 2.1.7 |
02:38 | |
MoarVM/main: ed50e2c73d | MasterDuke17++ (committed using GitHub Web editor) | 3rdparty/mimalloc Merge pull request #1819 from MasterDuke17/bump_mimalloc_to_2.1.7 |
|||
07:49
sena_kun joined
08:30
sena_kun left
|
|||
timo1 | lizmat: is it possible to give HTML::Entity::Fast a list/hash of entities I don't want translated without a big loss in performance? | 12:33 | |
lizmat | so you'd basically want to remove N entries from the lookup hash? | 12:34 | |
timo1 | quite a few of the translations i kind-of don't really need i think? i mostly want to make sure nothing in the text i'm outputting is accidentally parsed as HTML, so the most important by far is <, but i'm not sure if a whitelist of just < is good enough? | 12:35 | |
yeah, and if you add something to remove individual items, maybe a whitelist would also be interesting | |||
in particular, using a real \n instead of 
 makes the HTML source a lot easier to look at, and the resulting code is also full of ∪ or something like that? | 12:36 | ||
anyway, not a big priority or anything | 12:37 | ||
lizmat | to be clear: you want to omit some conversions from "decode-html-entities" right? | ||
timo1 | that's right | 12:41 | |
currently i do decode-html-entities($bla).replace("&newline;", "\n") which is obviously silly :) | |||
lizmat | could you provide be with a before / after example I could use for testing? | 12:42 | |
*me :-) | 12:43 | ||
timo1 | i'll be calling it multiple thousand times, so if i could somehow do the setup once and re-use it a bunch of times (whether it be with a class or something else) so as to avoid a performance penalty ... | ||
lizmat | ack | 12:45 | |
ok, working on it :-) | 12:50 | ||
timo1 | ok, as i said, low priority, but if you have a tuit in the right shape anyway ... :) | 13:01 | |
13:07
brrt joined
|
|||
timo1 | o/ brrt | 13:07 | |
brrt | ohai timo1 | ||
I hear talk of deprecating the expression JIT | 13:08 | ||
timo1 | right, nine is very unhappy about being unable to enforce order of operations in the generated assembly | ||
and the fact that nobody has learned to work on it | 13:09 | ||
brrt | yeah, that is a bug indeed | ||
I had a design to fix it, I lost the design, and forgot what made it work | |||
nine is, in other words, very right | |||
lizmat | timo1: need to go afk for an hour or so, will work on entities afterwards | 13:10 | |
timo1 | i'm not sure about the mentioned lack of dramatic performance improvement from the jit, though i'm not sure if that was referencing lego jit or exprjit | ||
though of course the point that a big amount of improvement comes from spesh is true | |||
spesh can, after all, consider not only multiple operations in a row, but also stuff across BB boundaries | |||
brrt | indeed | ||
timo1 | which neither of the two JITs can do | ||
brrt | well, the theory was, if spesh can do this, it makes little sense for the JIT to do it as well | 13:11 | |
that theory doesn't work as well as I would have hoped | |||
see you back lizmat | |||
timo1 | the exprjit can harness information that crosses nqp "opcode boundaries" kind of like how spesh can harness information that crosses BB boundaries | 13:12 | |
and of course some nqp opcodes compile to something that has BBs in it as well | |||
i'm not sure if i have a point i'm trying to make | |||
brrt | well, part of the theory was that the expr JIT would be able to avoid a lot of the memory traffic that was forced by the architecture of the lego JIT | 13:15 | |
that theory is only a bit true | |||
in practice, the expression JIT per-opcode fragments may have multiple basic blocks, so the register allocator forces a lot of that memory traffic right back | 13:16 | ||
timo1 | i once asked a friend, how bad is a jit that puts load in front of everything and store after everything, and he was like "failing grade" | ||
brrt | LOL | ||
well, send your friend my regards :D | |||
timo1 | not those exact words tbh, i don't remember the details, it was very long ago | ||
well, i mean, it's still fine to have a jit that "only" gets around Interpreter Overhead with a load-do-store design | 13:17 | ||
BBIAB | |||
brrt | yeah, but a lot of the interpreter overhead *is* the load/store cycle | ||
timo1 | you mean a branch inside the lego brick for an op causes register renaming to "fail"? | 13:19 | |
brrt | a branch or a call to a function | 13:20 | |
especially function calls, it means we have to spill all the 'live' values | |||
timo1 | right, they do have to go on the stack, unless we just so happen to know the function we're calling won't, for example, write over the xmm* registers, which the compiler actually might do a bunch | 13:23 | |
but also, getting more stuff that we'd usually call functions for onto the exprjit level could be beneficial. inlining, essentially. | 13:24 | ||
how hard would it be to implement devirtualization for things like reprop calls in the exprjit btw? i'm not sure we ever talked through that but i did mention it at least ... all that was long ago of course | 13:26 | ||
oh but that's just details that may not matter at all for the discussion at hand | |||
brrt | It's actually not all that hard, you'd register a JIT callback on the repr struct, and it would be given a handle to an expr JIT tree | 13:38 | |
combine that with a bit of build magic to be able to generate a map from opcode -> tree, with bindings, this is actually a fairly small project | |||
but indeed, it doesn't really matter :-) | 13:39 | ||
timo1 | you did so much work describing the design of the exprjit with its tiler and everything and somehow i still don't get it | 13:40 | |
brrt | doing the same for the lego JIT is actually a bit more tricky since the dynasm handle tends to be fairly tightly bound to the (single) source file that generated it, so we'd have to do more build magic to make that convenient | 13:41 | |
well.... I blame myself for that more than anyone else, really | |||
timo1 | i don't think the blog posts were bad? | 13:42 | |
brrt | I'm the last person to fairly judge that | ||
but | |||
truth be told, I don't know? | |||
timo1 | ah, you say the implementation of, say, VMArray_push_int32 would also have to go into emit.dasc or it might not work right? | 13:43 | |
brrt | I've worked in rather different environments over the past 10 years | ||
I think so yes. | |||
I think that's actually also what we did for the expression JIT as well | |||
timo1 | right, all the tiles are in one file, but of course with the exprjit these tiles aren't specific to, for example, one single repr | 13:44 | |
brrt | correct | ||
yes, we did include the tiles source in the emit.dasc | |||
timo1 | in theory, we already have the right position in legojit to not just double-devirt to a function call for reprops; we just have to put a "emit this lego block" instead of a "emit a C function call" in the emit_reprop function (or more likely a function called by it) | 13:45 | |
i wonder why i never bothered to do that honestly | 13:46 | ||
brrt | yes, but if you have to make that single function dispatch for every possible repr / op combination, that will be a dragon. | ||
timo1 | *shrug* it could actually be split into per-REPR files/functions, even registered as a function in the reprop just like the spesh function is | 13:47 | |
brrt | that's why I said you'd want to have the JIT handler a pointer in the repr struct | ||
right :-) | |||
and then you could, or rather would, still have to either place it in the emit.dasc, or a file included by emit.dasc | |||
timo1 | it wouldn't be so bad to have the file included by emit.dasc right? | 13:48 | |
brrt | I think that would be pretty acceptable yes | 13:49 | |
timo1 | one thing bad about exprjit not having devirt is that a BB gets a chance at exprjit first, and will output the worse, more general reprop implementation, when the lego jit could have devirted | 13:53 | |
brrt | true | 13:54 | |
timo1 | what were you going to say with "I've worked in rather different environments over the past 10 years"? | 13:59 | |
brrt | I forgot :D | 14:02 | |
anyway, I have more +pre/s | |||
si+/ | |||
pressing, toddler issues to deal with at the moment | |||
speak you later :-) | |||
14:03
brrt left
|
|||
timo1 | looking forward to it :) | 14:10 | |
16:46
brrt joined
|
|||
brrt | \o | 16:47 | |
timo1 | o/ | ||
brrt | toddler wants to keep touching the keys | 16:48 | |
timo1 | they're like cats in this regard | 16:49 | |
16:50
brrt left
|
|||
timo1 | i assume the toddler found the power off button? | 16:55 | |
lizmat | hehe | 18:12 | |
Nicholas | www.youtube.com/watch?v=B0oFpOJaIYc -- La retransmission du vol inaugural d'Ariane 6 débutera à 18H30 TU -- I thought that the point of calling it "UTC" was that it was a language neutral not-a-TLA, and yet, here we are. | 18:24 | |
anyway, not your usual rocket launch | |||
lizmat | Nicholas o/ | 18:34 | |
pride of Europe... about half the power of Falcon 9 in non-recoverable mode | 18:35 | ||
[Coke] | \o/ | 19:01 | |
lizmat | anyways... looks like it was a successful launch | 19:04 | |
[Coke] | "nominal" | 19:06 | |
lizmat | timo1: updated version of HTML-Entity-Fast on its way to the ecosystem | 19:07 | |
nine | Well dubious product strategy but the engineering quality is certainly still there :) | 19:37 | |
lizmat | yeah, there's that: and they've improved their PR with a camera on the rocket sending live images, like SpaceX | 19:38 | |
only a 20 second lag or so | |||
19:50
MasterDuke left
|