From: Sam S. <sd...@gn...> - 2004-09-28 22:29:19
|
* destructuring on the result of multiple-value-list form is transformed to a multiple-value-setq form, reducing the amout of consing. e.g. (macroexpand '(loop for (a b c) = (multiple-value-list (foo)))) => (BLOCK NIL (LET ((A NIL) (B NIL) (C NIL)) (MACROLET ((LOOP-FINISH NIL '(GO #:LOOP-EPILOGUE-7002))) (TAGBODY #:LOOP-BODY-7001 (MULTIPLE-VALUE-SETQ (A B C) (FOO)) (GO #:LOOP-BODY-7001) #:LOOP-EPILOGUE-7002)))) CLISP is _much_ worse: (MACROLET ((LOOP-FINISH NIL (SYSTEM::LOOP-FINISH-ERROR))) (BLOCK NIL (LET ((#:G415 NIL)) (LET ((A NIL) (B NIL) (C NIL)) (LET NIL (MACROLET ((LOOP-FINISH NIL '(GO SYSTEM::END-LOOP))) (TAGBODY (SETQ A (CAR (SETQ #:G415 (MULTIPLE-VALUE-LIST (FOO)))) B (CAR (SETQ #:G415 (CDR #:G415))) C (CAR (CDR #:G415))) SYSTEM::BEGIN-LOOP (PROGN) (PSETQ A (CAR (SETQ #:G415 (MULTIPLE-VALUE-LIST (FOO)))) B (CAR (SETQ #:G415 (CDR #:G415))) C (CAR (CDR #:G415))) (GO SYSTEM::BEGIN-LOOP) SYSTEM::END-LOOP (MACROLET ((LOOP-FINISH NIL (SYSTEM::LOOP-FINISH-WARN) '(GO SYSTEM::END-LOOP))))))))))) 1. conses in MULTIPLE-VALUE-LIST 2. has the MULTIPLE-VALUE-LIST code in 2 places -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> We are born naked, wet, and hungry. Then things get worse. |