在Clozure Cl中处理图像

| 1)在ccl中制作图像的正确方法是什么?或之间的确切区别是什么?
(compile-file \"foo.lisp\")
(progn (load \"foo.lisp\") (save-application \"foo\"))
? 2)是否有可能加载多个图像(首选命令行)?     
已邀请:
        Common Lisp系统中的文件编译器以某种机器语言(取决于目标处理器)或某种虚拟机(例如CLISP)创建原始源的表示。然后,可以使用LOAD函数将此编译的文件加载到正在运行的Lisp系统中,并创建源的定义(函数,类,变量等),并执行文件中的其他代码。 可以直接加载源文件(也可以使用功能LOAD)。如果Lisp甚至使用编译器来加载表单,则文件编译器的优点是: 加载已编译的代码应该稍微快一点 编译时进行一些错误检查 在运行时以更快的代码进行更积极的编译 代码可能更小(取决于) 保存图像是独立的。该映像是正在运行的Lisp的内存转储。但是,根据Lisp系统的不同,通常不是每个状态都可以转储。不能转储到映像中的对象的候选对象:文件连接,网络连接,打开的窗口等。因此,启动映像时可能需要重新打开这些对象。 如果要启动Lisp应用程序,可以使用以下几种方法: 在启动时加载所有源代码 在启动时加载所有已编译的代码 加载包含所有代码的图像 后者可能是最快的。对于许多目的,现在在启动时加载编译的代码也足够快,尤其是如果启动仅偶尔执行一次时。 让我们再次看看您的问题。
(compile-file \"foo.lisp\")
上面只是将一个文件编译为一个已编译文件(FASL文件,\'fast load \')。编译的效果还在于,某些信息已记录在Lisp系统中,但是该文件的定义不可用。然后,您需要加载编译的文件。
(progn (load \"foo.lisp\") (save-application \"foo\"))
以上首先加载文件。请注意,带有增量编译器的Lisp可能会编译该文件中的部分或全部语句(CCL和SBCL正在执行此操作)。 SAVE-APPLICATION是CCL特定的功能,它转储完整的Lisp状态(减去文件连接等),然后创建一个可以启动的应用程序。 如果要创建像其他应用程序一样启动的Lisp应用程序,则可以使用SAVE-APPLICATION。 是否可以加载多个图像取决于系统。在CCL中,您不能这样做。在Lisp机器上,可以加载基本映像,然后在其上加载多个增量映像。     
        
compile-file
做到了所言:将源文件编译为本地代码,并将结果存储在另一个文件中。可以用
load
函数加载用
compile-file
编译的文件。编译仅仅是一种优化,因此效果与直接加载源文件非常相似。 相反,核心映像存储Lisp环境的完整状态,包括Lisp堆(包含所有已加载的代码和数据)以及执行状态,这就是为什么尝试将多个核心映像加载到单个Lisp实例中的原因没有任何意义。如手册中所述,您可以使用
(ccl:save-application \"image_name\")
保存核心图像,其中
image_name
是要创建的图像文件的名称。只能通过启动新的Clozure CL实例并为映像文件提供
-I
命令行选项来加载核心映像。 通常,如果您正在编写包含多个源文件的软件,则通常通常不想手动编译和加载内容。相反,请考虑创建系统定义文件并使用ASDF加载软件。     

要回复问题请先登录注册