www-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

www/gnu rms-lisp.zh-cn.html po/rms-lisp.zh-cn-e...


From: GNUN
Subject: www/gnu rms-lisp.zh-cn.html po/rms-lisp.zh-cn-e...
Date: Wed, 3 Nov 2021 23:30:16 -0400 (EDT)

CVSROOT:        /web/www
Module name:    www
Changes by:     GNUN <gnun>     21/11/03 23:30:16

Modified files:
        gnu            : rms-lisp.zh-cn.html 
        gnu/po         : rms-lisp.zh-cn-en.html rms-lisp.zh-cn.po 

Log message:
        Automatic update by GNUnited Nations.

CVSWeb URLs:
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/rms-lisp.zh-cn.html?cvsroot=www&r1=1.5&r2=1.6
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/po/rms-lisp.zh-cn-en.html?cvsroot=www&r1=1.4&r2=1.5
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/po/rms-lisp.zh-cn.po?cvsroot=www&r1=1.17&r2=1.18

Patches:
Index: rms-lisp.zh-cn.html
===================================================================
RCS file: /web/www/www/gnu/rms-lisp.zh-cn.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- rms-lisp.zh-cn.html 2 Oct 2020 08:29:05 -0000       1.5
+++ rms-lisp.zh-cn.html 4 Nov 2021 03:30:15 -0000       1.6
@@ -1,16 +1,30 @@
 <!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
 
 <!--#include virtual="/server/header.zh-cn.html" -->
-<!-- Parent-Version: 1.77 -->
+<!-- Parent-Version: 1.96 -->
+<!-- This page is derived from /server/standards/boilerplate.html -->
+<!--#set var="TAGS" value="gnu-history" -->
+<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
 
 <!-- This file is automatically generated by GNUnited Nations! -->
 <title>我的Lisp经历和GNU Emacs的开发 - GNU工程 - 
自由软件基金会</title>
+<style type="text/css" media="print,screen"><!--
+a[href*='#foot-'] { font-size: .94em; }
+-->
+</style>
 
 <!--#include virtual="/gnu/po/rms-lisp.translist" -->
 <!--#include virtual="/server/banner.zh-cn.html" -->
+<!--#include virtual="/gnu/gnu-breadcrumb.zh-cn.html" -->
+<!--GNUN: OUT-OF-DATE NOTICE-->
+<!--#include virtual="/server/top-addendum.zh-cn.html" -->
+<div class="article reduced-width">
 <h2>我的Lisp经历和GNU Emacs的开发</h2>
 
-<blockquote><p>(Richard Stallman在国际
Lisp大会上的谈话记录,2002年10月28日)</p></blockquote>
+<div class="infobox">
+<p>Richard Stallman在国际
Lisp大会上的谈话记录,2002年10月28日。</p>
+</div>
+<hr class="thin" />
 
 <p>由于我通常的演讲都和Lisp无å…
³ï¼Œæˆ‘今天讲它们不合适。所以我将不得不即å…
´å‘挥。我的职业生涯做了太多Lisp相关的工作,因
此我还是可以讲一些有趣的事情的。</p>
 
@@ -22,7 +36,7 @@
 <p>当我在<abbr title="Massachusetts Institute of
 Technology,麻省理工学院">MIT</abbr>开始工作时,我和JonL
 White一起真正开始实现Lisp语言。我不是被JonL,而是被Russ
-Noftsker招到人工智能实验室的,这一点最讽刺,想想接下来发生的事&mdash;他一定真的后悔有那一天了。</p>
+Noftsker招到人工智能实验室的,这一点最讽刺,想想接下来发生的事&mdash;&mdash;他一定真的后悔有那一天了。</p>
 
 
<p>在1970年代,我的生活还没有被惊人的事件政治化之前,我只是不断地一个接一个地为各种程序添åŠ
 æ‰©å±•ï¼Œå…¶ä¸­å¤šæ•°å’ŒLisp无关。不过,å…
¶é—´ï¼Œæˆ‘写了一个文本编辑器,叫Emacs。Emacs的有趣之处在于它有一个编程语言,用户的编辑命令可以用这个解释性语言编写,这æ
 ·ä½ å°±å¯ä»¥åœ¨ç¼–辑时加载新的编辑命令。你可以修改你
正在用的编辑程序并且继续编辑。这æ 
·ï¼Œæˆ‘们就有了一个除了编程还可做å…
¶ä»–有用之事的系统,而且你
在使用时还可以对它进行编程。我不知道Emacs是不是第一个这æ
 ·çš„工具,但是作为编辑器它确实是第一个。</p>
 
@@ -30,50 +44,49 @@
 
 <p>最初的 Emacs 不带 Lisp。å…
¶åº•å±‚语言、一个非解释性语言&mdash;是 PDP-10 
汇编语言。我们编写的解释器实际上不是为 Emacs
 写的,它是为 <abbr title="Text Editor and COrrector">TECO</abbr> 
编写的。TECO
-是我们的文本编辑器,也是一个极å…
¶ä¸‘陋的编程语言,能有多丑陋就有多丑陋。其原因
是它本来就不是作为编程语言设计的,它是作为编辑器和命令语言设计的。比如,命令&lsquo;5l&rsquo;意思是&lsquo;移动5行&rsquo;,或è€
…用&lsquo;i&rsquo;加上一个字符串,再加上
+是我们的文本编辑器,也是一个极å…
¶ä¸‘陋的编程语言,能有多丑陋就有多丑陋。其原因
是它本来就不是作为编程语言设计的,它是作为编辑器和命令语言设计的。比如,命令<code>5l</code>意思是<code>移动5行</code>,或è€
…用<code>i</code>加上一个字符串,再加上
 ESC 按键来插入该字符串。你可以输å…
¥ä»£è¡¨ä¸€ç³»åˆ—命令的字符串,这叫命令字符串。你可以用 ESC 
ESC 做结尾,这样该串命令就执行了。</p>
 
-<p>不过,人们想要扩展该语言使之带上编程能力,所以人们就添åŠ
 äº†ä¸€äº›åŠŸèƒ½ã€‚例如,最早添加的就有循环结构,就是&lt;
-&gt;。你
把东西放在这两个符号之间,它们就循环了。还有一些晦涩的命令用来定义退出循环的条件。为了构é€
  Emacs,我们<a
-href="#foot-1">(1)</a>添加
了可以创建带名称子函数的功能。在此之前,有点像 Basic
+<p>不过,人们想要扩展该语言使之带上编程能力,所以人们就添åŠ
 äº†ä¸€äº›åŠŸèƒ½ã€‚例如,最早添加
的就有循环结构,就是<code>&lt;&nbsp;&gt;</code>。你
把东西放在这两个符号之间,它们就循环了。还有一些晦涩的命令用来定义退出循环的条件。为了构é€
 
+Emacs,我们&#8239;<a href="#foot-1">[1]</a>添加
了可以创建带名称子函数的功能。在此之前,有点像 Basic
 
语言,子函数只能有一个字母的名称。这对编写大型程序来说有点难,所以我们就添åŠ
 äº†é•¿æ–‡ä»¶ååŠŸèƒ½ã€‚实际
上,还有一些相当复杂的功能;我认为 Lisp 的
 unwind-protect 功能就来自 TECO。</p>
 
-<p>我们开始添加
一些相当复杂的功能,都是用我们所知的那个最丑陋的语法完成的,而它是可行的&mdash;人们终究能够使用它来完成大型程序。这里,明显的教训就是使用诸如
+<p>我们开始添加
一些相当复杂的功能,都是用我们所知的那个最丑陋的语法完成的,而它是可行的&mdash;&mdash;人们终究能够使用它来完成大型程序。这里,明显的教训就是使用诸如
 TECO 这æ 
·ä¸æ˜¯ä¸ºç¼–程设计的语言是一个错误。构建扩展的语言不能是事后再想的编程语言;它应该按ç
…§ç¼–程语言来设计。事实上,我们发现 Lisp
 是做这件事的最佳语言。</p>
 
-<p>Bernie Greenberg是此事的发现者<a 
href="#foot-2">(2)</a>。他用Multics
+<p>Bernie Greenberg是此事的发现者&#8239;<a 
href="#foot-2">[2]</a>。他用Multics
 
