sbcl 使用 --script 立即解析并执行

sbcl parse and execute immediately with --script

如果我运行以下常见的 lisp 代码:

(print "A")
(print "B")
(print "C - No closing bracket"

sbcl --script ./test.lisp

AB 被打印出来。 之后错误如预期般出现。

SBCL 是否解析第一行(或换句话说“括号内的代码”)并在进入下一部分之前立即执行它?或者它是否解析整个文件并“标记”在 AST 中的特定点存在解析器错误?

它逐表读取内容,与 loadcompile 等的方式相同。它正在做这样的事情(但更复杂):

(defun trivial-script-runner (f)
  (let ((*package* *package*))
    ;; ... and other things
    (with-open-file (in f)
      (loop for form = (read in nil in)
            until (eq form in)
            do (eval form)))))