News for hackers. Stuff that matters.
Re:Building Fast Interpreters in Rust by ridiculous_fish on Monday March 04, 2019 @01:14PM (#19303648)
C certainly has this via unions. It's more manual but provides more control, including choice of alignment.

It's CPU dependent but in practice the cache benefits of packed instructions will probably dominate any misalignment penalty. It's not like x86 instructions are aligned after all.

What's the best way to implement a variable-width bytecode interpreter in Rust?

Re:Building Fast Interpreters in Rust by RReverser on Monday March 04, 2019 @01:28PM (#19303797)
More control is, as usual, less ability for automatic optimisations. For example, Rust uses knowledge of tag + data combinations for niche-filling enums where possible (and more similar optimisations to come), while LLVM can use this information to more easily deduce which branches are unreachable.

As for alignment - you can control it in Rust enums too, if you wish, by putting custom aligned structures as variant payloads.

In general, I'm sure it would be possible to achieve same (or, who knows, maybe even slightly better) performance than AST interpretation with manual tweaking, but the closure-based approach proved to give significant wins out of the box, while being more elegant to maintain and extend over time.

Re:Building Fast Interpreters in Rust by ridiculous_fish on Monday March 04, 2019 @01:57PM (#19304122)
In a bytecode interpreter's loop, you want your language to be little more than a fancy assembler. Exotic techniques become viable and even critical for performance: computed goto, misaligned reads, pointer arithmetic, unchecked type conversions, etc. This is one place where you want to tightly control your machine code.
Re:Building Fast Interpreters in Rust by RReverser on Monday March 04, 2019 @02:21PM (#19304357)
Oh, sure, if you're willing to go to unsafe techniques, you can go straight to a template JIT as well. But, for us, the balance is important, and safety is probably even more important than further wins in performance (which we can still easily get with algorithm-level optimisations before doing anything unsafe).
Re:Building Fast Interpreters in Rust by pcwalton on Monday March 04, 2019 @04:45PM (#19305894)
Rust has C unions now, but without safety. I would probably write manual parsing code via the byteorder crate.
Re:Building Fast Interpreters in Rust by cqtoq on Tuesday March 05, 2019 @05:40AM (#19309651)
This is a bit off-topic, but it has been on my mind for a while.

Has the Rust team considered that choosing cute names like "crate" might turn away some of the target audience?

The same applies to other ecosystems like homebrew, but in the case of Rust some of the target audience certainly includes C/C++ programmers.

Re:Building Fast Interpreters in Rust by steveklabnik on Tuesday March 05, 2019 @06:50AM (#19309909)
C++ is itself a “cute” name. It seems to be doing just fine.

Beyond that, “crate” specifically has utility. The closest existing name is “compilation unit,” but with things like incremental compilation, that’s a bit of a misnomer. We need some kind of name.

Re:Building Fast Interpreters in Rust by fulafel on Thursday March 07, 2019 @05:01AM (#19326835)
C too (from B, which was a stripped down BCPL).