MacLisp写了一个Emacs,而且他使用MacLisp编写命令的方式直截了当。这个编辑器本身完å
…¨æ˜¯ç”¨Lisp编写的。Multics
 
Emacs是一个巨大的成功&mdash;编写新的编辑命令是如此的方便,以至于他办å
…¬å®¤é‡Œçš„秘书们都开始学习
怎么用了。他们使用的是一个介绍如何扩展Emacs的手册,手册里没说这就是编程。å›
 æ­¤ï¼Œç§˜ä¹¦ä»¬å¹¶ä¸è®¤ä¸ºä»–们在编程,也就没被吓跑。他们阅
读手册,发现自己也可以做不少有用的事,他们学会了编程。</p>
 
-<p>这样,Bernie看到一个应用程序&mdash;为你
完成任务的程序&mdash;如果内
置了Lisp,并且人们可以编写Lisp程序来扩展该应用程序,那么它实é™
…上就是人们学习
编程的一个好方法。这给了人们编写实用小程序的机会,而这在多数å
…
¶ä»–场合是不可能的。人们被自己的实用程序鼓励着&mdash;就在最困难的阶段&mdash;就在他们不相信自己可以编程的时候,直到他们最后成为程序员。</p>
+<p>这样,Bernie看到一个应用程序&mdash;&mdash;为你
完成任务的程序&mdash;如果内
置了Lisp,并且人们可以编写Lisp程序来扩展该应用程序,那么它实é™
…上就是人们学习
编程的一个好方法。这给了人们编写实用小程序的机会,而这在多数å
…
¶ä»–场合是不可能的。人们被自己的实用程序鼓励着&mdash;就在最困难的阶段&mdash;就在他们不相信自己可以编程的时候,直到他们最后成为程序员。</p>
 
 <p>此时,人们开始思考他们要怎样在一个并没有全部 Lisp 
支持的平台上做到这一切。Multics MacLisp
-既有编译器,也有解释器&mdash;它是一个完整的 Lisp 
系统&mdash;但是人们想要的是在其他没有 Lisp
+既有编译器,也有解释器&mdash;&mdash;它是一个完整的 Lisp 
系统&mdash;&mdash;但是人们想要的是在其他没有 Lisp
 编译器的系统上实现类似的东西。不过,如果你没有 Lisp 
编译器,你无法用 Lisp
-编写整个编辑器&mdash;如果只能运行解释器的话,它太æ…
¢äº†ï¼Œå°¤å…¶æ˜¯æ˜¾ç¤ºåˆ·æ–°ã€‚因此我们开发了一项混合技术。å…
¶æ€æƒ³æ˜¯å†™ä¸€ä¸ª Lisp
+编写整个编辑器&mdash;&mdash;如果只能运行解释器的话,它太æ…
¢äº†ï¼Œå°¤å…¶æ˜¯æ˜¾ç¤ºåˆ·æ–°ã€‚因此我们开发了一项混合技术。å…
¶æ€æƒ³æ˜¯å†™ä¸€ä¸ª Lisp
 解释器和编辑器的底层部分,把他们结合在一起,这æ 
·ç¼–辑器就内置了 Lisp 
功能。这些就是我们需要优化的部分。这项技术是我们已经在原始的
 Emacs
 上有意识地实践了的技术,因
为我们用机器语言重新编写了某些相当上层的功能,并且把它们作为
 TECO 的基本命令。比如,TECO
 有一个填充段落的基本命令(实际上,是完成填充
段落的大多数工作,因为å…
¶ä¸­ä¸€äº›ä¸è€—时的工作可以在上层由一个 TECO 
程序来完成)。你可以编写一个 TECO
 程序来完成整个任务,但是它太慢了,所以我们对å…
¶éƒ¨åˆ†ä½¿ç”¨äº†æœºå™¨è¯­è¨€åšå‡ºä¼˜åŒ–。在此(指混合技术),编辑器的绝大部分是用
 Lisp
 
编写的,但是那些需要非常快速运行的部分是用底层语言写的。</p>
 
-<p>因此,当我编写第二版Emacs时,我采用了同æ 
·çš„设计。底层的语言不再是机器语言,而是C。就编写运行在类Unix系统上的可移植程序来说,C是一个优秀的、高效的语言。虽然有一个Lisp解释器,但是我直接用C实现了一些特定的编辑功能&mdash;管理编辑器的缓存、插å
…
¥èµ·å§‹æ–‡æœ¬ã€è¯»å†™æ–‡ä»¶ã€åˆ·æ–°å±å¹•æ˜¾ç¤ºä»¥åŠç®¡ç†ç¼–辑窗口。</p>
+<p>因此,当我编写第二版Emacs时,我采用了同æ 
·çš„设计。底层的语言不再是机器语言,而是C。就编写运行在类Unix系统上的可移植程序来说,C是一个优秀的、高效的语言。虽然有一个Lisp解释器,但是我直接用C实现了一些特定的编辑功能&mdash;&mdash;管理编辑器的缓存、插å
…
¥èµ·å§‹æ–‡æœ¬ã€è¯»å†™æ–‡ä»¶ã€åˆ·æ–°å±å¹•æ˜¾ç¤ºä»¥åŠç®¡ç†ç¼–辑窗口。</p>
 
 <p>当时,它不再是第一个用 C 编写并运行在 Unix 上的 Emacs 
了。第一个是由 James Gosling 完成的,就是
 GosMacs。他有些奇怪。一开始,他看来还是受到了原始 Emacs 
的合作和分享精神的影响。我首先在 MIT 向人们发布了
-Emacs。有人想要把它移植到 Twenex 
系统&mdash;它最初只运行在我们在 MIT 使用的不å…
¼å®¹åˆ†æ—¶ç³»ç»Ÿä¸Šã€‚人们把它移植到了 Twenex
-上,这意味着世界上可能有数百个设备可以安装该
+Emacs。有人想要把它移植到 Twenex 
系统&mdash;&mdash;它最初只运行在我们在 MIT 使用的不å…
¼å®¹åˆ†æ—¶ç³»ç»Ÿä¸Šã€‚人们把它移植到了
+Twenex 上,这意味着世界上可能有数百个设备可以安装该
 Emacs。我们开始发布该版本,发行遵循的是&ldquo;你必
须发回所有的改进&rdquo;这æ 
·å¤§å®¶éƒ½å—益。没有人会刻意强调这个规则,但是就我所知人们都是合作的。</p>
 
-<p>Gosling一开始,的确看起来是以这æ 
·çš„精神参与的。他在一个使用手册里称此程序为Emacs,希望社区能够改善之,使之é
…
å¾—上这个名字。这是参与社区的正确方式&mdash;请大家参与并使程序更好。但是在此之后,他似乎改变了态度,并把程序卖给了一个å
…¬å¸ã€‚</p>
+<p>Gosling一开始,的确看起来是以这æ 
·çš„精神参与的。他在一个使用手册里称此程序为Emacs,希望社区能够改善之,使之é
…
å¾—上这个名字。这是参与社区的正确方式&mdash;&mdash;请大家参与并使程序更好。但是在此之后,他似乎改变了态度,并把程序卖给了一个å
…¬å¸ã€‚</p>
 
 
<p>那时,我正在为GNU系统而忙碌(一个类似Unix的自由软件操作系统,许多人错误地称之为&ldquo;Linux&rdquo;)。那时并没有跑在Unix上的自由软件版的Emacs编辑器。不过,我有一个参与了Gosling的Emacs开发的朋友。Gosling通过邮件给予他发布自己版本的许可。他建议我使用他的版本。然后,我发现Gosling的Emacs带的不是真的Lisp。它带的编程语言是&lsquo;mocklisp&rsquo;,å
…¶è¯­æ³•çœ‹èµ·æ¥åƒæ˜¯Lisp,但是没有Lisp的数据结构。所以å…
¶ç¨‹åºä¸æ˜¯æ•°æ®ï¼Œè€Œä¸”也缺失Lisp的重要元素。å…
¶æ•°æ®ç»“构是字符串、数字和其他一些专门结构。</p>
 
 <p>我得出我不能使用该程序并且要完å…
