lisp代码一直以灵活性著称,lisp中的宏和函数式编程思想已经逐渐开始融入其他语言。
今天我们不说lisp语言的种种好处,说说lisp编译的问题。
lisp最常见的运行方式是解释运行,这种方式依赖于解释器,执行速度也不快,效率较低,所以lisp的编译好的工程,如果不是给用户做调整的部分或者是不希望二次开发的代码,常使用编译的方式,加速程序的运行,据说lisp的商业用编译器,编译后程序的效率能达到C语言的1/2,还真是恐怖啊。。。
lisp的编译是编译成字节码,最普通的方法,比如用clisp,可以加一条指令
clisp -c a.lisp
这样就看到, clisp自动给我们生成了a.fas 和a.lib两个文件
clisp a.fas就可以解释执行字节码了
这种方式高效快捷,是非常实用的方法,不过还另外提供一种生产exe的方式
lisp不能编译成机器码,这个exe实际上是自带一个lisp解释器的clisp实现,需要把clisp根目录下full文件夹中的dll全部带走,这样才能运行。
方法如下:
(EXT:SAVEINITMEM "a.exe"
:QUIET t
:INIT-FUNCTION 'main
:EXECUTABLE t
:NORC t)
main那一行最为重要,是在指定该程序的入口函数,这样就打包了一个exe程序。
也许你还会用到这个(EXT:EXIT),用来退出的函数,因为你的程序跑起来后就是一个lisp的实现