In doing so, it’s become obvious that one of the main performance challenges in implementing a fast JIT compiler in CRuby, is that key elements of the architecture are optimized with an interpreter in mind, and not a JIT compiler. Check that the receiver is not an immediate value Check that the receiver is not Qnil Check that the receiver is a T_OBJECT Check that the object class matches our inline cache Read the serial number from the class (extra pointer indirection, memory access) Check whether the object stores its ivars internally or on an external table Potentially: read the pointer to the external table (extra memory access) Potentially: check if the ivar index is within the bounds of the external table Read the ivar from the object or external table We believe that with a…