¨æ›¿æ¢è¯¥ç¨‹åºçš„结论,第一步就是编写一个真正的Lisp解释器。我逐步用真正的Lisp数据结构替换了该编辑器的每个部分,而不是使用å
…¶ä¸“门的数据结构,并使编辑器的内
部数据结构对用户的Lisp程序开放,使用户程序能够处理编辑器å†
…部数据。</p>
 
-<p>显示刷新是个例外。很长时间以来,显示刷新像是一个另类世界。编辑器一旦进å
…¥æ˜¾ç¤ºåˆ·æ–°çš„世界,事情就变成对垃圾数据收集不安å…
¨çš„非常特殊的数据结构,它们对中断处理也不安全,而且你
在此过程中无
法运行任何Lisp程序。我们已经修改了这部分&mdash;现在你
在显示刷新时也可以运行Lisp代码。这是一件很便利的事。</p>
+<p>显示刷新是个例外。很长时间以来,显示刷新像是一个另类世界。编辑器一旦进å
…¥æ˜¾ç¤ºåˆ·æ–°çš„世界,事情就变成对垃圾数据收集不安å…
¨çš„非常特殊的数据结构,它们对中断处理也不安全,而且你
在此过程中无
法运行任何Lisp程序。我们已经修改了这部分&mdash;&mdash;现在ä½
 åœ¨æ˜¾ç¤ºåˆ·æ–°æ—¶ä¹Ÿå¯ä»¥è¿è¡ŒLisp代ç 
ã€‚这是一件很便利的事。</p>
 
 <p>这个第二版的 Emacs
 
是现代意义上的&lsquo;自由软件&rsquo;&mdash;&mdash;它是力争软件自由的政治运动的一部分。该运动的精髓就是每个人都应该有自由做我们在
@@ -89,8 +102,9 @@
 指令处理数字时,系统会立即报错。我们制造
了这种电脑并且有一个专门的 Lisp 操作系统。该系统几乎完å…
¨æ˜¯ç”¨ Lisp 编写的,只有一部分是用
 microcode 编写的。人们对大规模造这种机器很感å…
´è¶£ï¼Œè¿™æ„å‘³ç€ä»–们应该开个公司。</p>
 
-<p>对开什么样的å…
¬å¸ï¼Œå¤§å®¶æœ‰ä¸¤ç§ä¸åŒçš„想法。Greenblatt想开一个他称之为&ldquo;黑客&rdquo;的å
…¬å¸ã€‚这意味着该å…
¬å¸ä¼šç”±é»‘客运作并且以有利于黑客的方式运作。另一个目的是要保持人工智能实验室的文化<a
-href="#foot-3">(3)</a>。不幸的是,Greenblatt没有任何商业经验,所以Lisp电脑团队的å
…
¶ä»–人对Greenblatt会不会成功表示怀疑。他们认为他拒绝外部资金的做法行不通。</p>
+<p>对开什么样的å…
¬å¸ï¼Œå¤§å®¶æœ‰ä¸¤ç§ä¸åŒçš„想法。Greenblatt想开一个他称之为&ldquo;黑客&rdquo;的å
…¬å¸ã€‚这意味着该å…
¬å¸ä¼šç”±é»‘客运作并且以有利于黑客的方式运作。另一个目的是要保持人工智能实验室的文化&#8239;<a
+class="ftn"
+href="#foot-3">[3]</a>。不幸的是,Greenblatt没有任何商业经验,所以Lisp电脑团队的å
…
¶ä»–人对Greenblatt会不会成功表示怀疑。他们认为他拒绝外部资金的做法行不通。</p>
 
 <p>他为什么要避免外部投资呢?因为如果一个公司引å…
¥äº†å¤–部投资者,他们就会掌控公司并且不会让你
有任何道德上的犹豫。最终,如果你
稍有犹豫,他们也会踢开你。</p>
 
@@ -108,8 +122,8 @@
 使用他们的更改。但是合同没有说 MIT 有权将这些代码放å…
¥ç”±ä¸¤å®¶å…¬å¸æŽˆæƒçš„ MIT Lisp
 
电脑系统。没有人预见到实验室的黑客小组会被彻底毁灭,但是它就是被毁灭了。</p>
 
-<p> 于是,Symbolics 启动了一个计划<a
-href="#foot-4">(4)</a>。他们对实验室说,&ldquo;我们会持续让你
们使用我们的系统改进,但是你们不能把这些改进装到 MIT 的
+<p> 于是,Symbolics 启动了一个计划&#8239;<a
+href="#foot-4">[4]</a>。他们对实验室说,&ldquo;我们会持续让你
们使用我们的系统改进,但是你们不能把这些改进装到 MIT 的
 Lisp 电脑系统上。不过,我们会让你们使用 Symbolics 的 Lisp 
电脑系统,你们可以在这些系统上运行改进版,但是仅
此而已。&rdquo;</p>
 
 <p>这实际上是要求我们只能选择一边,要么使用 MIT 
的系统版本,要么使用 Symbolics
@@ -118,34 +132,34 @@
 LMI 生存下去。因此,我们不被允许再保持中立。</p>
 
 <p>直到此时,我都没有站在其中任何一个å…
¬å¸çš„一边,虽然我看到社区和软件发生的一切感到非常难受。但是现在,Symbolics强迫我做出选择。所以,为了使Lisp
-Machines公司能够继续<a
-href="#foot-5">(5)</a>&mdash;我开始复制Symbolics对Lisp电脑系统所作的å
…¨éƒ¨æ”¹è¿›ã€‚我把这些改进用自己的想法同æ 
·å®žçŽ°å‡ºæ¥ï¼ˆå°±æ˜¯è¯´ï¼Œä»£ç æ˜¯æˆ‘自己写的)。</p>
+Machines公司能够继续&#8239;<a
+href="#foot-5">[5]</a>&mdash;&mdash;我开始复制Symbolics对Lisp电脑系统所作的å
…¨éƒ¨æ”¹è¿›ã€‚我把这些改进用自己的想法同æ 
·å®žçŽ°å‡ºæ¥ï¼ˆå°±æ˜¯è¯´ï¼Œä»£ç æ˜¯æˆ‘自己写的)。</p>
 
-<p>过了一阵,<a
-href="#foot-6">(6)</a>,我得出结论,不看他们的代ç 
å¯èƒ½æ›´å¥½ã€‚当他们宣布beta版时,通过看发布声明,我知道了有什么功能,然后自己实现它们。当他们发行正式版时,我也实现了这些功能。</p>
+<p>过了一阵,&#8239;<a
+href="#foot-6">[6]</a>,我得出结论,不看他们的代ç 
å¯èƒ½æ›´å¥½ã€‚当他们宣布beta版时,通过看发布声明,我知道了有什么功能,然后自己实现它们。当他们发行正式版时,我也实现了这些功能。</p>
 
 <p>如此这样,有两年的时间,我阻止他们把Lisp
-Machines公司消灭;这两个公司同时存在。但是,我不想这æ 
·å¹´å¤ä¸€å¹´åœ°æƒ©ç½šä¸€ä¸ªäººï¼Œä»…仅只是阻挠
一桩罪恶。我觉得他们已经受到了彻底的惩罚,因为他们陷å…
¥äº†æ— æ³•æ‘†è„±çš„竞争漩涡之中<a
-href="#foot-7">(7)</a>。与此同时,是时候再开始创建一个新的社区来代替那个被他们以及å
…¶ä»–人毁灭的社区了。</p>
+Machines公司消灭;这两个公司同时存在。但是,我不想这æ 
·å¹´å¤ä¸€å¹´åœ°æƒ©ç½šä¸€ä¸ªäººï¼Œä»…仅只是阻挠
一桩罪恶。我觉得他们已经受到了彻底的惩罚,因为他们陷å…
¥äº†æ— æ³•æ‘†è„±çš„竞争漩涡之中&#8239;<a
+href="#foot-7">[7]</a>。与此同时,是时候再开始创建一个新的社区来代替那个被他们以及å
…¶ä»–人毁灭的社区了。</p>
 
 <p>70 年代的 Lisp 社区不限于 MIT 
人工智能实验室,并不是所有的黑客都在 MIT。Symbolics 
发起的战争毁灭了 MIT
 社区,但是同时还有å…
