We have zipimport, how about dllimport?

V

vivainio

I may be on particularly potent crack, but I was wondering whether it
would make sense to distribute python code in DLLs so that the memory
occupied by the bytecode would be consumed only once even if there were
multiple processes using the same bytecode. Or is there another way to
accomplish code sharing?

Of course I don't need the functionality right this week, but
capability of running shared code is one of the advantages of natively
compiled languages and someone must already have thought of this and
knows why it would never work. ;-)
 
?

=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?=

I may be on particularly potent crack, but I was wondering whether it
would make sense to distribute python code in DLLs so that the memory
occupied by the bytecode would be consumed only once even if there were
multiple processes using the same bytecode. Or is there another way to
accomplish code sharing?

That wouldn't help much: as soon as a .pyc file is imported, it is
passed to the marshal module, which will create a code object out
of it (copying the actual data in the pyc file). Then, this code
object gets executed, containing import, def, and other statements.
The def statements, in turn, result in yet other code objects being
created, copying fragments of the original code object. Then, the
original code object is discarded (and its memory released).

So typically, you have two levels of copying, each involving interaction
with the per-process memory management. There is little hope for sharing
here.
Of course I don't need the functionality right this week, but
capability of running shared code is one of the advantages of natively
compiled languages and someone must already have thought of this and
knows why it would never work. ;-)

It's an advantage only if the code occupies a signifcant portion of the
memory. In bytecode languages, byte code is much more compact than
machine code, so there is comparatively little opportunity for savings.

OTOH, in *JIT* languages, the JIT code again counts for something,
and it typically has to be generated for each process. That's why
Microsoft's .NET has ngen.exe, the ahead-of-time (traditional)
compiler. The primary rationale is not sharing, though, but reducing
the startup time. In .NET 2.0, there is even an OS service that
creates compiled images of IL byte code.

LISP and Smalltalk implementations have yet another approach: the image.
They dump everything in memory into a disk file which can then be mapped
into memory. This image is created after all the loading indirections
and copies, and so constitutes the final form. So on the plus side,
this allows for sharing of code across multiple instances of the same
application. On the minus side, each Smalltalk application needs its
own image (even if they share a lot of code).

Regards,
Martin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top