gpt4 book ai didi

lisp - 在 Clozure Cl 中处理图像

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:23 24 4
gpt4 key购买 nike

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 文件,'快速加载')。编译的效果也是在Lisp系统中已经记录了一些信息,但是文件的定义是没有的。然后你需要加载编译后的文件。

(progn (load "foo.lisp") (save-application "foo"))

上面首先加载文件。请注意,带有增量编译器的 Lisp 可能会编译该文件中的部分或所有语句(CCL 和 SBCL 正在这样做)。 SAVE-APPLICATION 是一个 CCL 特定函数,它转储完整的 Lisp 状态(减去文件连接,...)并创建一个应用程序,然后可以启动该应用程序。

如果您想创建像其他应用程序一样启动的 Lisp 应用程序,SAVE-APPLICATION 是最佳选择。

是否可以加载多个图像取决于系统。在 CCL 中你不能。在 Lisp 机器上,可以加载一个基本图像,然后在其上加载多个增量图像。

关于lisp - 在 Clozure Cl 中处理图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com