Next: Related Topics, Previous: Function Cells, Up: Functions and Commands [Contents][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. Since the flexibility of redefining functions is an important feature of SXEmacs, you should not make a function inline unless its speed is really crucial.
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.
It’s possible to define a macro to expand into the same code that an
inline function would execute. But the macro would have a limitation:
you can use it only explicitly—a macro cannot be called with
apply
, mapcar
and so on. Also, it takes some work to
convert an ordinary function into a macro. (See Macros.) 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. (See Argument Evaluation.)
Inline functions can be used and open-coded later on in the same file, following the definition, just like macros.
Next: Related Topics, Previous: Function Cells, Up: Functions and Commands [Contents][Index]