zoukankan      html  css  js  c++  java
  • 小议common lisp程序开发流程

    小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET

    小议common lisp程序开发流程

    分类: lisp 1316人阅读 评论(2) 收藏 举报

    作者:winterTTr(转载请注明)

    最近在测试xml库的功能,于是写了一个下面的小程序:

    1. (require 'cxml)  
    2. (require 'xpath)  
    3. (defun main()  
    4.   (xpath:do-node-set   
    5.      (node (xpath:evaluate   
    6.                "//a/@p"   
    7.                (cxml:parse "<root><a p=/"1/" ></a><a p=/"2/" ></a></root>" (cxml-dom:make-dom-builder))))  
    8.      (format t "~a~%" (dom:value node) )))  

    依旧使用上篇文章的ccl.cmd的方式加载程序,可发现了“很严重”的问题。加载速度太慢了,一个cxml的库加载了3-5秒的时间,这怎么能忍。难道每次运行common lisp脚本都要这么久么?

    于是乎,对cl的开发流程和发布方式产生了很大的疑问。或许是受python的影响太深入了,我依旧按照python的方式去开发cl,我想这才是引起这个问题的最大原因。

    那么,一般的cl的开发流程应该是什么样子呢,带着个这问题去stackoverflow上请教了一下其他人,把答案大约总结一下:

    1. 编辑你的脚本

    2. 利用交互式方式运行你的脚本,当然,这里非常推荐emacs+SLIME的方式。

        也就是说,cl的程序并不是一口气写完了去跑,而是边跑边写边改,有点hit and run的意味。这样,在每次开发的时候加载相对应的库,然后在加载完毕的cl环境中开发,测试和更改你的程序,这样才是相对正确的cl”开发“过程。

    3. 好了,如果你的程序开发完了,最终用什么样的形式发布呢?

       a. 如果你写的是库,那么以源码的方式发布就好了,当然可以要结合asdf的相关规则,要别人能load。

       b. 我想更多人关心如果只是简单的程序呢?

           当然,依旧可以使用源码的方式发布,那么,肯定每次运行都要加载相关的库,而且要保证用户也已经安装了你使用的库,否则会无法运行,这或许不是我们想要的答案。cl的确提供了另一种方式,就是将你的当前的cl环境dump出来,这种在cl中似乎叫"save-world“的功能,将当前lisp环境的heap保存下来,当再次加载的时候,就免去了加载库所消耗的所有时间了。当然每个发布版本实现的函数并不相同。

    依旧以我上文的为例子:

    打开cl控制台(在这里我使用ccl):

    ? (load "D:/test.lisp")

    .... some output .....

    ? (ccl:save-application "D:/compile.bin" :toplevel-function 'main :prepend-kernel t)

    其中: toplevel-funciton 定义compile.bin被运行的时候,自动调用的函数

             prepend-kernel会将lisp的启动程序也dump这个image文件,那么这个文件就可以像exe一样被运行了。

    当然,或许这个image文件还是有点大,在我的机器上需要30M,不过,带来的性能提高,还是非常值得使用的。

    这里只是小议一下一般的流程,感觉很多刚刚接触cl的人或许和我有同样的疑惑。欢迎大家给出更多的意见和想法。

  • 相关阅读:
    special word count
    Regular Expression
    position 之 fixed vs sticky
    查看linux并发连接数的方法
    Linux/Unix环境下的make命令详解(转)
    Redis数据结构(转)
    maven中依懒scope说明
    mysql主从复制
    linux查看是否已经安装某个软件
    在mac下使用py2app打包python项目
  • 原文地址:https://www.cnblogs.com/lexus/p/3321768.html
Copyright © 2011-2022 走看看