stackless python

Justin Sheehy justin at iago.org
Wed Jan 2 19:52:47 CET 2002


Michael Hudson <mwh at python.net> writes:

>> The thing I don't fully understand is that several Scheme
>> implementations are both smaller and faster than Python.
>
> Less dynamism, I think.  I'm not sure what the standard says about
> things like
>
> (define (func x y) (+ x y))
> (set! + -)
> (display (func 2 3))
>
> but I'd bet at least some implementations would print "5".

It's hard to show that _none_ of them do that, but on the ones I have handy:

----
Chez Scheme Version 6.1
Copyright (c) 1998 Cadence Research Systems

> (define (func x y) (+ x y)) 
> (set! + -) 
> (display (func 2 3)) 
-1
----
Welcome to MzScheme version 103, Copyright (c) 1995-2000 PLT (Matthew Flatt)
> (define (func x y) (+ x y))
> (set! + -)
> (display (func 2 3))
-1
----
$ elk
> (define (func x y) (+ x y))
func
> (set! + -)
#[primitive +]
> (display (func 2 3))
-1
----
(mit scheme)
1 ]=> (define (func x y) (+ x y))

;Value: func

1 ]=> (set! + -)

;Value 1: #[arity-dispatched-procedure 1]

1 ]=> (display (func 2 3))
-1
;Unspecified return value
----
guile> (define (func x y) (+ x y))
guile> (set! + -)
guile> (display (func 2 3))
-1
----

At least a good portion of Scheme implementations support this level
of dynamism.  At least a couple of those are pretty darn efficient
compared to CPython.  So I'd venture that while there may be "less
dynamism" in some real sense, it isn't as simple a difference as you imply.

-Justin

 
p.s. - I suspect that scheme48 might not let you assign to "+", from
       what I remember of it.  






More information about the Python-list mailing list