This is a bit old, but I forgot to share about the port from Lua to C a few months ago. May be of use to others when making evaluations.
Rarely have I had the time for an apples-to-apples port. This was going from well optimized Lua
Running at ~49fps
Lua specific optimizations (consts, avoiding global lookups etc)
Access pattern oriented data layout
Custom collision detection (faster than the provided AABB)
Zero runtime user allocation (all memory managed internally, notice flat memory line and constant GC %))
That said, I was hitting the ceiling, and I still had a few more features I was hoping to cram in, so I did a direct port to C99 (I wasn’t using any fancy metatable stuff in lua, just records, arrays, and functions, so it really was as 1-1 as it could be).
This is just one codebase, one data point, so evaluate accordingly. That said, this will hopefully serve as a useful data point for the kind of possible gains wrt porting.
cc @matt may be useful for your perf write-ups/book
edit: for those curious about the memory usage difference, this is because, in Lua, fundamental types are all 4 bytes in Lua, whereas in C, appropriately sized types can be used (uint8_t, int16_t for example)
this memory usage has a impact on cpu performance as well, smaller data => more data per cacheline => faster computation
On the current build, I'm floating at 65-75% CPU at ~49.5fps (slight tick up in recent SDK update), so I figure current frame time is about ~15ms, so it could possibly go ~65fps if the limiting factor was removed. Worth noting the version I'm speaking on here has had its featureset grown significantly since the referenced image, so not 1-1 with those two graphs).