Is there a way to protect a piece of critical code?

Hendrik van Rooyen mail at microcorp.co.za
Sat Jan 13 04:00:40 EST 2007


 "robert" <no-spam at no-spam-no-spam.invalid> wrote:


> Hendrik van Rooyen wrote:

> > So far I have only used dicts to pass functions around
> > in a relatively unimaginative static jump table like way...
> 
> 
> Probably one has just to see that one can a pass a function object 
> (or any callable) around as any other object.
> Similar to a function address in assembler/C but very comfortable 
> and with the comfort of closures (which automatically hold the 
> status of local variables):
> 
> def f():
>      print "hello"
> 
> def g(func):
>      print "I'll do it ..."
>      func()
>      print "done."
> 
> 
> def run(x):
>      g(f)
>      a="local variable\n"
>      def h():
>          b="inner local"
>          print "inner function"
>          print x,a,b
>      g(h)
>      g(lambda:sys.stdout.write(a))
> 
> run(1)
> 
>  From there its just natural to not pass dead objects through an 
> inter-thread queue, but just code as it or even a "piece of 
> critical code" ...
> A small step in thought, but a big step in effect - soon 
> eliminating bunches of worries about queues, pop-races/None 
> objects, protocol, serialization, critical sections, thousands of 
> locks etc.

Thanks - this simplicity takes a bit of getting used to - I am used 
to passing what are effective entry point pointers around while
building state machines that run under interrupt - effectively
dynamically changing vectors for ticker based routines.  But
on the low level, trying to pass data at the same time is a bit
of a pain, as you have to look after it yourself, so the 
temptation is great to only use globals...  
This passing_the_function_along_with_its_data is neat...

*sigh* now if only it were possible to do it over a serial link,
in the same way as through a queue (I know about Pyro, but
this does not seem quite the same thing )

I suppose its not really possible - because while I suspect only 
"pointers" get passed through say a queue, you would have to
send the actual code along as well over a link - or you need a 
mirror of the code on both sides, and a way to translate 
addresses - which I suppose is why Pyro looks like it does.

I am working on something similar on a *very* small scale 
at the moment, in the context of control of physical things.
Hence the sigh.

- Hendrik




More information about the Python-list mailing list