Trucler icon indicating copy to clipboard operation
Trucler copied to clipboard

Environment protocol for Common Lisp compilers.

#+TITLE: Trucler

This library defines a CLOS-based protocol to be used by Common Lisp compilers for environment query and update. In addition, library authors can use the =trucler-native= interface to inspect native environments. Trucler supports introspection for variables, functions, tags, blocks and optimization policies.

  • Examples ** Introspection at Macroexpansion Time The following macro can be used to ensure the presence of a local symbol macro, and to see whether it has the expected expansion:

#+BEGIN_SRC lisp (eval-when (:compile-toplevel :load-toplevel :execute) (defvar client (make-instance 'trucler-native:client)))

(defmacro assert-local-symbol-macro-description (name &key (expansion nil expansion-p) &environment env) (let ((description (trucler:describe-variable client env name))) (check-type description trucler:local-symbol-macro-description) (when expansion-p (assert (equal expansion (trucler:expansion description)))) `(values))) #+END_SRC

** Introspection at Runtime Trucler can also be used to inspect the runtime environment - here with an example of querying the state of the variable =print-array=. #+BEGIN_SRC lisp (trucler:describe-variable (make-instance 'trucler-native:client) nil 'print-array) ; => #<trucler-native-sbcl::global-special-variable-description {100A7E5A23}> #+END_SRC

  • Related Work Trucler can be seen as a modern, extensible version of the protocol described in section 8.5 of the second edition of Guy Steele's book [[https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node102.html#SECTION001250000000000000000][Common Lisp, the Language]].