Hacker News new | ask | show | jobs
by Scaevolus 33 days ago
The absolutely easiest way to write a JIT is to use Javascript and eval() (or "new Function()", which is just eval in a Java-shaped tuxedo). You can quite easily speed up little matching functions, especially arithmetic heavy ones, by just filling in some templates at runtime!

Here's an example used in PuzzleScript: https://github.com/increpare/PuzzleScript/blob/dc1e0fc979365...

1 comments

This is true, and is why I think Javascript is underrated for emulation.

For example, this PSX emulator: https://github.com/kootstra-rene/enge-js

It has decent compatibility and good speed. Furthermore, I challenge anyone to find a PSX emulator with fewer lines of code with competitive speed and accuracy. To my knowledge, this is by far the simplest such implementation, and is able to do this by taking advantage of Javascript JIT compilation.

> To my knowledge, this is by far the simplest such implementation

Are you taking into account the complexity of v8?

No I do not, in the same way that I would not take into account the complexity of the Python interpreter for Python emulator projects or the compiler for C or Rust projects. I would also not take into account the complexity of Retroarch for libretro-based emulator cores, because all of the actual challenging parts that effectively document the console still remain.

These are general-purpose tool chains. The real question is, using those tools, how easily can you make an emulator for a device with as much complexity as the PSX?

> in the same way that I would not take into account the complexity of the Python interpreter for Python emulator projects or the compiler for C or Rust projects.

I'm less inclined to care about compile dependencies, but I think it's absolutely worth caring about how heavy of runtime dependencies you're pulling into your project.