Description
Overview
Over in faster-cpython/ideas we've been exploring the idea of generating the interpreter from a set of instruction definitions. This will eventually enable having multiple versions of the interpreter (e.g. with and without tracing enabled), and it will allow us to automatically combine instructions using a powerful notation (e.g. super(LOAD_FAST__LOAD_FAST) = LOAD_FAST + LOAD_FAST;
). It will also let us auto-generate things like stack_effect()
.
We are planning to land at least an early version of this work in 3.12. We have a tentative grammar for instruction definition DSL -- which will undoubtedly undergo several iterations before we've settled. We have a first draft of the tooling ready for review (which currently reproduces the status quo) done.
Once the first version of the tooling has landed we expect to iterate quickly, using this issue an umbrella issue for our PRs to link to.
References
- Generating code for the ceval loop/switch faster-cpython/ideas#5
- Super-instructions faster-cpython/ideas#16
- Define opcodes in terms of smaller "micro-ops" faster-cpython/ideas#454
- Change the interpreter definition DSL to be legal C syntax faster-cpython/ideas#477
- Mechanics of interpreter generation from DSL faster-cpython/ideas#479
- Stack effect of jumping -- how to express in DSL faster-cpython/ideas#481