Emacs Lisp的“从上至下执行”是可依赖的吗?

这里不讨论诸如lazy load等人为控制执行顺序的方法造成的影响。

我想问的是Emacs Lisp的“从上到下执行”这个机制是一定的吗?会不会即使我没有人为干扰也会发生变化?

谢谢

I have read it. However, it is not suitable to use progn anywhere…

–Translated by Google Translate

So the body of a function was made into an implicit progn : several forms are allowed just as in the body of an actual progn . Many other control structures likewise contain an implicit progn.

既然函数的body就是一个implicit的progn那么自然就是顺序执行的了。

http://www.gnu.org/software/emacs/manual/html_node/elisp/Control-Structures.html

The simplest order of execution is sequential execution: first form a, then form b, and so on. This is what happens when you write several forms in succession in the body of a function, or at top level in a file of Lisp code

toplevel也是顺序执行,这样看来“从上至下执行”应该是没问题的。和sequential相对的应该是分支和循环。

progn的意义应该更多的是语法上的,比如if的then部分只接受一个语句,如果想要条件成立的时候执行一系列语句的话就只能用progn包起来才能保证语法正确。

1 个赞

不会

Lisp 里只有 Scheme 开始允许有 unspecific evaluation order ,而且不是必须有,比如 chez 不保证从左到右,但 Racket 会遵守从左到右。原则上是为了方便编译器优化和鼓励减少使用副作用。

1 个赞