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

分类: lisp 2011-04-17 20:59 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) )))

(require 'cxml) (require 'xpath) (defun main() (xpath:do-node-set (node (xpath:evaluate "//a/@p" (cxml:parse "<root><a p=/"1/" ></a><a p=/"2/" ></a></root>" (cxml-dom:make-dom-builder)))) (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的人或许和我有同样的疑惑。欢迎大家给出更多的意见和想法。

小议common lisp程序开发流程 - Ever 17 - 博客频道 - CSDN.NET的更多相关文章

  1. Notepad++前端开发常用插件介绍 - BorisHuai前端修炼 - 博客频道 - CSDN

    Notepad++前端开发常用插件介绍 - BorisHuai前端修炼 - 博客频道 - CSDN.NET http://blog.csdn.net/borishuai/article/details ...

  2. 解决基于BAE python+bottle开发上的一系列问题 - artwebs - 博客频道 - CSDN.NET

    解决基于BAE python+bottle开发上的一系列问题 - artwebs - 博客频道 - CSDN.NET 解决基于BAE python+bottle开发上的一系列问题 分类: python ...

  3. flask实战-留言板-Web程序开发流程

    Web程序开发流程 在实际的开发中,一个Web程序的开发过程要设计多个角色,比如客户(提出需求).项目经理(决定需求的实现方式).开发者(实现需求)等,在这里我们假设自己是一个人全职开发.一般来说一个 ...

  4. IOS应用程序开发流程

    应用程序开发流程 1.IOS开发需要思考的问题 用户是谁?不同应用程序的内容和用户体验大不相同,这取决于想要编写的是什么应用程序,它可能是儿童游戏,也可能是待办事项列表应用程序,又或者是测试自己学习成 ...

  5. iOS开发的知名大牛博客小汇

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat ...

  6. 用PHP开发自己的独立博客(一)——概述

    开篇废话:因为重新回归朝九晚五的生活,于是就想开始写技术博客,当是做技术文档了.于是试用了各类博客,CSDN.cnblogs都还不错.简单试用了一下,说说各自的特点. CSDN的界面不能定制,使用默认 ...

  7. 【敏杰开发】Scrum Meeting 博客汇总

    敏杰开发团队 Scrum Meeting 博客汇总 项目名称:[知识路书] 一.Alpha阶段 Scrum meeting 1 2020/04/07 选题 Scrum meeting 2 2020/0 ...

  8. 使用Phalcon框架开发一个简易的博客系统

    使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...

  9. YARN应用程序开发流程(类似于MapReduce On Yarn)本内容版权归(小象学院所有)

    MapReduce On Yarn和MapReduce程序区别 MapReduce On Yarn(由专业人员开发)1 为MapReduce作业运行在YARN上提供一个通用的运行时环境2 需要与Yar ...

随机推荐

  1. 当JAVA集合移除自身集合元素时发生的诸多问题

    一段代码目的是想删除集合中包括"a"字符串的集合项: public class TestForeach { public static void main(String[] arg ...

  2. Swift - 使用UI Dynamics给UIKit组件添加移动吸附行为

    UI Dynamics是UIKit的一个新组成部分,它向iOS中的视图提供了与物理学有关的功能和动画.可以让你向视图中引入力和物理属性,可以让你的视图弹跳,舞动,受重力影响等等. 下面通过样例,演示使 ...

  3. linux head命令

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...

  4. 关于如何实现程序一天只启动一次的想法(C++实现)

    问题描述: 我们在程序开发当中,经常会遇到某些子程序需要实现一天只启动一次的功能,该功能实现的方法有很多种,其原理都是通过记录标记为来实现的.本次要分享的也是利用程序标记为来实现的,而且只需要使用一个 ...

  5. How to install vim on linux

    前几日了解到 vim 文本编辑器,据说很强大,使用起来效率很高,今天怀着很好奇的心理,学习了一下vim编辑器的下载安装方法,在此详细介绍一下安装vim编辑器的几种常用方法: 第一种方法就是在 Ubun ...

  6. C语言指针和数组知识总结(上)

    C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...

  7. if(男深圳集体户口&&女非深圳户口)深圳准生证办理材料及流程

    所需材料 一.女方需要办理流动人口婚育证明(蓝色的小本本). 办理材料.各地可能不同.这个是在女方的户籍所在地办理(最好在女方户籍所在地办理女方初婚未育证明). 二.男方在公司开出初婚未育证明. 三. ...

  8. State Design Pattern 状态设计模式

    设置好内部状态,然后依据不同的函数作为行为模式,进行状态转换. 有点像Finite Automata算法,两者的思想是一样的. 会Finite Automata,那么这个设计模式就非常easy了. # ...

  9. oracle 分区表exchange原理

    oracle分区的exchange操作非常快,那原理是什么呢?下面我们来做个实验: SQL> create table test (id number(3)); 表已创建. SQL> in ...

  10. 读书与写论文的引导书——leo鉴书60

    我是专科直接考的研究生.在论文写作方面基本能够算是初级.MBA毕业那会儿要写论文,在网上找了不少这方面的书,<论文与治学>是当中之中的一个. 这本那时为应景儿卖的书,成了我之后学习与工作的 ...