Yeah to be honest, C was never our favorite pick to begin with. We initially wrote YJIT in C99 because that was what the rest of the CRuby codebase was written in. However, JIT compilers are very complex pieces of software. They need to do things like symbolic transformations on graphs, and deal with multiple different kinds of intermediate representations. Doing that in C, you get really bogged down with the details of manual memory management and rolling your own data structures. You can get all kinds of subtle bugs if you aren't careful.