3 ms·
> If you're talking about just compilation then it's easy enough doing something like context-threading where you translate bytecode into a call instruction per
by FooBarWidget 6y ago
> If you're talking about just compilation then it's easy enough doing something like context-threading where you translate bytecode into a call instruction per operation to a function implementing the bytecode.
Ruby has already been doing threaded dispatch on bytecodes since 1.9.
- jashmatthews 6y agoContext-threading is a JIT technique. CRuby can optionally use call-threading where each op is a function and dispatch is an infinite loop of function calls. It's not the default since direct or token threading are faster but it's there. Call-threading looks like this: while(1) { interpreter_state = *virtual_program_counter++(interpreter_state); } There's an indirect jump here. With context-threading you JIT very simple code which looks like this and has only direct calls: interpreter_state = put1(interpreter_state); interpreter_state = put1(interpreter_state); interpreter_state = plus(interpreter_state);