1. The interpreter doesn’t need to change, viewer function can customize mainloop. Or use a sub-interpreter (Joy in Joy.) The base interpreter remains static.
2. Once a function has been named and defined never change that name. It’s just not allowed. If you need to change a function foo you have to call it foo_II or something. Once a function (name mapped to behavior) is released to the public that’s it, it’s done.