

Gameboy Emulation in Javascript and HTML5 - elblanco
http://imrannazar.com/GameBoy-Emulation-in-JavaScript

======
thristian
I'd like to see somebody using the tracing-compiler technique outlined by
Robert O'Callahan in an emulator for a real-life hardware system:

[http://weblogs.mozillazine.org/roc/archives/2010/11/implemen...](http://weblogs.mozillazine.org/roc/archives/2010/11/implementing_a.html)

~~~
sparky
Am I misunderstanding or does his "tracing" stop at the basic block level?
While basic blocks are completely predictable traces through the program, they
are usually very short. You can get much more benefit by finding long common
traces through multiple basic blocks and compiling the whole thing as a unit,
providing tests and/or fixup code in case you find you actually needed to
branch somewhere else in the middle of a trace. This is what I think most
compiler people would call a "tracing JIT."

~~~
thristian
Hm, that's a good point. For some reason I assumed it would trace through
unconditional branches, but the post I linked to does indeed say "I terminate
the trace after any branch instruction", not "any conditional branch
instruction". That seems like quite a missed opportunity; I wonder why the
code has that restriction.

~~~
daeken
In the context of a JIT, you have a tradeoff to make: do you exhaust all
possibilities for optimization, or do you do as little as possible to get
something running. That's why you have things like Hotspot, where they
initially do as little as possible to get things rolling, then optimize
heavily as it finds bottlenecks. This is no easy task.

------
bryanh
When I see these sorts of things, I like to imagine that in 10 years we'll be
playing Doom 3 run off Javascript in a browser.

You know, march of progress and all.

~~~
corysama
It'll be a lot less than 10 years. We can already play Quake2 running on
JavaScript in the browser.

<http://tatari.se:8080/GwtQuake.html>

