[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: return
From: |
Chong Yidong |
Subject: |
Re: return |
Date: |
Fri, 03 Dec 2010 16:26:08 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) |
Chong Yidong <address@hidden> writes:
> You mean the performance overhead from adding an extra internal_catch?
> I doubt there's a free lunch here; adding a "return" or "return-from"
> mechanism would also add overhead, and that overhead would apply to
> every single funcall. Still, it's a worthwhile experiment to implement
> "return"/"return-from" and see how big the performance impact is.
I did a quick experiment, and turns out built-in blocking is a little
faster than an explicit `catch', mostly because of reduced consing. I
tested with a function that runs 500,000 tight `while' loops:
(defun test-loop-with-catch ()
(dotimes (ii 500000)
(let ((ll '(1 2 3 4 5 6 7 8 9 10)))
(catch 'exit
(while ll (setq ll (cdr ll)))))))
The run time is 1.164s, as opposed to 1.084s with the `catch' omitted.
So an explicit `catch' adds about 10 percent to the run time.
If I hack Fwhile to perform a catch internally, the runtime for the test
function (with the `catch' omitted) is 1.057s, within the margin of
error of the unhacked Emacs.
This (very limited) test indicates that adding built-in support for
block, return, and return-from should have little performance impact.
(Though the block tags ought to use a specialized obarray instead of
what cl-macs.el does, which is to intern them as "--cl-block-%s--".)
Does anyone see a deeper problem with providing such functions?