Self hosting Python? (was: Python is just as good as C++ for real apps)

Gustavo Córdova Avila gcordova at sismex.com
Wed Jan 23 19:45:34 EST 2002


> 
> It's not hard to add unsafe operations to a safe language, and that
> lets you do your memory management (code generation, library loading,
> etc.) in the otherwise-safe language.
> 

Hmmm...

import Memory

p = Memory.BytePointer()

dict = { lotsa stuff }

# Assign to "p" the address in memory of dict.
p = dict

# now, let's examine the internal structure.
byte = p[0]

w = Memory.WordPointer()
l = Memory.LongPointer()

buffer = Memory.HeapAllocate(1024)
...
buffer.free()

etc... ???

> CMUCL does this, and as a result, when you want to hook CMUCL up to a
> new C library, you can write your glue code in Lisp instead of C.
> This is a really big advantage.  I wish I could do that in Python.

That sounds very, very nice.

Hmmm...

import Linker

ext_module = Linker.OpenLibrary("libKillerEncryption", version="1.2.3")

s = "blah blah a string"
es = ext_module.call_method("encrypt|s", s)

sounds... neat.

> > This all seems very reasonable to me. There is NO reason that an
> > application language should provide the constructs for modeling the
> > machine. Let's do the things that require such low-level notions in
> > C, including standard memory management and implementing numeric
> > packages. Removing it from the domain of applications is a boon.

But, besides making the language "safe", you remove some
functionality that can make the language truly "all-purpose".

Say, making a truly minimal python, which doesn't need
the standard C runtime. How about it?

Run the python interpreter directly over the linux kernel.
Reminds me of a C-128: basic running on top of the "kernel".

> I agree that applications normally shouldn't use those things, but you
> know, I'd just much rather write a Python compiler in Python than in
> C.

Definitely.

> An application language should provide the constructs its applications
> need to use.  An application language for numerical scientific
> computing applications should provide multidimensional rectangular
> homogeneous arrays.  An application language for compiling code on the
> fly should provide instructions and memory management.

And, if the code is dynamica, just like all the rest of python
during runtime, you can change it's semantics on the run;
sounds like a *very* dangerous, but fun, idea.

Hmmm... changing garbage collection, on the run. Or maybe the object
instantiation process... or installing a new thread handler...
or ...

I dunno, many of you have better ideas.

> > That said, it might be worthwhile to encapsulate the memory 
> > management (and other low-level mechanisms required) behind 
> > a fixed interface, implemented in C, and then make a Python 
> > compiler in Python.

Yup.

> Once you have the Python compiler, of course, the fixed interface can
> be implemented in Python instead of C.

Indeed. Eventually, Python removes all C code from itself, because
any code which needs to be emitted (machine code) will be translated
python code. No need for a C base, as anything can be compiled python.

This sounds like a great idea.

-gus




More information about the Python-list mailing list