3 ms·
It’s pretty hard to make things like math faster for real world use cases in a bytecode interpreter.
by ch4s3 3mo ago
It’s pretty hard to make things like math faster for real world use cases in a bytecode interpreter.
- dmpk2k 3mo agoIt's a JIT nowadays. Admittedly an extremely simple one, to minimize compile times and maintenance overhead. You can get substantial performance improvements by using guards though. See what Wings3D does with is_float() everywhere in hot numeric-heavy code.
- travisgriggs 3mo agoCan you elaborate why adding guards makes things faster?
- quasigloam 3mo agoPresumably it gives the JIT more type information, parent example was specifically about one of the type-check functions you can use for guards (is_float). While running it'll use the is_float information to generate code for the float case, and bail out if the actual values fail the guards at runtime. Other JITS like V8 will do things like speculative inlining and inserting its own type guards , but if this JIT is "Admittedly an extremely simple one" then it presumably doesn't do much of that.
- jimbokun 3mo agoJava and Javascript run times do really well at that.
- dnautics 3mo agoi ran a quick experiment where instead of doing boxing the way its done in the beam currently, i used a different boxing (NaN strategy and there was a 10x speedup