¶ä»–事件在进行。有人放弃了合作,这些也毁灭着社区,社区所剩寥寥了。</p>
 
-<p>一旦我不再惩罚Symbolics,我就不得不考虑下一步做什么。我å¿
…
须做一个自由的操作系统,这很明显&mdash;人们能够一起工作和分享的方法就是有一个自由的操作系统。</p>
+<p>一旦我不再惩罚Symbolics,我就不得不考虑下一步做什么。我å¿
…
须做一个自由的操作系统,这很明显&mdash;&mdash;人们能够一起工作和分享的方法就是有一个自由的操作系统。</p>
 
-<p>一开始,我想要做一个基于Lisp的系统,但是我认识到那在技术上并不一个好主意。要做像Lisp电脑那æ
 ·çš„系统,你需要专用的微代码。这种微代码使你能够和å…
¶ä»–电脑一æ 
·å¿«é€Ÿåœ°æ‰§è¡Œç¨‹åºï¼ŒåŒæ—¶è¿˜èƒ½èŽ·ç›ŠäºŽç±»åž‹æ£€æŸ¥ã€‚没有微代ç 
ï¼Œä½ å°±åªç›¸å½“于å…
¶ä»–机器上的Lisp编译器。程序可以更快,但是并不安å…
¨ã€‚如果你在一个分时系统上运行一个这æ 
·çš„程序还凑合&mdash;一个程序崩溃并不是灾难,用户程序时不时地都可能会崩溃。但是这æ
 
·ç¼–写操作系统就不行,所以我抛弃了做类似Lisp电脑系统的想法。</p>
+<p>一开始,我想要做一个基于Lisp的系统,但是我认识到那在技术上并不一个好主意。要做像Lisp电脑那æ
 ·çš„系统,你需要专用的微代码。这种微代码使你能够和å…
¶ä»–电脑一æ 
·å¿«é€Ÿåœ°æ‰§è¡Œç¨‹åºï¼ŒåŒæ—¶è¿˜èƒ½èŽ·ç›ŠäºŽç±»åž‹æ£€æŸ¥ã€‚没有微代ç 
ï¼Œä½ å°±åªç›¸å½“于å…
¶ä»–机器上的Lisp编译器。程序可以更快,但是并不安å…
¨ã€‚如果你在一个分时系统上运行一个这æ 
·çš„程序还凑合&mdash;&mdash;一个程序崩溃并不是灾难,用户程序时不时地都可能会崩溃。但是这æ
 
·ç¼–写操作系统就不行,所以我抛弃了做类似Lisp电脑系统的想法。</p>
 
 
<p>我决定做一个类似Unix的操作系统,可能会带一个能够运行用户程序的Lisp环境。å†
…核不必
是用Lisp编写的,但是我们应当有Lisp。所以正是这个操作系统、GNU操作系统的开发指引我编写了GNU
 
Emacs。在编写的过程中,我的目的是做一个尽可能最小的Lisp系统。该程序的大小是非常重要的考量。</p>
 
 <p>在1985年,有些人电脑的内存是不带虚拟内存的1å…
†å­—节。他们也想要运行GNU Emacs。这意味着我必
须使该程序尽可能地小。</p>
 
-<p>举个例子,当时的循环结构只有&lsquo;while&rsquo;,它简单到极致。ä½
 æ— æ³•ç›´æŽ¥è·³å‡º&lsquo;while&rsquo;循环,你
只能进行一次异常捕获(catch)和一次异常抛出(throw),或è€
…
判断控制循环的变量。这个例子说明我为了使程序变小,做出了什么æ
 
·çš„努力。我们也没有&lsquo;caar&rsquo;和&lsquo;cadr&rsquo;等等指令;&ldquo;尽可能减少不å¿
…要的东西&rdquo;是GNU
+<p>举个例子,当时的循环结构只有<code>while</code>,它简单到极致。ä½
 æ— æ³•ç›´æŽ¥è·³å‡º<code>while</code>循环,你
只能进行一次异常捕获(catch)和一次异常抛出(throw),或è€
…
判断控制循环的变量。这个例子说明我为了使程序变小,做出了什么æ
 
·çš„努力。我们也没有<code>caar</code>和<code>cadr</code>等等指令;&ldquo;尽可能减少不å¿
…要的东西&rdquo;是GNU
 Emacs的精髓,是Emacs Lisp的精髓,从一开始就是这样。</p>
 
-<p>当然,现在的电脑大了,我们也不再追求那æ 
·çš„极致。我们加å…
¥äº†&lsquo;caar&rsquo;和&lsquo;cadr&rsquo;等指令,而且我们最近也会添åŠ
 
另外的循环结构。现在我们愿意扩展它,但是我们不想把它扩展成common
-Lisp那样。我曾在Lisp电脑上实现过Common 
Lisp,我对之并不是十分满意。其中我非常不喜欢的就是å…
³é”®å­—参数<a
-href="#foot-8">(8)</a>。在我看来,它们不算Lispy;虽然我有时也用å
…³é”®å­—,但是我把我用的次数控制到最小。</p>
+<p>当然,现在的电脑大了,我们也不再追求那æ 
·çš„极致。我们加å…
¥äº†<code>caar</code>和<code>cadr</code>等指令,而且我们最近也会添åŠ
 
另外的循环结构。现在我们愿意扩展它,但是我们不想把它扩展成common
+Lisp那样。我曾在Lisp电脑上实现过Common 
Lisp,我对之并不是十分满意。其中我非常不喜欢的就是å…
³é”®å­—参数&#8239;<a
+href="#foot-8">[8]</a>。在我看来,它们不算Lispy;虽然我有时也用å
…³é”®å­—,但是我把我用的次数控制到最小。</p>
 
 
<p>这并不是GNU工程涉及Lisp的结束。后来在1995年左右,我们计划启动一个图形化桌面项目。我们很æ¸
…
楚该桌面程序的主要编程语言应该能够便利地扩展该桌面程序,就像我们的编辑器一æ
 ·ã€‚问题在于这应该是一个什么语言。</p>
 
@@ -161,7 +175,7 @@
 
Lisp,那么翻译就不是难事。我们的想法是,如果每个扩展应用都支持
 Scheme,那么你可以用 Scheme 实现 TCL 或 Python 或
 Perl,用来把应用翻译成 Scheme。之后,你就可以把它加
载到每个应用,然后就可以用自己最喜爱的语言来定制应用了,å
…¶ä»–定制也类似。</p>
 
-<p>如果扩展语言很弱,用户就不得不使用你
提供的唯一语言。这就意味着,喜欢特定语言的人们将不得不和开发è€
…选择的语言竞争&mdash;他们会说&ldquo;应用开发者
,请把我的语言添加到你的应用中,而不是添加
别人的。&rdquo;这样,用户就æ 
¹æœ¬æ²¡æœ‰é€‰æ‹©çš„余地&mdash;他们只能接受应用带来的语言,并受制于[该语言]。但是如果ä½
 æœ‰ä¸€ä¸ªå¼ºå¤§çš„语言,它能够实现其他语言,那么你
就给了用户自由选择语言的权利,我们就不再有语言选择的战争了。这正是我们所希望的&lsquo;Guile&rsquo;,我们的scheme解释器,能够做到这一切。去年夏天,我们有人完成了从Python到Scheme的翻译器。我不太确定这个是否已经å
…¨éƒ¨å®Œæˆï¼Œä¸è¿‡å¦‚果有人对这个项目感å…
´è¶£ï¼Œè¯·è”系我们。这就是我们未来的计划。</p>
+<p>如果扩展语言很弱,用户就不得不使用你
提供的唯一语言。这就意味着,喜欢特定语言的人们将不得不和开发è€
…选择的语言竞争&mdash;他们会说&ldquo;应用开发者
,请把我的语言添加到你的应用中,而不是添加
别人的。&rdquo;这样,用户就æ 
¹æœ¬æ²¡æœ‰é€‰æ‹©çš„余地&mdash;&mdash;他们只能接受应用带来的语言,并受制于[该语言]。但是如果ä½
 æœ‰ä¸€ä¸ªå¼ºå¤§çš„语言,它能够实现其他语言,那么你
