Retrofitting JIT Compilers into C Interpreters

(tratt.net)

26 points | by ltratt 13 hours ago ago

7 comments

  • djwatson24 22 minutes ago ago

    It's quite impressive they're able to take nearly arbitrary C and do this! Very similar to what pypy is doing here, but for C, and not a python subset.

    However not without downsides. It sounds like average code is only 2x faster than Lua, vs. LuaJit which is often 5-10x faster.

  • fuhsnn an hour ago ago

    Took me a while to figure out whether it's interpreters for C programs or if there's a particular class of interpreters called "C". Turns out it's about interpreters implemented in C that they use modified LLVM to do the retrofitting, but couldn't it be applicable for other languages with LLVM IR, or other switch-in-a-loop patterns in C?

    • itriednfaild 21 minutes ago ago

      I've been a low level C and C++ programmer for 30 years. Even with your explanation and having read the webpage twice I have no idea what this technology does or how it works. So it takes normal interpreted code and jits it somehow? But you have to modify the source code of your program in some way?

      • fuhsnn 4 minutes ago ago

        I don't fully grasp it either, the most appropriate analogy I can think of is like how OpenMP turns #pragma annotated loops into multi-threading, this work turns bytecode interpreting loops into JIT VM.

  • sgbeal 12 hours ago ago

    i tend to think of myself as a computing nerd, but posts like this one make me realize that i don't even rate on the computing nerd scale.

    • throwaway1492 8 minutes ago ago

      Do you always make things about yourself? Have you written a parser or interpreter? You should, it’s an interesting exercise. The idea is to add meta tracing to the interpreter (the c code) that allows hot paths to be compiled to machine code and be then executed instead of being interpreted.

  • mwkaufma an hour ago ago

    TL;DR compile with a fork of LLVM that enables runtime IR tracing. Very clever!