All Projects → s-expressionists → Trucler

s-expressionists / Trucler

Licence: other
Environment protocol for Common Lisp compilers.

Programming Languages

common lisp
692 projects

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:

(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)))

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*.

(trucler:describe-variable
 (make-instance 'trucler-native:client)
 nil
 '*print-array*)
; => #<trucler-native-sbcl::global-special-variable-description {100A7E5A23}>

Related Work

Trucler can be seen as a modern, extensible version of the protocol desicribed in section 8.5 of the second edition of Guy Steele’s book Common Lisp, the Language.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].