就给了用户自由选择语言的权利,我们就不再有语言选择的战争了。这正是我们所希望的&lsquo;Guile&rsquo;,我们的scheme解释器,能够做到这一切。去年夏天,我们有人完成了从Python到Scheme的翻译器。我不太确定这个是否已经å
…¨éƒ¨å®Œæˆï¼Œä¸è¿‡å¦‚果有人对这个项目感å…
´è¶£ï¼Œè¯·è”系我们。这就是我们未来的计划。</p>
 
 
<p>我一直没有提自由软件,不过现在让我简单说一下它的意义。自由软件指的不是价æ
 ¼ï¼›å®ƒçš„意思不是你可以免费得到的软件。(它可以是你
付费得到的软件,也可以是你å…
è´¹èŽ·å¾—的拷贝。)它的意思是作为用户,你有一些自由。å…
¶ä¸­çš„关键是你有自由运行该软件、你有自由研究å…
¶æ‰€ä½œæ‰€ä¸ºã€ä½ æœ‰è‡ªç”±æŒ‰ç…§è‡ªå·±çš„需求修改该软件、你
有自由向å…
¶ä»–人发布该软件以及发布修改后的软件。这就是自由软件的定义。如果ä½
 ä½¿ç”¨çš„是非自由软件,你就失去了这些å…
³é”®çš„自由,所以请不要使用非自由软件。</p>
 
@@ -170,9 +184,11 @@
 <p>合作互助关乎自由。人们习
惯于认为自由和社会合作是对立的。但是,此时我们在同一条战壕å†
…。使用自由软件,你就有自由和å…
¶ä»–人合作,并且也有自由帮助你自己。使用非自由软件,你
就被控制,人们被分化。你无权和其他人分享,你
没有自由去合作互助或帮助社会,正如你没有自由来帮助你
自己。使用非自由软件的用户就是这样孤立和无助。</p>
 
 
<p>我们已经开发了范围庞大的自由软件。我们完成了人们曾经说永远完不成的事;我们有两个自由软件操作系统。我们有很多应用,但我们显然还有更多的要做。所以,我们需要ä½
 ä»¬çš„帮助。我请求你们成为GNU工程的志愿者
;帮助我们开发能执行更多任务的自由软件。请参看<a
-href="/help/">http://www.gnu.org/help</a>来了解怎么帮助我们。如果ä½
 æƒ³è®¢è´­ä¸€äº›ä¸œè¥¿ï¼Œæˆ‘们的主页上有一个链接。如果你
想了解我们的哲学,请阅读/philosophy。如果你
在找可用的自由软件,请到/directory,现在大约有1900个软件包
(这只是所有自由软件的一部分)。请编写更多的自由软件并贡献给我们。我的文集,&ldquo;自由软件和自由社会&rdquo;,正在发售,ä½
 å¯ä»¥åœ¨<a
-href="http://www.gnu.org/";>www.gnu.org</a>购买。祝你们开发愉快!</p>
+href="/help/help.html">gnu.org/help</a>来了解怎么帮助我们。如果你
想订购一些东西,我们的主页上有一个链接。如果你
想了解我们的哲学,请阅读/philosophy。如果你
在找可用的自由软件,请到/directory,现在大约有1900个软件包
(这只是所有自由软件的一部分)。请编写更多的自由软件并贡献给我们。我的文集,&ldquo;自由软件和自由社会&rdquo;,正在发售,ä½
 å¯ä»¥åœ¨www.gnu.org&#8239;<a
+href="#foot-9">[9]</a>购买。祝你们开发愉快!</p>
+<div class="column-limit"></div>
 
+<h3 class="footnote">脚注</h3>
 <ol>
 <li id="foot-1">Guy
 Steele设计了Emacs最初的对称命令集合;然后我们开始构造
Emacs(在TECO的基础上),但是在一段长期的联合开发之后,Steele渐渐离开了,所以我独自完成了Emacs。å
…¶ä»–人,特别是Eugene
@@ -183,7 +199,7 @@
 
 <li 
id="foot-3">Greenblatt的计划,就我的理解,是请实验室的人员å…
¼èŒï¼Œè¿™æ 
·ä»–们还能够继续在人工智能实验室的本职工作。Symbolics采取的是å
…¨èŒé›‡ä½£ï¼Œæ‰€ä»¥å®žéªŒå®¤çš„人员就不能在MIT工作了。</li>
 
-<li 
id="foot-4">该计划的背景,我在演讲里没有明说,是在开始阶段,人工智能实验室的黑客们,不管是在Symbolics,还是在LMI,都继续把他们的改进贡献给MIT的Lisp电脑系统&mdash;尽管合同并没有要求这æ
 ·åšã€‚Symbolics的计划却是单方面割裂合作。</li>
+<li 
id="foot-4">该计划的背景,我在演讲里没有明说,是在开始阶段,人工智能实验室的黑客们,不管是在Symbolics,还是在LMI,都继续把他们的改进贡献给MIT的Lisp电脑系统&mdash;&mdash;尽管合同并没有要求这æ
 ·åšã€‚Symbolics的计划却是单方面割裂合作。</li>
 
 <li id="foot-5">这并不是说我特别å…
³æ³¨LMI的命运,我只是不想让Symbolics通过攻击人工智能实验室获益。</li>
 
@@ -194,7 +210,12 @@
 <li id="foot-7">Symbolics曾经向MIT抗议:我的工作阻挠
了他们的计划而使Symbolics损失一百万美元。</li>
 
 <li id="foot-8">我并不介意非常复杂和重量级的函数使用å…
³é”®å­—参数。我讨厌的是连诸如&ldquo;member&rdquo;这æ 
·çš„简单函数也要使用关键字参数。</li>
+
+<li id="foot-9">2021 年,本书可以在 <a
+href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition";>GNU
+出版社</a> 购买。</li>
 </ol>
+</div>
 
 <div class="translators-notes">
 
@@ -207,7 +228,7 @@
 
 <!-- for id="content", starts in the include above -->
 <!--#include virtual="/server/footer.zh-cn.html" -->
-<div id="footer">
+<div id="footer" role="contentinfo">
 <div class="unprintable">
 
 <p>请将有å…
³è‡ªç”±è½¯ä»¶åŸºé‡‘会(FSF)&amp;GNU的一般性问题发送到<a
@@ -226,11 +247,13 @@
 
         &lt;web-translators@gnu.org&gt;</a>.</p>
 
-        <p>For information on coordinating and submitting translations of
+        <p>For information on coordinating and contributing translations of
         our web pages, see <a
         href="/server/standards/README.translations.html">Translations
         README</a>. -->
-若您想翻译本文,请参看<a 
href="/server/standards/README.translations.html">翻译须知</a>。</p>
+我们尽最大努力来提供精准和高质量的翻译,但难å…
ä¼šå­˜åœ¨é”™è¯¯å’Œä¸è¶³ã€‚如果您在这方面有评论或一般性的建议,请发送至
 <a
