[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
You can define an inline function by using defsubst
instead of
defun
. An inline function works just like an ordinary function
except for one thing: when you compile a call to the function, the
function's definition is open-coded into the caller.
Making a function inline makes explicit calls run faster. But it also has disadvantages. For one thing, it reduces flexibility; if you change the definition of the function, calls already inlined still use the old definition until you recompile them.
Another disadvantage is that making a large function inline can increase the size of compiled code both in files and in memory. Since the speed advantage of inline functions is greatest for small functions, you generally should not make large functions inline.
Also, inline functions do not behave well with respect to debugging,
tracing, and advising (voir la section Advising Emacs Lisp Functions). Since ease of debugging
and the flexibility of redefining functions are important features of Emacs,
you should not make a function inline, even if it's small, unless its speed
is really crucial, and you've timed the code to verify that using
defun
actually has performance problems.
It's possible to define a macro to expand into the same code that an inline
function would execute. (Voir la section Macros.) But the macro would be limited to
direct use in expressions—a macro cannot be called with apply
,
mapcar
and so on. Also, it takes some work to convert an ordinary
function into a macro. To convert it into an inline function is very easy;
simply replace defun
with defsubst
. Since each argument of an
inline function is evaluated exactly once, you needn't worry about how many
times the body uses the arguments, as you do for macros. (Voir la section Evaluating Macro Arguments Repeatedly.)
Inline functions can be used and open-coded later on in the same file, following the definition, just like macros.
[ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.