So how does this interact with updating the captured environment? Does the printing essentially just show a snapshot of the environment at that point?
I assume the (closure) is read back as a new closure such that the environment will be restored as an environment shared between invocations of the read result?
Interpreted result:
This is equivalent to the output in the article. Now, after running compile-defun on the function and calling it, I get: This is the byte-compiled case, which sadly is not readable for some reason. That said, IELM (Elisp REPL) makes that #<bytecode ...> form clickable (it's a so-called "presentation"), which leads straight to the following disassembly: After native-compiling via (load (native-compile "file.el")), I get the same output as with byte-compiled case (+/- the address in #<bytecode ...> form), but the disassembly is slightly different: EDIT: turns out it's IELM that's playing games with the printer. If I write: instead, I get the readable output from the article, in both byte and native-compiled cases. My understanding of the latter is, the closure returned from a native-compiled function is itself only byte-compiled (at least when used in REPL), and the difference in bytecode assembly come from the latter running through a more thorough optimization process.