Implement environments
Lisp allows passing the environment around where &env is permitted in lambda-lists. Some implementations also allow access to this environment (and it's unfortunately implementation-specific, so we possibly should adopt the same API as another popular implementation for compatibility).
As curiosity I still tried printing the environment in ECL using a little trick, so it's not necessarily a very long way from being usable for the user...
(defmacro print-env (&environment env)
(format t "~S~%" env)
t)
(defun print-env-1 ()
(let ((foo 1)
(bar 2)
(baz 3)
(quux 4))
(declare (type fixnum foo bar baz quux))
(print-env)))
(((FOO NIL T (1 . 5)) (BAR NIL T (1 . 4)) (BAZ NIL T (1 . 3))
(QUUX NIL T (1 . 2)) (:BLOCK PRINT-ENV-1 NIL (1 . 1))
(SI:FUNCTION-BOUNDARY SPECIAL NIL (1 . 0))))
(((FOO NIL T (1 . 4)) (BAR NIL T (1 . 3)) (BAZ NIL T (1 . 2))
(QUUX NIL T (1 . 1)) (SI:FUNCTION-BOUNDARY SPECIAL NIL (1 . 0))))
Although the same on SBCL is already more useful.