Block compilation allows calls to global functions defined by
defun to be compiled as local calls. The function call
can be in a different top-level form than the
defun, or even in a
In addition, block compilation allows the declaration of the entry points to the block compiled portion. An entry point is any function that may be called from outside of the block compilation. If a function is not an entry point, then it can be compiled more efficiently, since all calls are known at compile time. In particular, if a function is only called in one place, then it will be let converted. This effectively inline expands the function, but without the code duplication that results from defining the function normally and then declaring it inline.
The main advantage of block compilation is that it it preserves efficiency in programs even when (for readability and syntactic convenience) they are broken up into many small functions. There is absolutely no overhead for calling a non-entry point function that is defined purely for modularity (i.e. called only in one place.)
Block compilation also allows the use of non-descriptor arguments and return values in non-trivial programs (see number-local-call).
|• Block Compilation Semantics|
|• Block Compilation Declarations|
|• Compiler Arguments|
|• Practical Difficulties|
|• Context Declarations|
|• Context Declaration Example|