common lisp - Proclaim, declaim, declare -
can please explain differences between 3 symbols proclaim, declaim , declare? thanks!
they symbols, not keywords.
proclaim names function making global declarations. should utilize declaim instead whenever possible.
declaim names macro making global declarations (like proclaim) effective @ compile-time.
declare symbol (i.g., not name function, macro, or special operator) making local declarations in origin of some forms.
so, first 2 impact global environment , lastly 1 local.
declaim preferable on proclaim because has immediate effect in compilation environment:
although execution of proclaim form has effects might impact compilation, compiler not create effort recognize , specially process proclaim forms. proclamation such following, if top level form, not have effect until executed:
(proclaim '(special *x*))
if compile time side effects desired, eval-when may useful. example:
(eval-when (:execute :compile-toplevel :load-toplevel) (proclaim '(special *x*)))
in such cases, however, preferrable utilize declaim purpose.
i.e., if code is
(proclaim '(special *x*)) (defun foo () (print *x*)) the compiler complain foo reads unknown special variable *x*, while
(declaim (special *x*)) (defun foo () (print *x*)) will cause no warnings.
common-lisp
No comments:
Post a Comment