📄 00000014.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: KONG (霍犀子), 信区: Linux <BR>标 题: Re: [编程] 程式设计工具杂谈 <BR>发信站: BBS 水木清华站 (Thu Dec 11 05:11:49 1997) <BR> <BR>花两个月看懂Emacs Lisp Reference Manual知道怎么编LISP程序了, <BR>你就什么也不愁了.那个Manual写得还是很有意思的. <BR> <BR>【 在 fuse (保险丝) 的大作中提到: 】 <BR>∶<I> 我想调试我的BBS系统,可我进了emacs差点连退都没退出去, </I><BR>∶<I> 我有看那个Tutorial, 上来先教人光标移动,吓得大跳 </I><BR>∶<I> 这位大侠,教教我如何用emacs调程序吧! </I><BR>∶<I> (或者哪里有一些好的资料?) </I><BR>∶<I> 多谢了 </I><BR> Emacs是第一个人工生命 <BR> <BR>Emacs看起来像是一个其貌不扬的普通编辑器,但实际上却是个真正意义上 <BR>的IDE(Integrated Developing Environment),和Borland,Microsoft的 <BR>东西不同,Emacs对用户和程序员区别不大,也就是用户即程序员,程序员 <BR>即用户.这一点是这样实现的:Emacs有一个C编的硬核,像其它C语言编的 <BR>程序一样,这个硬核是不能轻易改变的,除非你有源码并且对系统内部有 <BR>较深刻的了解,即使有了这些条件也必须重新make,在运行Emacs时是不能 <BR>对这个硬核做任何代码上的修改的.安装过Emacs的人知道在安装过程中会 <BR>生成一个temacs可执行文件,这个temacs就是完全由C实现的硬核,它实现 <BR>的是LISP的链表解释机制和一些基本的LISP函数,比如在Emacs的 <BR>*scratch* (涂鸦) buffer里打入: <BR> <BR>(symbol-function 'car) <Ctrl-j> <BR> <BR>系统会告诉你 <BR>#<subr car> <BR> <BR>就是说car是个C实现的LISP函数,属于硬核的一部分,你不能改变它的函数 <BR>定义. <BR> <BR>其实理论上说这个硬核完全可以最小化,只包含一些最最基本的函数,大概 <BR>用汇编就能够写出来.但为portability和performance起见,这个硬核用C <BR>实现并包含了基本上所有的常见LISP函数.打个比方,就像逻辑运算一样, <BR>尽管用NOT和AND就能够表示所有的逻辑运算,平常我们还是NOT,AND,OR齐上. <BR>temacs里有些LISP函数其实完全可以用一些更基本的LISP函数实现,但为了 <BR>速度,Richard Stallman还是把它们用C实现了,这样做的好处是速度快了, <BR>坏处看完了下面你就明白了. <BR> <BR>有了temacs,以后的事情就是在它的基础上滚雪球,不断地在temacs里eval <BR>LISP函数,temacs知道的越来越多,功能就会越来越强.Stallman选了几个 <BR>最基本的package,如文件操作等等,作为标准的部件,在install时就喂给 <BR>temacs,再把LISP可执行内存映象dump下来,这就是平常大家用的emacs了. <BR>同样在*scratch*里打入: <BR>(symbol-function 'find-file) <Ctrl-j> <BR> <BR>结果可能是 <BR>(lambda (filename) ...............) <BR>这就是经过eval而被temacs吸收的LISP函数; <BR> <BR>也可能是 <BR>#[(filename) ................] <BR>这是Stallman定义的一种LISP bytecode,用来提高LISP的运行效率,这种bytecode <BR>一般比功能等价的C代码还是要慢一些,但和LISP的文本代码是一一对应的,并且速 <BR>度大大提高,必要时可以通过decompile恢复成LISP文本代码.猜测JAVA的bytecode <BR>借鉴了不少LISP bytecode的技术,JAVA可以说是一个表面上C++词法风格、实际上 <BR>Object-oriented的type architecture加上LISP的run-time environment.JAVA <BR>Virtual Machine完全就是一台最新LISP Machine. <BR> <BR>言归正传,经eval而被temacs吸收的LISP函数和那种#[subr ...] C函数就不一样了, <BR>你可以通过eval加入一些这样的函数,也可以通过unintern去掉一些这样的函数, <BR>还可以现改函数定义略微增加或减少一些功能,这就把一个运行程序的部件当做一 <BR>个数据库一样可以任意剪裁,根据具体情况随意增加或减少它的功能.就像生物的 <BR>新陈代谢一样,汲取营养,排泄废物,所以说Emacs是个生物,唯一的遗憾是这个生 <BR>物还是个婴儿,不会自己觅食,需要用户喂它吃那些.el文件才行. <BR> <BR>Internet上最大的.el文件库在 <BR><A HREF="ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/">ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/</A> <BR>用户也可以自编或改编一些现成的.el文件以实现自己需要的功能. <BR> <BR>.elc是byte-compile相应.el文件产生的byte-code文件,如何编写.el文件可参看 <BR>Emacs的online info manuals (C-h i)的Emacs Lisp reference. <BR> <BR>用户可用load和autoload调入新的.el文件.当然调的越多Emacs就越吃内存,Emacs <BR>有garbage-collect函数负责回收内存,硬核里有根据情况触发garbage-collect的机 <BR>制. <BR> <BR>用户用的一切功能都是temacs + 其eval过的所有LISP函数 + 与Emacs配合的外部命令 <BR>(如gdb等)实现的.其中temacs里的链表解释机制是最灵魂的部分,从有LISP的那天起 <BR>就没变过,预eval的package可由安装者指定;与Emacs配合的外部命令可以是OS里的 <BR>任何输入输出可处理的命令,当然能像gdb那样和Emacs有所约定的更好;所eval的 <BR>LISP函数是最灵活的部分,用户可以随心所欲地configure,当然喜欢玩傻瓜机的人还 <BR>是离得远一点为好. <BR> <BR>XEmacs在user interface上下了不少工夫,但一般而言本人觉得那并不重要. <BR> <BR>太累了,就说这么多,如果谁有出版社扒分的路子不妨可以联系一下出本中文的 <BR>tutorial(当然应该比Emacs自带的tutorial要有意思,那个tutorial简直是降自己的格, <BR>它说俺就是个编辑器,大家看看俺灵不灵.结果往往是用户觉得,呸,怎么这么难用. <BR>像我这样想说它两句好话的只好说是您二位都搞错了). <BR> <BR>-- <BR>从前的我,只会为一个目标 而奋斗; <BR>现在的我,不为任何目标 也得奋斗. <BR> <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: casio.csc.ncsu.] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -