[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

re: define and set! with multiple-values

I want to thank the many people for improving my knowledge of how to
implement multiple values.

I think I'm now completely convinced that multiple values tax only
those forms that do catch, unwind-protect, specbinding, return
multiple values, bind multiple values, prog1, and unoptimized tail
recursive calls.

Unoptimized tail recursive calls are, of course, useful for debugging, but
I believe that the FAQ for Dylan says that optimization of tail recursive
calls is "required."

While I'm convinced that the tax is only a very few instructions on
those forms I notice that in CMU Lisp on my sparc:
 (defun f (x) (g x))                           ->  80 bytes
 (defun f (x) (declare (special x)) (g x))     -> 312 bytes
 (defun f (x) (declare (special x)
                       (values fixnum)) (g x)) -> 173 bytes

  - ben hyde