+href="mailto:web-translators@gnu.org";>&lt;web-translators@gnu.org&gt;</a>。</p><p>å
…³äºŽè¿›è¡Œåè°ƒä¸Žæäº¤ç¿»è¯‘的更多信息参见
+<a href="/server/standards/README.translations.html">《译者
指南》</a>。</p>
 </div>
 
 <!-- Regarding copyright, in general, standalone pages (as opposed to
@@ -249,7 +272,7 @@
      
      There is more detail about copyright years in the GNU Maintainers
      Information document, www.gnu.org/prep/maintain. -->
-<p>Copyright &copy; 2003, 2007, 2013, 2014, 2020 Free Software Foundation, 
Inc.</p>
+<p>Copyright &copy; 2003, 2007, 2013, 2021 Free Software Foundation, Inc.</p>
 
 <p>本页面使用 <a rel="license"
 href="http://creativecommons.org/licenses/by-nd/4.0/";>Creative Commons
@@ -262,16 +285,17 @@
 <b>审校</b>:<a href="mailto:hagb_green@qq.com";>&lt;Hagb
 (郭俊余)&gt;</a>,2018。<br></br>
 <b>翻译团队</b>:<a rel="team"
-href="https://savannah.gnu.org/projects/www-zh-cn/";>&lt;CTT&gt;</a>,2018,2020。</div>
+href="https://savannah.gnu.org/projects/www-zh-cn/";>&lt;CTT&gt;</a>,2018,2020,2021。</div>
 
 <p class="unprintable"><!-- timestamp start -->
 最后更新:
 
-$Date: 2020/10/02 08:29:05 $
+$Date: 2021/11/04 03:30:15 $
 
 <!-- timestamp end -->
 </p>
 </div>
 </div>
+<!-- for class="inner", starts in the banner include -->
 </body>
 </html>

Index: po/rms-lisp.zh-cn-en.html
===================================================================
RCS file: /web/www/www/gnu/po/rms-lisp.zh-cn-en.html,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- po/rms-lisp.zh-cn-en.html   2 Oct 2020 08:29:05 -0000       1.4
+++ po/rms-lisp.zh-cn-en.html   4 Nov 2021 03:30:16 -0000       1.5
@@ -1,13 +1,26 @@
 <!--#include virtual="/server/header.html" -->
-<!-- Parent-Version: 1.77 -->
+<!-- Parent-Version: 1.96 -->
+<!-- This page is derived from /server/standards/boilerplate.html -->
+<!--#set var="TAGS" value="gnu-history" -->
+<!--#set var="DISABLE_TOP_ADDENDUM" value="yes" -->
 <title>My Lisp Experiences and the Development of GNU Emacs
 - GNU Project - Free Software Foundation</title>
+<style type="text/css" media="print,screen"><!--
+a[href*='#foot-'] { font-size: .94em; }
+--></style>
 <!--#include virtual="/gnu/po/rms-lisp.translist" -->
 <!--#include virtual="/server/banner.html" -->
+<!--#include virtual="/gnu/gnu-breadcrumb.html" -->
+<!--GNUN: OUT-OF-DATE NOTICE-->
+<!--#include virtual="/server/top-addendum.html" -->
+<div class="article reduced-width">
 <h2>My Lisp Experiences and the Development of GNU Emacs</h2>
 
-<blockquote><p>(Transcript of Richard Stallman's Speech, 28 Oct 2002, at the
-International Lisp Conference).</p></blockquote>
+<div class="infobox">
+<p>Transcript of Richard Stallman's speech at the
+International Lisp Conference, 28 Oct 2002.</p>
+</div>
+<hr class="thin" />
 
 <p>Since none of my usual speeches have anything to do with Lisp, none
 of them were appropriate for today. So I'm going to have to wing it.
@@ -19,8 +32,8 @@
 could be a computer language like that. The first time I had a chance
 to do anything with Lisp was when I was a freshman at Harvard and I
 wrote a Lisp interpreter for the <abbr title="Programmed Data
-Processor">PDP</abbr>-11. It was a very small machine
-&mdash; it had something like 8k of memory &mdash; and I managed to write the
+Processor">PDP</abbr>-11. It was a very small machine&mdash;it
+had something like 8k of memory&mdash;and I managed to write the
 interpreter in a thousand instructions. This gave me some room for a
 little bit of data. That was before I got to see what real software
 was like, that did real system jobs.</p>
@@ -29,7 +42,7 @@
 once I started working at <abbr title="Massachusetts Institute of
 Technology">MIT</abbr>. I got hired at the Artificial Intelligence Lab
 not by JonL, but by Russ Noftsker, which was most ironic considering
-what was to come &mdash; he must have really regretted that day.</p>
+what was to come&mdash;he must have really regretted that day.</p>
 
 <p>During the 1970s, before my life became politicized by horrible
 events, I was just going along making one extension after another for
@@ -57,25 +70,25 @@
 what it was.</p>
 
 <p>The original Emacs did not have Lisp in it. The lower level
-language, the non-interpreted language &mdash; was PDP-10
+language, the non-interpreted language&mdash;was PDP-10
 Assembler. The interpreter we wrote in that actually wasn't written
 for Emacs, it was written for <abbr title="Text Editor and
 COrrector">TECO</abbr>. It was our text editor, and was an
 extremely ugly programming language, as ugly as could possibly be. The
 reason was that it wasn't designed to be a programming language, it
 was designed to be an editor and command language. There were commands
-like &lsquo;5l&rsquo;, meaning &lsquo;move five lines&rsquo;, or
-&lsquo;i&rsquo; and then a string and then an ESC to insert that
+like <code>5l</code>, meaning <code>move five lines</code>, or
+<code>i</code> and then a string and then an ESC to insert that
 string. You would type a string that was a series of commands, which
 was called a command string. You would end it with ESC ESC, and it
 would get executed.</p>
 
 <p>Well, people wanted to extend this language with programming
 facilities, so they added some. For instance, one of the first was a
-looping construct, which was &lt; &gt;. You would put those around
+looping construct, which was <code>&lt;&nbsp;&gt;</code>. You would put those 
around
 things and it would loop. There were other cryptic commands that could
-be used to conditionally exit the loop.  To make Emacs, we
-<a href="#foot-1">(1)</a> added facilities to have subroutines with
+be used to conditionally exit the loop.  To make Emacs, we&#8239;<a
+href="#foot-1">[1]</a> added facilities to have subroutines with
 names. Before that, it was sort of like Basic, and the subroutines
 could only have single letters as their names. That was hard to
 program big programs with, so we added code so they could have longer
@@ -84,7 +97,7 @@
 from TECO.</p>
 
 <p>We started putting in rather sophisticated facilities, all with the
-ugliest syntax you could ever think of, and it worked &mdash; people were
+ugliest syntax you could ever think of, and it worked&mdash;people were
 able to write large programs in it anyway. The obvious lesson was that
 a language like TECO, which wasn't designed to be a
 programming language, was the wrong way to go. The language that you
@@ -94,10 +107,10 @@
 for that purpose was Lisp.</p>
 
 <p>It was Bernie Greenberg, who discovered that it
-was <a href="#foot-2">(2)</a>.  He wrote a version of Emacs in Multics
+was&#8239;<a href="#foot-2">[2]</a>.  He wrote a version of Emacs in Multics
 MacLisp, and he wrote his commands in MacLisp in a straightforward
 fashion. The editor itself was written entirely in Lisp. Multics Emacs
-proved to be a great success &mdash; programming new editing commands
+proved to be a great success&mdash;programming new editing commands
 was so convenient that even the secretaries in his office started
 learning how to use it. They used a manual someone had written which
 showed how to extend Emacs, but didn't say it was a programming. So
@@ -105,22 +118,22 @@
 scared off. They read the manual, discovered they could do useful
 things and they learned to program.</p>
 
-<p>So Bernie saw that an application &mdash; a program that does something
-useful for you &mdash; which has Lisp inside it and which you could extend
+<p>So Bernie saw that an application&mdash;a program that does something
+useful for you&mdash;which has Lisp inside it and which you could extend
 by rewriting the Lisp programs, is actually a very good way for people
 to learn programming. It gives them a chance to write small programs
 that are useful for them, which in most arenas you can't possibly
-do. They can get encouragement for their own practical use &mdash; at the
-stage where it's the hardest &mdash; where they don't believe they can
+do. They can get encouragement for their own practical use&mdash;at the
+stage where it's the hardest&mdash;where they don't believe they can
 program, until they get to the point where they are programmers.</p>
 
 <p>At that point, people began to wonder how they could get something
 like this on a platform where they didn't have full service Lisp
 implementation. Multics MacLisp had a compiler as well as an
-interpreter &mdash; it was a full-fledged Lisp system &mdash; but people wanted
+interpreter&mdash;it was a full-fledged Lisp system&mdash;but people wanted
 to implement something like that on other systems where they had not
 already written a Lisp compiler. Well, if you didn't have the Lisp
-compiler you couldn't write the whole editor in Lisp &mdash; it would be
+compiler you couldn't write the whole editor in Lisp&mdash;it would be
 too slow, especially redisplay, if it had to run interpreted Lisp.  So
 we developed a hybrid technique. The idea was to write a Lisp
 interpreter and the lower level parts of the editor together, so that
@@ -145,7 +158,7 @@
 machine language anymore, it was C. C was a good, efficient language
 for portable programs to run in a Unix-like operating system. There
 was a Lisp interpreter, but I implemented facilities for special
-purpose editing jobs directly in C &mdash; manipulating editor buffers,
+purpose editing jobs directly in C&mdash;manipulating editor buffers,
 inserting leading text, reading and writing files, redisplaying the
 buffer on the screen, managing editor windows.</p>
 
@@ -154,7 +167,7 @@
 GosMacs. A strange thing happened with him. In the beginning, he
 seemed to be influenced by the same spirit of sharing and cooperation
 of the original Emacs. I first released the original Emacs to people
-at MIT. Someone wanted to port it to run on Twenex &mdash; it
+at MIT. Someone wanted to port it to run on Twenex&mdash;it
 originally only ran on the Incompatible Timesharing System we used
 at MIT. They ported it to Twenex, which meant that there
 were a few hundred installations around the world that could
@@ -166,7 +179,7 @@
 <p>Gosling did, at first, seem to participate in this spirit. He wrote
 in a manual that he called the program Emacs hoping that others in the
 community would improve it until it was worthy of that name. That's
-the right approach to take towards a community &mdash; to ask them to join
+the right approach to take towards a community&mdash;to ask them to join
 in and make the program better. But after that he seemed to change the
 spirit, and sold it to a company.</p>
 
@@ -178,7 +191,7 @@
 to distribute his own version. He proposed to me that I use that
 version. Then I discovered that Gosling's Emacs did not have a real
 Lisp. It had a programming language that was known as
-&lsquo;mocklisp&rsquo;, which looks syntactically like Lisp, but didn't
+&ldquo;mocklisp,&rdquo; which looks syntactically like Lisp, but didn't
 have the data structures of Lisp.  So programs were not data, and vital
 elements of Lisp were missing.  Its data structures were strings,
 numbers and a few other specialized things.</p>
@@ -195,17 +208,17 @@
 redisplay and things would go on with very special data structures
 that were not safe for garbage collection, not safe for interruption,
 and you couldn't run any Lisp programs during that. We've changed that
-since &mdash; it's now possible to run Lisp code during redisplay. It's
+since&mdash;it's now possible to run Lisp code during redisplay. It's
 quite a convenient thing.</p>
 
-<p>This second Emacs program was &lsquo;free software&rsquo; in the
-modern sense of the term &mdash; it was part of an explicit political
+<p>This second Emacs program was &ldquo;free software&rdquo; in the
+modern sense of the term&mdash;it was part of an explicit political
 campaign to make software free. The essence of this campaign was that
 everybody should be free to do the things we did in the old days
 at MIT, working together on software and working with
 whomever wanted to work with us.  That is the basis for the free
-software movement &mdash; the experience I had, the life that I've lived at
-the MIT AI lab &mdash; to be working on human knowledge, and
+software movement&mdash;the experience I had, the life that I've lived at
+the MIT AI lab&mdash;to be working on human knowledge, and
 not be standing in the way of anybody's further using and further
 disseminating human knowledge.</p>
 
@@ -219,8 +232,8 @@
 crashed at some point.</p>
 
 <p>The Lisp machine was able to execute instructions about as fast as
-those other machines, but each instruction &mdash; a <code>car</code> 
instruction would
-do data typechecking &mdash; so when you tried to get the <code>car</code> of 
a number
+those other machines, but each instruction&mdash;a <code>car</code> 
instruction would
+do data typechecking&mdash;so when you tried to get the <code>car</code> of a 
number
 in a compiled program, it would give you an immediate error. We built
 the machine and had a Lisp operating system for it. It was written
 almost entirely in Lisp, the only exceptions being parts written in
@@ -231,7 +244,7 @@
 like.  Greenblatt wanted to start what he called a
 &ldquo;hacker&rdquo; company. This meant it would be a company run by
 hackers and would operate in a way conducive to hackers. Another goal
-was to maintain the AI Lab culture <a href="#foot-3">(3)</a>.
+was to maintain the AI Lab culture&#8239;<a class="ftn" href="#foot-3">[3]</a>.
 Unfortunately, Greenblatt didn't have any business experience, so
 other people in the Lisp machine group said they doubted whether he
 could succeed. They thought that his plan to avoid outside investment
@@ -284,7 +297,7 @@
 systems that both companies had licensed. Nobody had envisioned that
 the AI lab's hacker group would be wiped out, but it was.</p>
 
-<p> So Symbolics came up with a plan <a href="#foot-4">(4)</a>.  They
+<p> So Symbolics came up with a plan&#8239;<a href="#foot-4">[4]</a>.  They
 said to the lab, &ldquo;We will continue making our changes to the
 system available for you to use, but you can't put it into
 the MIT Lisp machine system. Instead, we'll give you
@@ -305,12 +318,12 @@
 although it made me miserable to see what had happened to our
 community and the software.  But now, Symbolics had forced the issue.
 So, in an effort to help keep Lisp Machines
-Inc. going <a href="#foot-5">(5)</a> &mdash; I began duplicating all
+Inc. going&#8239;<a href="#foot-5">[5]</a>&mdash;I began duplicating all
 of the improvements Symbolics had made to the Lisp machine system.  I
 wrote the equivalent improvements again myself (i.e., the code was my
 own).</p>
 
-<p>After a while <a href="#foot-6">(6)</a>, I came to the conclusion
+<p>After a while&#8239;<a href="#foot-6">[6]</a>, I came to the conclusion
 that it would be best if I didn't even look at their code. When they
 made a beta announcement that gave the release notes, I would see what
 the features were and then implement them. By the time they had a real
@@ -321,7 +334,7 @@
 want to spend years and years punishing someone, just thwarting an
 evil deed. I figured they had been punished pretty thoroughly because
 they were stuck with competition that was not leaving or going to
-disappear <a href="#foot-7">(7)</a>. Meanwhile, it was time to start
+disappear&#8239;<a href="#foot-7">[7]</a>.  Meanwhile, it was time to start
 building a new community to replace the one that their actions and
 others had wiped out.</p>
 
@@ -333,7 +346,7 @@
 community and there wasn't much left.</p>
 
 <p>Once I stopped punishing Symbolics, I had to figure out what to do
-next. I had to make a free operating system, that was clear &mdash; the
+next. I had to make a free operating system, that was clear&mdash;the
 only way that people could work together and share was with a free
 operating system.</p>
 
@@ -344,7 +357,7 @@
 their programs and still get the benefit of typechecking. Without
 that, you would be reduced to something like the Lisp compilers for
 other machines. The programs would be faster, but unstable. Now that's
-okay if you're running one program on a timesharing system &mdash; if one
+okay if you're running one program on a timesharing system&mdash;if one
 program crashes, that's not a disaster, that's something your program
 occasionally does. But that didn't make it good for writing the
 operating system in, so I rejected the idea of making a system like
@@ -363,21 +376,21 @@
 Emacs. This meant I had to keep the program as small as possible.</p>
 
 <p>For instance, at the time the only looping construct was
-&lsquo;while&rsquo;, which was extremely simple. There was no way to
-break out of the &lsquo;while&rsquo; statement, you just had to do a
+<code>while</code>, which was extremely simple. There was no way to
+break out of the <code>while</code> statement, you just had to do a
 catch and a throw, or test a variable that ran the loop. That shows
 how far I was pushing to keep things small. We didn't have
-&lsquo;caar&rsquo; and &lsquo;cadr&rsquo; and so on; &ldquo;squeeze
+<code>caar</code> and <code>cadr</code> and so on; &ldquo;squeeze
 out everything possible&rdquo; was the spirit of GNU Emacs, the spirit
 of Emacs Lisp, from the beginning.</p>
 
 <p>Obviously, machines are bigger now, and we don't do it that way
-any more. We put in &lsquo;caar&rsquo; and &lsquo;cadr&rsquo; and so
+any more. We put in <code>caar</code> and <code>cadr</code> and so
 on, and we might put in another looping construct one of these
 days. We're willing to extend it some now, but we don't want to extend
 it to the level of common Lisp. I implemented Common Lisp once on the
 Lisp machine, and I'm not all that happy with it. One thing I don't
-like terribly much is keyword arguments <a href="#foot-8">(8)</a>.
+like terribly much is keyword arguments&#8239;<a href="#foot-8">[8]</a>.
 They don't seem quite Lispy
 to me; I'll do it sometimes but I minimize the times when I do
 that.</p>
@@ -420,14 +433,14 @@
 <p>As long as the extensibility languages are weak, the users have to
 use only the language you provided them. Which means that people who
 love any given language have to compete for the choice of the
-developers of applications &mdash; saying &ldquo;Please, application
+developers of applications&mdash;saying &ldquo;Please, application
 developer, put my language into your application, not his
-language.&rdquo; Then the users get no choices at all &mdash; whichever
+language.&rdquo; Then the users get no choices at all&mdash;whichever
 application they're using comes with one language and they're stuck
 with [that language]. But when you have a powerful language that can
 implement others by translating into it, then you give the user a
 choice of language and we don't have to have a language war
-anymore. That's what we're hoping &lsquo;Guile&rsquo;, our scheme
+anymore. That's what we're hoping Guile, our scheme
 interpreter, will do. We had a person working last summer finishing up
 a translator from Python to Scheme. I don't know if it's entirely
 finished yet, but for anyone interested in this project, please get in
@@ -441,13 +454,13 @@
 program, free to study what it does, free to change it to suit your
 needs, free to redistribute the copies of others and free to publish
 improved, extended versions. This is what free software means. If you
-are using a non-free program, you have lost crucial freedom, so don't
+are using a nonfree program, you have lost crucial freedom, so don't
 ever do that.</p>
 
 <p>The purpose of the GNU project is to make it easier for people to
-reject freedom-trampling, user-dominating, non-free software by
+reject freedom-trampling, user-dominating, nonfree software by
 providing free software to replace it. For those who don't have the
-moral courage to reject the non-free software, when that means some
+moral courage to reject the nonfree software, when that means some
 practical inconvenience, what we try to do is give a free alternative
 so that you can move to freedom with less of a mess and less of a
 sacrifice in practical terms. The less sacrifice the better. We want
@@ -457,27 +470,29 @@
 thinking of freedom and cooperation with society as if they are
 opposites. But here they're on the same side. With free software you
 are free to cooperate with other people as well as free to help
-yourself. With non-free software, somebody is dominating you and
+yourself. With nonfree software, somebody is dominating you and
 keeping people divided. You're not allowed to share with them, you're
 not free to cooperate or help society, anymore than you're free to
 help yourself.  Divided and helpless is the state of users using
-non-free software.</p>
+nonfree software.</p>
 
 <p>We've produced a tremendous range of free software. We've done what
 people said we could never do; we have two operating systems of free
 software. We have many applications and we obviously have a lot
 farther to go. So we need your help. I would like to ask you to
 volunteer for the GNU project; help us develop free software for more
-jobs. Take a look at <a href="/help/">http://www.gnu.org/help</a> to
+jobs. Take a look at <a href="/help/help.html">gnu.org/help</a> to
 find suggestions for how to help. If you want to order things, there's
 a link to that from the home page. If you want to read about
 philosophical issues, look in /philosophy. If you're looking for free
 software to use, look in /directory, which lists about 1900 packages
 now (which is a fraction of all the free software out there). Please
 write more and contribute to us. My book of essays, &ldquo;Free
-Software and Free Society&rdquo;, is on sale and can be purchased at
-<a href="http://www.gnu.org/";>www.gnu.org</a>. Happy hacking!</p>
+Software and Free Society,&rdquo; is on sale and can be purchased at
+www.gnu.org&#8239;<a href="#foot-9">[9]</a>.  Happy hacking!</p>
+<div class="column-limit"></div>
 
+<h3 class="footnote">Footnotes</h3>
 <ol>
 <li id="foot-1">Guy Steele designed the original symmetrical Emacs
 command set; then he and I began implementing Emacs (on top of TECO),
@@ -498,7 +513,7 @@
 <li id="foot-4">The background of this plan, which I did not state
 explicitly in the talk, is that during an initial period the ex-AI-Lab
 hackers, whether at Symbolics or LMI, continued contributing their
-changes to the MIT Lisp Machine system &mdash; even though the
+changes to the MIT Lisp Machine system&mdash;even though the
 contract did not require this.  Symbolics' plan was to rupture this
 cooperation unilaterally.</li>
 
@@ -524,11 +539,16 @@
 <li id="foot-8">I don't mind if a very complex and heavyweight
 function takes keyword arguments.  What bothers me is making simple
 basic functions such as &ldquo;member&rdquo; use them.</li>
+
+<li id="foot-9">In 2021, this book can be purchased from <a
+href="https://shop.fsf.org/books-docs/free-software-free-society-selected-essays-richard-m-stallman-3rd-edition";>
+GNU Press</a>.</li>
 </ol>
+</div>
 
 </div><!-- for id="content", starts in the include above -->
 <!--#include virtual="/server/footer.html" -->
-<div id="footer">
+<div id="footer" role="contentinfo">
 <div class="unprintable">
 
 <p>Please send general FSF &amp; GNU inquiries to
@@ -546,13 +566,13 @@
         to <a href="mailto:web-translators@gnu.org";>
         &lt;web-translators@gnu.org&gt;</a>.</p>
 
-        <p>For information on coordinating and submitting translations of
+        <p>For information on coordinating and contributing translations of
         our web pages, see <a
         href="/server/standards/README.translations.html">Translations
         README</a>. -->
 Please see the <a
 href="/server/standards/README.translations.html">Translations
-README</a> for information on coordinating and submitting translations
+README</a> for information on coordinating and contributing translations
 of this article.</p>
 </div>
 
@@ -573,7 +593,7 @@
      There is more detail about copyright years in the GNU Maintainers
      Information document, www.gnu.org/prep/maintain. -->
 
-<p>Copyright &copy; 2003, 2007, 2013, 2014, 2020 Free Software Foundation, 
Inc.</p>
+<p>Copyright &copy; 2003, 2007, 2013, 2021 Free Software Foundation, Inc.</p>
 
 <p>This page is licensed under a <a rel="license"
 href="http://creativecommons.org/licenses/by-nd/4.0/";>Creative
@@ -583,10 +603,10 @@
 
 <p class="unprintable">Updated:
 <!-- timestamp start -->
-$Date: 2020/10/02 08:29:05 $
+$Date: 2021/11/04 03:30:16 $
 <!-- timestamp end -->
 </p>
 </div>
-</div>
+</div><!-- for class="inner", starts in the banner include -->
 </body>
 </html>

Index: po/rms-lisp.zh-cn.po
===================================================================
RCS file: /web/www/www/gnu/po/rms-lisp.zh-cn.po,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- po/rms-lisp.zh-cn.po        4 Nov 2021 03:03:48 -0000       1.17
+++ po/rms-lisp.zh-cn.po        4 Nov 2021 03:30:16 -0000       1.18
@@ -14,7 +14,6 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Outdated-Since: 2021-11-02 14:27+0000\n"
 
 #. type: Content of: <title>
 msgid ""
@@ -145,13 +144,12 @@
 "they added some. For instance, one of the first was a looping construct, "
 "which was <code>&lt;&nbsp;&gt;</code>. You would put those around things and "
 "it would loop. There were other cryptic commands that could be used to "
-"conditionally exit the loop.  To make Emacs, we&#8239;<a href="
-"\"#foot-1\">[1]</a> added facilities to have subroutines with names. Before "
-"that, it was sort of like Basic, and the subroutines could only have single "
-"letters as their names. That was hard to program big programs with, so we "
-"added code so they could have longer names. Actually, there were some rather "
-"sophisticated facilities; I think that Lisp got its unwind-protect facility "
-"from TECO."
+"conditionally exit the loop.  To make Emacs, we&#8239;<a href=\"#foot-1\">[1]"
+"</a> added facilities to have subroutines with names. Before that, it was "
+"sort of like Basic, and the subroutines could only have single letters as "
+"their names. That was hard to program big programs with, so we added code so "
+"they could have longer names. Actually, there were some rather sophisticated "
+"facilities; I think that Lisp got its unwind-protect facility from TECO."
 msgstr ""
 
"不过,人们想要扩展该语言使之带上编程能力,所以人们就添åŠ
 äº†ä¸€äº›åŠŸèƒ½ã€‚例如,最"
 "早添加的就有循环结构,就是<code>&lt;&nbsp;&gt;</code>。你
把东西放在这两个符号"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]