Ah, that&#x27;s very interesting -- your desire for more &quot;pure&quot; Python comes from a desire for speed.  (Some people who wish the generated code was more concrete want this so the generated code is more readable).<p>I am curious what led you to the conclusion that descriptors and metaclasses were making Python protobuf JIT-unfriendly.  I ask because most of the &quot;meta&quot; stuff happens at startup, when you first import the module.  It uses a metaclass to generate a bunch of Python methods, but after that they are just regular Python methods, and should be as easy for PyPy to optimize as anything else.  There is a bit of reflection happening in some code-paths (like the __init__ method does loop over a list of fields to decide how to initialize them), but the metaclass at least is pretty much gone after import.<p>For this reason, I suspect that even if we ditched all the metaclass stuff, you&#x27;d see PyPy performance pretty close to what you&#x27;re seeing now.  The only thing I could see potentially making a more significant difference is if there were generated parsing code that switches on field number, instead of looking up fields by number in a dictionary.  But given that Python doesn&#x27;t have an actual switch statement, this might not be an improvement at all.