3. 使用接近标准的工具
有些功能不是内建在语言中,但大多数程序员都在使用。这分为语言的扩展和帮助您开发程序的工具。
扩展
- defsystem 用来定义一个程序
- CLIM、CLX等图形化库
工具
- 来自 FSF、Lucid 的 emacs
缩进,字体/颜色支持
定义/参数列表/文档/正则查找
和lisp交互 - 来自CMU的 xref、manual 等等
- 来自供应商的浏览器,调式器,分析器
DEFSYSTEM
选择一个公共领域版本的defsystem(不幸的是,dpANS CL 没有标准)。
- 绝对路径名只放在一个地方
- 使用 defsystem 加载所有内容
- 区分编译和加载
- 有选择地做版本控制
(defpackage "PARSER" ...)
(defsystem parser
(:source "/lab/indexing/parser/*")
(:parts utilities "macros" "grammar" "tokenizer"
"optimizer" "debugger" "toplevel"
#+CLIM "clim-graphics" #+CLX "clx-graphics"))
- 确保你的系统加载时没有编译器警告
(第一次和之后的几次)
(学习使用(declare (ignore ...))
) - 确保系统可以从头编译
(消除挥之不去的引导问题)
编辑器命令
你的编辑器应该可以做下面操作:
- 按s表达式移动并显示匹配的父级
- 适当缩进代码
- 寻找不平衡的括号
- 用字体和颜色装饰代码
- 找到任何符号的定义
- 找到任何符号的参数和文档
- 宏展开任意表达式
- 将当前表达式、区域或文件发送给Lisp进行求值或编译
- 保存发送到Lisp的命令的历史记录,并允许您编辑和重新发送它们
- 使用键盘、鼠标和菜单
Emacs可以完成所有这些工作。如果你的编辑器不能,抱怨直到它被修复,或者换一个新的。
Emacs:缩进和注释
不要尝试去自己缩进。
反而,应该让编辑器来完成这个。
一种近乎标准的形式已经形成。
- 80列的最大宽度
- 遵守注释规约
;
用于行内注释;;
用于函数内注释;;;
用于函数间注释;;;;
用于段落头(用于大纲模式) cl-indent
库可以配置如何缩进
(put 'defvar 'common-lisp-indent-function '(4 2 2))
lemacs
可以提供字体和颜色
(hilit::modes-list-update "Lisp"
'((";;.*" nil hilit2) ...))