Rationale for read-only property of co_code
Chris Mellon
arkanes at gmail.com
Wed Apr 2 16:38:09 EDT 2008
On Wed, Apr 2, 2008 at 2:33 PM, João Neves <sevenjp at gmail.com> wrote:
> On Apr 2, 5:41 pm, "Dan Upton" <up... at virginia.edu> wrote:
> > > The thing I've been wondering is why _is_ it read-only? In what
> > > circumstances having write access to co_code would break the language
> > > or do some other nasty stuff?
> >
> > > João Neves
> >
>
> > I can't speak to Python's implementation in particular, but
> > self-modifying code in general is unpleasant. It certainly is
> > possible to support it in runtime environments, but it's usually not
> > easy to do so. That is, of course, somewhat dependent on the
> > implementation of the runtime environment, and even to some degree the
> > underlying hardware. (For instance, the compiled code you want to run
> > could be in the hardware cache; if you then change the instructions at
> > those addresses in memory, it's not always straightforward to get the
> > processor to realize it needs to load the new data into the
> > instruction cache.) Plus, I suppose it might be possible to break
> > strong (even dynamic) typing if you start changing the code around
> > (although I can't construct an example off the top of my head).
>
> Indeed, the caching issue is a relevant one I guess, and adding the
> mechanism to go around that might have a significant impact on
> performance.
> I haven't looked in detail into it, but I agree with your opinion
> concerning strong and dynamic typing. If type check is done while
> compiling to bytecode, there is no guarantee the modified bytecode
> will respect the rules, for instance. I don't know though, haven't
> really checked how it's done at this point. :)
> I will be fiddling around with the Python VM these days anyway, and
> since I'm going to muck around the bytecode, I might just try to see
> the effects of removing the read-only restriction from co_code.
>
There is no need to overwrite co_code. Create a new code object with
your desired bytecode and use that instead.
More information about the Python-list
mailing list