www-commits
[Top][All Lists]
Advanced

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

www/gnu po/rms-lisp.translist po/rms-lisp.zh-cn...


From: GNUN
Subject: www/gnu po/rms-lisp.translist po/rms-lisp.zh-cn...
Date: Mon, 30 Jul 2018 03:32:30 -0400 (EDT)

CVSROOT:        /web/www
Module name:    www
Changes by:     GNUN <gnun>     18/07/30 03:32:29

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

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&rev=1.1
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/po/rms-lisp.translist?cvsroot=www&r1=1.15&r2=1.16
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/po/rms-lisp.zh-cn.po?cvsroot=www&r1=1.1&r2=1.2
http://web.cvs.savannah.gnu.org/viewcvs/www/gnu/po/rms-lisp.zh-cn-en.html?cvsroot=www&rev=1.1

Patches:
Index: po/rms-lisp.translist
===================================================================
RCS file: /web/www/www/gnu/po/rms-lisp.translist,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- po/rms-lisp.translist       4 Aug 2016 13:59:12 -0000       1.15
+++ po/rms-lisp.translist       30 Jul 2018 07:32:29 -0000      1.16
@@ -9,6 +9,7 @@
 <span dir="ltr"><a lang="ru" hreflang="ru" 
href="/gnu/rms-lisp.ru.html">русский</a>&nbsp;[ru]</span> &nbsp;
 <span dir="ltr"><a lang="sq" hreflang="sq" 
href="/gnu/rms-lisp.sq.html">Shqip</a>&nbsp;[sq]</span> &nbsp;
 <span dir="ltr"><a lang="uk" hreflang="uk" 
href="/gnu/rms-lisp.uk.html">українська</a>&nbsp;[uk]</span> &nbsp;
+<span dir="ltr"><a lang="zh-cn" hreflang="zh-cn" 
href="/gnu/rms-lisp.zh-cn.html">简体中文</a>&nbsp;[zh-cn]</span> &nbsp;
 </p>
 </div>' -->
 <link rel="alternate" type="text/html" href="/gnu/rms-lisp.html" 
hreflang="x-default" />
@@ -19,4 +20,5 @@
 <link rel="alternate" type="text/html" lang="ru" hreflang="ru" 
href="/gnu/rms-lisp.ru.html" title="русский" />
 <link rel="alternate" type="text/html" lang="sq" hreflang="sq" 
href="/gnu/rms-lisp.sq.html" title="Shqip" />
 <link rel="alternate" type="text/html" lang="uk" hreflang="uk" 
href="/gnu/rms-lisp.uk.html" title="українська" />
+<link rel="alternate" type="text/html" lang="zh-cn" hreflang="zh-cn" 
href="/gnu/rms-lisp.zh-cn.html" title="简体中文" />
 <!-- end translist file -->

Index: po/rms-lisp.zh-cn.po
===================================================================
RCS file: /web/www/www/gnu/po/rms-lisp.zh-cn.po,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- po/rms-lisp.zh-cn.po        30 Jul 2018 07:14:51 -0000      1.1
+++ po/rms-lisp.zh-cn.po        30 Jul 2018 07:32:29 -0000      1.2
@@ -571,15 +571,15 @@
 "Incorporated, and the two companies went on. But, I didn't 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 building a new "
-"community to replace the one that their actions and others had wiped out."
+"competition that was not leaving or going to disappear <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."
 msgstr ""
 "如此这样,有两年的时间,我阻止他们把Lisp Machineså…
¬å¸æ¶ˆç­ï¼›è¿™ä¸¤ä¸ªå…¬å¸åŒæ—¶å­˜"
 "在。但是,我不想这样年复一年地惩罚一个人,仅仅
只是阻挠一桩罪恶。我觉得他们已"
-"经受到了彻底的惩罚,因为他们陷入了无
法摆脱的竞争漩涡之中<a href="
-"\"#foot-7\">(7)</a>。与此同时,是时候再开始创建一个新的社区来代替那个被他们以"
-"及其他人毁灭的社区了。"
+"经受到了彻底的惩罚,因为他们陷入了无
法摆脱的竞争漩涡之中<a href=\"#foot-7\">"
+"(7)</a>。与此同时,是时候再开始创建一个新的社区来代替那个被他们以及å
…¶ä»–人毁灭"
+"的社区了。"
 
 #. type: Content of: <p>
 msgid ""

Index: rms-lisp.zh-cn.html
===================================================================
RCS file: rms-lisp.zh-cn.html
diff -N rms-lisp.zh-cn.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ rms-lisp.zh-cn.html 30 Jul 2018 07:32:28 -0000      1.1
@@ -0,0 +1,241 @@
+<!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->
+
+<!--#include virtual="/server/header.zh-cn.html" -->
+<!-- Parent-Version: 1.77 -->
+
+<!-- This file is automatically generated by GNUnited Nations! -->
+<title>我的Lisp经验和GNU Emacs的开发 - GNU工程 - 
自由软件基金会</title>
+
+<!--#include virtual="/gnu/po/rms-lisp.translist" -->
+<!--#include virtual="/server/banner.zh-cn.html" -->
+<h2>我的Lisp经验和GNU Emacs的开发</h2>
+
+<blockquote><p>(Richard Stallman在国际
Lisp大会上的谈话记录,2002年10月28日)</p></blockquote>
+
+<p>由于我通常的演讲都和Lisp无å…
³ï¼Œæˆ‘今天讲它们不合适。所以我将不得不即å…
´å‘挥。我的职业生涯做了太多Lisp相关的工作,因
此我还是可以讲一些有趣的事情的。</p>
+
+<p>我最早关于Lisp的经历是在高中时读了Lisp
+1.5的手册。其中的思想让我脑洞大开:怎么还有这æ 
·çš„计算机语言!我第一次有机会做Lisp相å…
³çš„工作是在当哈佛新生的时候,我为<abbr
+title="Programmed Data
+Processor">PDP</abbr>-11处理器编写了一个Lisp解释器。那是一个非常小的机器&mdash;大概只有8k的å†
…å­˜&mdash;我设法用1000条以内的指令编写了那个解释器。这æ 
·æˆ‘还有一点数据空间。这是在我看到真正做系统工作的软件之前。</p>
+
+<p>当我在<abbr title="Massachusetts Institute of
+Technology,麻省理工学院">MIT</abbr>开始工作时,我和JonL
+White一起真正开始实现Lisp语言。我不是被JonL,而是被Russ
+Noftsker招到人工智能实验室的,这一点最讽刺,想想接下来发生的事&mdash;他一定真的后悔有那一天了。</p>
+
+<p>在1970年代,我的生活还没有被惊人的事件政治化之前,我只是不断地一个接一个地为各种程序添åŠ
 æ‰©å±•ï¼Œå…¶ä¸­å¤šæ•°å’ŒLisp无关。不过,å…
¶é—´ï¼Œæˆ‘写了一个文本编辑器,叫Emacs。Emacs的有趣之处在于它有一个编程语言,用户的编辑命令可以用这个解释性语言编写,这æ
 ·ä½ å°±å¯ä»¥åœ¨ç¼–辑时加载新的编辑命令。你可以修改你
正在用的编辑程序并且继续编辑。这æ 
·ï¼Œæˆ‘们就有了一个除了编程还可做å…
¶ä»–有用之事的系统,而且你
在使用时还可以对它进行编程。我不知道Emacs是不是第一个这æ
 ·çš„工具,但是作为编辑器它确实是第一个。</p>
+
+<p>这种构造
庞大、复杂的程序作为自己的编辑器,然后再和å…
¶ä»–人交换的精神正是我们当时在人工智能实验室拥有的、驱动自由合作精神的动力。它的思想就是ä½
 å¯ä»¥æŠŠä½ 
拥有的程序的拷贝分发给想要的人。我们和任何想要的人分享,它们是人类的知识。所以尽管我们分享软件的方式和设计Emacs之间并不存在有组织的政治å
…
³è”,我仍然确信它们有联系,也许是不自觉的联系。我认为正是我们在人工智能实验室生活方式的属性导致了Emacs的诞生并使之发展。</p>
+
+<p>最初的Emacs不带Lisp。å…
¶åº•å±‚语言、一个非解释性语言&mdash;是<abbr>PDP</abbr>-10汇编语言。我们编写的解释器实é™
…上不是为Emacs写的,它是为<acronym
+title="Text Editor and
+COrrector">TECO</acronym>编写的。TECO是我们的文本编辑器,也是一个极å
…¶ä¸‘陋的编程语言,能有多丑陋就有多丑陋。其原因
是它本来就不是作为编程语言设计的,它是作为编辑器和命令语言设计的。比如,命令&lsquo;5l&rsquo;意思是&lsquo;移动5行&rsquo;,或è€
…用&lsquo;i&rsquo;加上一个字符串,再加上ESC按键来插å…
¥è¯¥å­—符串。你可以输å…
¥ä»£è¡¨ä¸€ç³»åˆ—命令的字符串,这叫命令字符串。你可以用ESC
+ESC做结尾,这样该串命令就执行了。</p>
+
+<p>不过,人们想要扩展该语言使之带上编程能力,所以人们就添åŠ
 äº†ä¸€äº›åŠŸèƒ½ã€‚例如,最早添加的就有循环结构,就是&lt;
+&gt;。你
把东西放在这两个符号之间,它们就循环了。还有一些晦涩的命令用来定义退出循环的条件。为了构é€
 Emacs,我们<a
+href="#foot-1">(1)</a>添加
了可以创建带名称子函数的功能。在此之前,有点像Basic语言,子函数只能有一个字母的名称。这对编写大型程序来说有点难,所以我们就添åŠ
 äº†é•¿æ–‡ä»¶ååŠŸèƒ½ã€‚实际
上,还有一些相当复杂的功能;我认为Lisp的unwind-protect功能就来自<acronym>TECO</acronym>。</p>
+
+<p>我们开始添加
一些相当复杂的功能,都是用我们所知的那个最丑陋的语法完成的,而它是可行的&mdash;人们终究能够使用它来完成大型程序。这里,明显的教训就是使用诸如<acronym>TECO</acronym>这æ
 
·ä¸æ˜¯ä¸ºç¼–程设计的语言是一个错误。构建扩展的语言不能是事后再想的编程语言;它应该按ç
…
§ç¼–程语言来设计。事实上,我们发现Lisp是做这件事的最佳语言。</p>
+
+<p>Bernie Greenberg是此事的发现者<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>此时,人们开始思考他们要怎样在一个并没有å…
¨éƒ¨Lisp支持的平台上做到这一切。Multics
+MacLisp既有编译器,也有解释器&mdash;它是一个完整的Lisp系统&mdash;但是人们想要的是在å
…¶ä»–没有Lisp编译器的系统上实现类似的东西。不过,如果你
没有Lisp编译器,你无
法用Lisp编写整个编辑器&mdash;如果只能运行解释器的话,它太æ
…¢äº†ï¼Œå°¤å…¶æ˜¯æ˜¾ç¤ºåˆ·æ–°ã€‚因此我们开发了一项混合技术。å…
¶æ€æƒ³æ˜¯å†™ä¸€ä¸ªLisp解释器和编辑器的底层部分,把他们结合在一起,这æ
 ·ç¼–辑器就内
置了Lisp功能。这些就是我们需要优化的部分。这项技术是我们已经在原始的Emacs上有意识地实践了的技术,å›
 
为我们用机器语言重新编写了某些相当上层的功能,并且把它们作为<acronym>TECO</acronym>的基本命令。比如,<acronym>TECO</acronym>有一个填å
……段落的基本命令(实际上,是完成填充
段落的大多数工作,因为å…
¶ä¸­ä¸€äº›ä¸è€—时的工作可以在上层由一个<acronym>TECO</acronym>程序来完成)。ä½
 å¯ä
 
»¥ç¼–写一个<acronym>TECO</acronym>程序来完成整个任务,但是它太æ
…¢äº†ï¼Œæ‰€ä»¥æˆ‘们对å…
¶éƒ¨åˆ†ä½¿ç”¨äº†æœºå™¨è¯­è¨€åšå‡ºä¼˜åŒ–。在此(指混合技术),编辑器的绝大部分是用Lisp编写的,但是那些需要非常快速运行的部分是用底层语言写的。</p>
+
+<p>因此,当我编写第二版Emacs时,我采用了同æ 
·çš„设计。底层的语言不再是机器语言,而是C。就编写运行在类Unix系统上的可移植程序来说,C是一个优秀的、高效的语言。虽然有一个Lisp解释器,但是我直接用C实现了一些特定的编辑功能&mdash;管理编辑器的缓存、插å
…
¥èµ·å§‹æ–‡æœ¬ã€è¯»å†™æ–‡ä»¶ã€åˆ·æ–°å±å¹•æ˜¾ç¤ºä»¥åŠç®¡ç†ç¼–辑窗口。</p>
+
+<p>当时,它不再是第一个用C编写并运行在Unix上的Emacs了。第一个是由James
+Gosling完成的,就是GosMacs。他有些奇怪。一开始,他看来还是受到了原始Emacs的合作和分享精神的影响。我首å
…
ˆåœ¨<abbr>MIT</abbr>向人们发布了Emacs。有人想要把它移植到Twenex系统&mdash;它最初只运行在我们在<abbr>MIT</abbr>使用的不å
…
¼å®¹åˆ†æ—¶ç³»ç»Ÿä¸Šã€‚人们把它移植到了Twenex上,这意味着世界上可能有数百个设备可以安è£
…该Emacs。我们开始发布该版本,发行遵循的是&ldquo;你必
须发回所有的改进&rdquo;这æ 
·å¤§å®¶éƒ½å—益。没有人会刻意强调这个规则,但是就我所知人们都是合作的。</p>
+
+<p>Gosling一开始,的确看起来是以这æ 
·çš„精神参与的。他在一个使用手册里称此程序为Emacs,希望社区能够改善之,使之é
…
å¾—上这个名字。这是参与社区的正确方式&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>这个第二版的Emacs是&lsquo;自由软件&rsquo;以该词汇的当今意义来说&mdash;它是力争软件自由的政治运动的一部分。该运动的精髓就是每个人都应该有自由做我们在<abbr>MIT</abbr>的那段岁月做的事,一起开发软件,只要愿意就可以一起工作。这就是自由软件的基础&mdash;也是我的经历,是我在<abbr>MIT</abbr>人工智能实验室的生活&mdash;为人类的知识而工作,而不是阻碍å
…¶ä»–人使用和传播人类的知识。</p>
+
+<p>那时,你可以用和造非Lisp专用机差不多的价钱造
一台电脑,它运行Lisp的速度要快得多,而且对每个指令都做类型检查。普通电脑一般是让ä½
 åœ¨è¿è¡Œé€Ÿåº¦å’Œç±»åž‹æ£€æŸ¥ä¹‹é—´é€‰ä¸€ä¸ªã€‚所以,是的,你
可能使用Lisp编译器让你的程序运行很快,但是如果你
对数字做<tt>car</tt><sup><a
+href="#TransNote1">1</a></sup>时,结果是无
效的,最终导致程序崩溃。</p>
+
+<p>该Lisp电脑运行指令的速度几乎和其他电脑一æ 
·å¿«ï¼Œä½†æ˜¯å®ƒå¯¹æ¯ä¸ªæŒ‡ä»¤&mdash;car指令都会做数据类型检查&mdash;所以当ä½
 
在编译过的程序里试图用car指令处理数字时,系统会立即报错。我们制é€
 äº†è¿™ç§ç”µè„‘并且有一个专门的Lisp操作系统。该系统几乎完å…
¨æ˜¯ç”¨Lisp编写的,只有一部分是用microcode编写的。人们对大规模é€
 è¿™ç§æœºå™¨å¾ˆæ„Ÿå…´è¶£ï¼Œè¿™æ„å‘³ç€ä»–们应该开个公司。</p>
+
+<p>对开什么样的å…
¬å¸ï¼Œå¤§å®¶æœ‰ä¸¤ç§ä¸åŒçš„想法。Greenblatt想开一个他称之为&ldquo;黑客&rdquo;的å
…¬å¸ã€‚这意味着该å…
¬å¸ä¼šç”±é»‘客运作并且以有利于黑客的方式运作。另一个目的是要保持人工智能实验室的文化<a
+href="#foot-3">(3)</a>。不幸的是,Greenblatt没有任何商业经验,所以Lisp电脑团队的å
…
¶ä»–人对Greenblatt会不会成功表示怀疑。他们认为他拒绝外部资金的做法行不通。</p>
+
+<p>他为什么要避免外部投资呢?因为如果一个公司引å…
¥äº†å¤–部投资者,他们就会掌控公司并且不会让你
有任何道德上的犹豫。最终,如果你
稍有犹豫,他们也会踢开你。</p>
+
+<p>所以,Greenblatt认为他可以找到预先付款的客户。他们再造
电脑发送给该客户;有了这些利润之后,他们就可以再造
更多的电脑,然后再销售,然后再造
更多的电脑,如此进行下去。组内的其他人觉得这æ 
·ä¸è¡Œã€‚</p>
+
+<p>然后,Greenblatt就雇佣了Russell
+Noftsker,就是招我进来的人,他后来离开了人工智能实验室并开创了一个成功的å
…¬å¸ã€‚Russell被认为很有商业头脑。他向组内的å…
¶ä»–人展示了他的商业才智,他说:&ldquo;我们抛开Greenblatt,不要管他的想法,我们去开另一间å
…¬å¸ã€‚&rdquo;背后捅
刀子,明显是真正的生意人。这些人决定开一个叫Symbolics的å…
¬å¸ã€‚他们吸纳外部投资、不会有任何良心不安、竭尽所能获取成功。</p>
+
+<p>但是Greenblatt并没有放弃。他和少数忠
诚于他的人还是决定开办了Lisp
+Machines公司,并按自己的计划前进。你
猜怎么着,他们成功了!他们找到了一个预å…
ˆä»˜æ¬¾çš„客户。他们制造了电脑并卖了出去,并制造
了越来越多的电脑。尽管没有组内多数人的支持,他们实际
上还是成功了。Symbolics也成功地启动了,所以你
有两家互相竞争的Lisp电脑å…
¬å¸ã€‚当Symbolics看到LMI不是走向失败时,他们开始寻机搞ç 
´åã€‚</p>
+
+<p>因
此,实验室的被离弃接着是实验室的&ldquo;战争&rdquo;。离弃是å›
 ä¸ºSymbolics挖走了实验室的所有黑客,只剩下我和几个在LMIå…
¼èŒçš„人。然后,他们又援引条例把在<abbr>MIT</abbr>å…
¼èŒçš„人赶走,因此他们å…
¨éƒ½èµ°äº†ï¼Œåªå‰©ä¸‹æˆ‘。人工智能实验室现在没什么希望了。而且<abbr>MIT</abbr>对这两个å
…¬å¸åšäº†éžå¸¸æ„šè ¢çš„安排。这是一个三方合同,其中两家å…
¬å¸éƒ½è¢«æŽˆæƒä½¿ç”¨Lisp电脑系统的源代码。这两家å…
¬å¸éƒ½éœ€è¦è®©<abbr>MIT</abbr>使用他们的更改。但是合同没有说<abbr>MIT</abbr>有权将这些代ç
 æ”¾å…¥ç”±ä¸¤å®¶å…
¬å¸æŽˆæƒçš„<abbr>MIT</abbr>Lisp电脑系统。没有人预见到实验室的黑客小组会被彻底毁灭,但是它就是被毁灭了。</p>
+
+<p> 于是,Symbolics启动了一个计划<a
+href="#foot-4">(4)</a>。他们对实验室说,&ldquo;我们会持续让你
们使用我们的系统改进,但是你们不能把这些改进装
到<abbr>MIT</abbr>的Lisp电脑系统上。不过,我们会让你
们使用Symbolics的Lisp电脑系统,你
们可以在这些系统上运行改进版,但是仅此而已。&rdquo;</p>
+
+<p>这实际
上是要求我们只能选择一边,要么使用<abbr>MIT</abbr>的系统版本,要么使用Symbolics的版本。我们选择哪一边,就决定了我们的系统改进会进å
…
¥åˆ°å“ªä¸€è¾¹ã€‚如果我们为改进Symbolics的版本而工作,我们就只是在帮助Symbolics。如果我们使用和改进<abbr>MIT</abbr>的系统版本,两个å
…
¬å¸éƒ½èƒ½å¤Ÿå¾—到我们的工作,但是Symbolics认为这是在支持LMI,å›
 ä¸ºè¿™ä¼šå¸®åŠ©LMI生存下去。因此,我们不被å…
è®¸å†ä¿æŒä¸­ç«‹ã€‚</p>
+
+<p>直到此时,我都没有站在其中任何一个å…
¬å¸çš„一边,虽然我看到社区和软件发生的一切感到非常难受。但是现在,Symbolics强迫我做出选择。所以,为了使Lisp
+Machines公司能够继续<a
+href="#foot-5">(5)</a>&mdash;我开始复制Symbolics对Lisp电脑系统所作的å
…¨éƒ¨æ”¹è¿›ã€‚我把这些改进用自己的想法同æ 
·å®žçŽ°å‡ºæ¥ï¼ˆå°±æ˜¯è¯´ï¼Œä»£ç æ˜¯æˆ‘自己写的)。</p>
+
+<p>过了一阵,<a
+href="#foot-6">(6)</a>,我得出结论,不看他们的代ç 
å¯èƒ½æ›´å¥½ã€‚当他们宣布beta版时,通过看发布声明,我知道了有什么功能,然后自己实现它们。当他们发行正式版时,我也实现了这些功能。</p>
+
+<p>如此这样,有两年的时间,我阻止他们把Lisp
+Machines公司消灭;这两个公司同时存在。但是,我不想这æ 
·å¹´å¤ä¸€å¹´åœ°æƒ©ç½šä¸€ä¸ªäººï¼Œä»…仅只是阻挠
一桩罪恶。我觉得他们已经受到了彻底的惩罚,因为他们陷å…
¥äº†æ— æ³•æ‘†è„±çš„竞争漩涡之中<a
+href="#foot-7">(7)</a>。与此同时,是时候再开始创建一个新的社区来代替那个被他们以及å
…¶ä»–人毁灭的社区了。</p>
+
+<p>70年代的Lisp社区不限于<abbr>MIT</abbr>人工智能实验室,并不是所有的黑客都在<abbr>MIT</abbr>。Symbolics发起的战争毁灭了<abbr>MIT</abbr>社区,但是同时还有å
…
¶ä»–事件在进行。有人放弃了合作,这些也毁灭着社区,社区所剩寥寥了。</p>
+
+<p>一旦我不再惩罚Symbolics,我就不得不考虑下一步做什么。我å¿
…
须做一个自由的操作系统,这很明显&mdash;人们能够一起工作和分享的方法就是有一个自由的操作系统。</p>
+
+<p>一开始,我想要做一个基于Lisp的系统,但是我认识到那在技术上并不一个好主意。要做像Lisp电脑那æ
 ·çš„系统,你需要专用的微代码。这种微代码使你能够和å…
¶ä»–电脑一æ 
·å¿«é€Ÿåœ°æ‰§è¡Œç¨‹åºï¼ŒåŒæ—¶è¿˜èƒ½èŽ·ç›ŠäºŽç±»åž‹æ£€æŸ¥ã€‚没有微代ç 
ï¼Œä½ å°±åªç›¸å½“于å…
¶ä»–机器上的Lisp编译器。程序可以更快,但是并不安å…
¨ã€‚如果你在一个分时系统上运行一个这æ 
·çš„程序还凑合&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
+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>这并不是GNU工程涉及Lisp的结束。后来在1995年左右,我们计划启动一个图形化桌面项目。我们很æ¸
…
楚该桌面程序的主要编程语言应该能够便利地扩展该桌面程序,就像我们的编辑器一æ
 ·ã€‚问题在于这应该是一个什么语言。</p>
+
+<p>此时,<acronym title="Tool Command
+Language">TCL</acronym>作为候选语言的呼声很高。我非常看不上<acronym>TCL</acronym>,基本上å›
 ä¸ºå®ƒä¸æ˜¯Lisp语言。它稍稍有点像Lisp,但是å…
¶è¯­ä¹‰ä¸Šä¸æ˜¯ï¼Œè€Œä¸”也不简洁。然后,有人给我看了一个广告,å
…¶ä¸­è¯´Sun公司正试图雇人把<acronym>TCL</acronym>变成å…
¨ä¸–ç•Œ&ldquo;扩展语言的实质标准&rdquo;。我在想,&ldquo;我们必
须阻止这件事&rdquo;,所以我们开始让Scheme成为GNU的æ 
‡å‡†æ‰©å±•è¯­è¨€ã€‚不是Common
+Lisp,因为它太庞大了。å…
¶æ€æƒ³æ˜¯ï¼Œæˆ‘们把Scheme解释器连接到应用程序中,就像<acronym>TCL</acronym>那æ
 ·ã€‚然后,我们就可以建议这是所有GNU程序首选的扩展包
。</p>
+
+<p>使用这个强大的Lisp分支语言作为基本扩展语言会给你
带来一个有趣的好处。你将能够把å…
¶ä»–语言翻译成基本扩展语言来实现其他语言。如果你
的基本语言是<acronym>TCL</acronym>,那么你
就不能够轻易地用翻译成<acronym>TCL</acronym>来实现Lisp。但是如果ä½
 
的基本语言是Lisp,那么翻译就不是难事。我们的想法是,如果每个扩展应用都支持Scheme,那么ä½
 
可以用Scheme实现<acronym>TCL</acronym>或Python或Perl,用来把应用翻译成Scheme。之后,ä½
 å°±å¯ä»¥æŠŠå®ƒåŠ 
载到每个应用,然后就可以用自己最喜爱的语言来定制应用了,å
…¶ä»–定制也类似。</p>
+
+<p>如果扩展语言很弱,用户就不得不使用你
提供的唯一语言。这就意味着,喜欢特定语言的人们将不得不和开发è€
…选择的语言竞争&mdash;他们会说&ldquo;应用开发者
,请把我的语言添加到你的应用中,而不是添加
别人的。&rdquo;这样,用户就æ 
¹æœ¬æ²¡æœ‰é€‰æ‹©çš„余地&mdash;他们只能接受应用带来的语言,并受制于[该语言]。但是如果ä½
 æœ‰ä¸€ä¸ªå¼ºå¤§çš„语言,它能够实现其他语言,那么你
就给了用户自由选择语言的权利,我们就不再有语言选择的战争了。这正是我们所希望的&lsquo;Guile&rsquo;,我们的scheme解释器,能够做到这一切。去年夏天,我们有人完成了从Python到Scheme的翻译器。我不太确定这个是否已经å
…¨éƒ¨å®Œæˆï¼Œä¸è¿‡å¦‚果有人对这个项目感å…
´è¶£ï¼Œè¯·è”系我们。这就是我们未来的计划。</p>
+
+<p>我一直没有提自由软件,不过现在让我简单说一下它的意义。自由软件指的不是价æ
 ¼ï¼›å®ƒçš„意思不是你可以免费得到的软件。(它可以是你
付费得到的软件,也可以是你å…
è´¹èŽ·å¾—的拷贝。)它的意思是作为用户,你有一些自由。å…
¶ä¸­çš„关键是你有自由运行该软件、你有自由研究å…
¶æ‰€ä½œæ‰€ä¸ºã€ä½ æœ‰è‡ªç”±æŒ‰ç…§è‡ªå·±çš„需求修改该软件、你
有自由向å…
¶ä»–人发布该软件以及发布修改后的软件。这就是自由软件的定义。如果ä½
 ä½¿ç”¨çš„是非自由软件,你就失去了这些å…
³é”®çš„自由,所以请不要使用非自由软件。</p>
+
+<p>GNU工程的目的就是提供代替非自由软件的自由软件,让人们能够更容易地拒绝非自由软件对自由的侵害、对用户的控制。对那些缺少道德勇气来拒绝非自由软件的人来说,如果ä½
 éœ€è¦çš„是实用性,那么我们将尽力提供一个自由的替代使你
能够在较少混乱、较少牺牲实用性的情
况下,转移到自由软件。你
失去的实用性当然是越少越好。我们希望你
能够更容易地获得自由、并且能够合作互助。</p>
+
+<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>
+
+<ol>
+<li id="foot-1">Guy
+Steele设计了Emacs最初的对称命令集合;然后我们开始构造
Emacs(在TECO的基础上),但是在一段长期的联合开发之后,Steele渐渐离开了,所以我独自完成了Emacs。å
…¶ä»–人,特别是Eugene
+C. Cicciarelli和Mike McMahon后来也做出了显著的贡献。</li>
+
+<li id="foot-2">Bernie Greenberg说Dan
+Weinreb在Lisp电脑上的Emacs要早于Greenberg在Multics的版本。我在此对我的错误道歉。</li>
+
+<li 
id="foot-3">Greenblatt的计划,就我的理解,是请实验室的人员å…
¼èŒï¼Œè¿™æ 
·ä»–们还能够继续在人工智能实验室的本职工作。Symbolics采取的是å
…¨èŒé›‡ä½£ï¼Œæ‰€ä»¥å®žéªŒå®¤çš„人员就不能在MIT工作了。</li>
+
+<li 
id="foot-4">该计划的背景,我在演讲里没有明说,是在开始阶段,人工智能实验室的黑客们,不管是在Symbolics,还是在LMI,都继续把他们的改进贡献给MIT的Lisp电脑系统&mdash;尽管合同并没有要求这æ
 ·åšã€‚Symbolics的计划却是单方面割裂合作。</li>
+
+<li id="foot-5">这并不是说我特别å…
³æ³¨LMI的命运,我只是不想让Symbolics通过攻击人工智能实验室获益。</li>
+
+<li 
id="foot-6">这个陈述常被曲解为我从来没有看过Symbolics的代ç 
ã€‚实际上,它说的是我一开始看了Symbolics的代码。这些代ç 
å°±åœ¨MIT,我有权看的,而且最初我就是这æ 
·äº†è§£åˆ°ä»–们做了改动。
+
+<p>不过,这意味着我不得不花力气找到å…
¶ä»–的解决方法,这样才能避免复制Symbolics的代ç 
ã€‚一段时间之后,我觉得不看这些代码更好。这æ 
·çš„话,我就可以按最好的方法来实现代ç 
ï¼Œè€Œä¸ç”¨è€ƒè™‘是否用了Symbolics的代码。</p></li>
+
+<li id="foot-7">Symbolics曾经向MIT抗议:我的工作阻挠
了他们的计划而使Symbolics损失一百万美元。</li>
+
+<li id="foot-8">我并不介意非常复杂和重量级的函数使用å…
³é”®å­—参数。我讨厌的是连诸如&ldquo;member&rdquo;这æ 
·çš„简单函数也要使用关键字参数。</li>
+</ol>
+
+<div class="translators-notes">
+
+<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
+<h3>译注</h3>
+<ol>
+<li id="TransNote1">car:是Lisp语言的一个基本指令。</li>
+</ol></div>
+</div>
+
+<!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.zh-cn.html" -->
+<div id="footer">
+<div class="unprintable">
+
+<p>请将有å…
³è‡ªç”±è½¯ä»¶åŸºé‡‘会(FSF)&amp;GNU的一般性问题发送到<a
+href="mailto:address@hidden";>&lt;address@hidden&gt;</a>。也可以通过<a
+href="/contact/">å…
¶ä»–联系方法</a>联系自由软件基金会(FSF)。请将无效链接,å…
¶ä»–错误或建议发送给<a
+href="mailto:address@hidden";>&lt;address@hidden&gt;</a>。</p>
+
+<p>
+<!-- TRANSLATORS: Ignore the original text in this paragraph,
+        replace it with the translation of these two:
+
+        We work hard and do our best to provide accurate, good quality
+        translations.  However, we are not exempt from imperfection.
+        Please send your comments and general suggestions in this regard
+        to <a href="mailto:address@hidden";>
+
+        &lt;address@hidden&gt;</a>.</p>
+
+        <p>For information on coordinating and submitting 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>
+</div>
+
+<!-- Regarding copyright, in general, standalone pages (as opposed to
+     files generated as part of manuals) on the GNU web server should
+     be under CC BY-ND 3.0 US.  Please do NOT change or remove this
+     without talking with the webmasters or licensing team first.
+     Please make sure the copyright date is consistent with the
+     document.  For web pages, it is ok to list just the latest year the
+     document was modified, or published.
+     
+     If you wish to list earlier years, that is ok too.
+     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
+     years, as long as each year in the range is in fact a copyrightable
+     year, i.e., a year in which the document was published (including
+     being publicly visible on the web or in a revision control system).
+     
+     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 Free Software Foundation, Inc.</p>
+
+<p>本页面使用<a rel="license"
+href="http://creativecommons.org/licenses/by-nd/3.0/us/";>Creative Commons
+Attribution-NoDerivs 3.0 United States License</a>授权。</p>
+
+<!--#include virtual="/server/bottom-notes.zh-cn.html" -->
+<div class="translators-credits">
+
+<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
+<b>审校</b>:<a href="mailto:address@hidden";>&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。</div>
+
+<p class="unprintable"><!-- timestamp start -->
+最后更新:
+
+$Date: 2018/07/30 07:32:28 $
+
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+</body>
+</html>

Index: po/rms-lisp.zh-cn-en.html
===================================================================
RCS file: po/rms-lisp.zh-cn-en.html
diff -N po/rms-lisp.zh-cn-en.html
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ po/rms-lisp.zh-cn-en.html   30 Jul 2018 07:32:29 -0000      1.1
@@ -0,0 +1,592 @@
+<!--#include virtual="/server/header.html" -->
+<!-- Parent-Version: 1.77 -->
+<title>My Lisp Experiences and the Development of GNU Emacs
+- GNU Project - Free Software Foundation</title>
+<!--#include virtual="/gnu/po/rms-lisp.translist" -->
+<!--#include virtual="/server/banner.html" -->
+<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>
+
+<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.
+Since I've done enough things in my career connected with Lisp I
+should be able to say something interesting.</p>
+
+<p>My first experience with Lisp was when I read the Lisp 1.5 manual
+in high school. That's when I had my mind blown by the idea that there
+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
+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>
+
+<p>I began doing work on a real Lisp implementation with JonL White
+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>
+
+<p>During the 1970s, before my life became politicized by horrible
+events, I was just going along making one extension after another for
+various programs, and most of them did not have anything to do with
+Lisp. But, along the way, I wrote a text editor, Emacs. The
+interesting idea about Emacs was that it had a programming language,
+and the user's editing commands would be written in that interpreted
+programming language, so that you could load new commands into your
+editor while you were editing. You could edit the programs you were
+using and then go on editing with them. So, we had a system that was
+useful for things other than programming, and yet you could program it
+while you were using it. I don't know if it was the first one of
+those, but it certainly was the first editor like that.</p>
+
+<p>This spirit of building up gigantic, complicated programs to use in
+your own editing, and then exchanging them with other people, fueled
+the spirit of free-wheeling cooperation that we had at the AI Lab
+then. The idea was that you could give a copy of any program you had
+to someone who wanted a copy of it. We shared programs to whomever
+wanted to use them, they were human knowledge. So even though there
+was no organized political thought relating the way we shared software
+to the design of Emacs, I'm convinced that there was a connection
+between them, an unconscious connection perhaps. I think that it's the
+nature of the way we lived at the AI Lab that led to Emacs and made it
+what it was.</p>
+
+<p>The original Emacs did not have Lisp in it. The lower level
+language, the non-interpreted language &mdash; was <abbr>PDP</abbr>-10
+Assembler. The interpreter we wrote in that actually wasn't written
+for Emacs, it was written for <acronym title="Text Editor and
+COrrector">TECO</acronym>. 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
+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
+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
+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 <acronym>TECO</acronym>.</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
+able to write large programs in it anyway. The obvious lesson was that
+a language like <acronym>TECO</acronym>, which wasn't designed to be a
+programming language, was the wrong way to go. The language that you
+build your extensions on shouldn't be thought of as a programming
+language in afterthought; it should be designed as a programming
+language. In fact, we discovered that the best programming language
+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
+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
+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
+the secretaries, who believed they couldn't do programming, weren't
+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
+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
+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
+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
+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
+parts of the editor were built-in Lisp facilities. Those would be
+whatever parts we felt we had to optimize. This was a technique that
+we had already consciously practiced in the original Emacs, because
+there were certain fairly high level features which we re-implemented
+in machine language, making them into <acronym>TECO</acronym>
+primitives. For instance, there was a <acronym>TECO</acronym>
+primitive to fill a paragraph (actually, to do most of the work of
+filling a paragraph, because some of the less time-consuming parts of
+the job would be done at the higher level by a <acronym>TECO</acronym>
+program). You could do the whole job by writing
+a <acronym>TECO</acronym> program, but that was too slow, so we
+optimized it by putting part of it in machine language. We used the
+same idea here (in the hybrid technique), that most of the editor
+would be written in Lisp, but certain parts of it that had to run
+particularly fast would be written at a lower level.</p>
+
+<p>Therefore, when I wrote my second implementation of Emacs, I
+followed the same kind of design. The low level language was not
+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,
+inserting leading text, reading and writing files, redisplaying the
+buffer on the screen, managing editor windows.</p>
+
+<p>Now, this was not the first Emacs that was written in C and ran on
+Unix. The first was written by James Gosling, and was referred to as
+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 <abbr>MIT</abbr>. Someone wanted to port it to run on Twenex &mdash; it
+originally only ran on the Incompatible Timesharing System we used
+at <abbr>MIT</abbr>. They ported it to Twenex, which meant that there
+were a few hundred installations around the world that could
+potentially use it. We started distributing it to them, with the rule
+that &ldquo;you had to send back all of your improvements&rdquo; so we
+could all benefit. No one ever tried to enforce that, but as far as I
+know people did cooperate.</p>
+
+<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
+in and make the program better. But after that he seemed to change the
+spirit, and sold it to a company.</p>
+
+<p>At that time I was working on the GNU system (a free software
+Unix-like operating system that many people erroneously call
+&ldquo;Linux&rdquo;).  There was no free software Emacs editor that ran
+on Unix. I did, however, have a friend who had participated in
+developing Gosling's Emacs. Gosling had given him, by email, permission
+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
+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>
+
+<p>I concluded I couldn't use it and had to replace it all, the first
+step of which was to write an actual Lisp interpreter. I gradually
+adapted every part of the editor based on real Lisp data structures,
+rather than ad hoc data structures, making the data structures of the
+internals of the editor exposable and manipulable by the user's Lisp
+programs.</p>
+
+<p>The one exception was redisplay. For a long time, redisplay was
+sort of an alternate world. The editor would enter the world of
+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
+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
+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 <abbr>MIT</abbr>, 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 <abbr>MIT</abbr> 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>
+
+<p>At the time, you could make a computer that was about the same price
+range as other computers that weren't meant for Lisp, except that it
+would run Lisp much faster than they would, and with full type checking
+in every operation as well. Ordinary computers typically forced you to
+choose between execution speed and good typechecking.  So yes, you could
+have a Lisp compiler and run your programs fast, but when they tried to
+take <tt>car</tt> of a number, it got nonsensical results and eventually
+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 car instruction would
+do data typechecking &mdash; so when you tried to get the car 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
+the microcode. People became interested in manufacturing them, which
+meant they should start a company.</p>
+
+<p>There were two different ideas about what this company should be
+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>.
+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
+wouldn't work.</p>
+
+<p>Why did he want to avoid outside investment? Because when a company
+has outside investors, they take control and they don't let you have
+any scruples. And eventually, if you have any scruples, they also
+replace you as the manager.</p>
+
+<p>So Greenblatt had the idea that he would find a customer who would
+pay in advance to buy the parts. They would build machines and deliver
+them; with profits from those parts, they would then be able to buy
+parts for a few more machines, sell those and then buy parts for a
+larger number of machines, and so on. The other people in the group
+thought that this couldn't possibly work.</p>
+
+<p>Greenblatt then recruited Russell Noftsker, the man who had hired
+me, who had subsequently left the AI Lab and created a successful
+company.  Russell was believed to have an aptitude for business. He
+demonstrated this aptitude for business by saying to the other people
+in the group, &ldquo;Let's ditch Greenblatt, forget his ideas, and
+we'll make another company.&rdquo; Stabbing in the back, clearly a
+real businessman. Those people decided they would form a company
+called Symbolics. They would get outside investment, not have
+scruples, and do everything possible to win.</p>
+
+<p>But Greenblatt didn't give up. He and the few people loyal to him
+decided to start Lisp Machines Inc. anyway and go ahead with their
+plans. And what do you know, they succeeded! They got the first
+customer and were paid in advance. They built machines and sold them,
+and built more machines and more machines. They actually succeeded
+even though they didn't have the help of most of the people in the
+group. Symbolics also got off to a successful start, so you had two
+competing Lisp machine companies. When Symbolics saw that LMI was not
+going to fall flat on its face, they started looking for ways to
+destroy it.</p>
+
+<p>Thus, the abandonment of our lab was followed by &ldquo;war&rdquo;
+in our lab.  The abandonment happened when Symbolics hired away all
+the hackers, except me and the few who worked at LMI part-time. Then
+they invoked a rule and eliminated people who worked part-time
+for <abbr>MIT</abbr>, so they had to leave entirely, which left only
+me. The AI lab was now helpless.  And <abbr>MIT</abbr> had made a very
+foolish arrangement with these two companies.  It was a three-way
+contract where both companies licensed the use of Lisp machine system
+sources. These companies were required to let <abbr>MIT</abbr> use
+their changes. But it didn't say in the contract that <abbr>MIT</abbr>
+was entitled to put them into the <abbr>MIT</abbr> Lisp machine
+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
+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 <abbr>MIT</abbr> Lisp machine system. Instead, we'll give you
+access to Symbolics' Lisp machine system, and you can run it, but
+that's all you can do.&rdquo;</p>
+
+<p>This, in effect, meant that they demanded that we had to choose a
+side, and use either the <abbr>MIT</abbr> version of the system or the
+Symbolics version.  Whichever choice we made determined which system
+our improvements went to. If we worked on and improved the Symbolics
+version, we would be supporting Symbolics alone. If we used and
+improved the <abbr>MIT</abbr> version of the system, we would be doing
+work available to both companies, but Symbolics saw that we would be
+supporting LMI because we would be helping them continue to exist. So
+we were not allowed to be neutral anymore.</p>
+
+<p>Up until that point, I hadn't taken the side of either company,
+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
+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
+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
+release, I did too.</p>
+
+<p>In this way, for two years, I prevented them from wiping out Lisp
+Machines Incorporated, and the two companies went on. But, I didn't
+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
+building a new community to replace the one that their actions and
+others had wiped out.</p>
+
+<p>The Lisp community in the 70s was not limited to
+the <abbr>MIT</abbr> AI Lab, and the hackers were not all
+at <abbr>MIT</abbr>. The war that Symbolics started was what wiped
+out <abbr>MIT</abbr>, but there were other events going on then. There
+were people giving up on cooperation, and together this wiped out the
+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
+only way that people could work together and share was with a free
+operating system.</p>
+
+<p>At first, I thought of making a Lisp-based system, but I realized
+that wouldn't be a good idea technically. To have something like the
+Lisp machine system, you needed special purpose microcode. That's what
+made it possible to run programs as fast as other computers would run
+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
+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
+the Lisp machine.</p>
+
+<p>I decided instead to make a Unix-like operating system that would
+have Lisp implementations to run as user programs. The kernel wouldn't
+be written in Lisp, but we'd have Lisp. So the development of that
+operating system, the GNU operating system, is what led me to write
+the GNU Emacs. In doing this, I aimed to make the absolute minimal
+possible Lisp implementation. The size of the programs was a
+tremendous concern.</p>
+
+<p>There were people in those days, in 1985, who had one-megabyte
+machines without virtual memory. They wanted to be able to use GNU
+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
+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
+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
+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>.
+They don't seem quite Lispy
+to me; I'll do it sometimes but I minimize the times when I do
+that.</p>
+
+<p>That was not the end of the GNU projects involved with Lisp. Later
+on around 1995, we were looking into starting a graphical desktop
+project. It was clear that for the programs on the desktop, we wanted
+a programming language to write a lot of it in to make it easily
+extensible, like the editor. The question was what it should be.</p>
+
+<p>At the time, <acronym title="Tool Command Language">TCL</acronym>
+was being pushed heavily for this purpose. I had a very low opinion
+of <acronym>TCL</acronym>, basically because it wasn't Lisp. It looks
+a tiny bit like Lisp, but semantically it isn't, and it's not as
+clean.  Then someone showed me an ad where Sun was trying to hire
+somebody to work on <acronym>TCL</acronym> to make it the
+&ldquo;de-facto standard extension language&rdquo; of the world. And I
+thought, &ldquo;We've got to stop that from happening.&rdquo; So we
+started to make Scheme the standard extensibility language for
+GNU. Not Common Lisp, because it was too large. The idea was that we
+would have a Scheme interpreter designed to be linked into
+applications in the same way <acronym>TCL</acronym> was linked into
+applications. We would then recommend that as the preferred
+extensibility package for all GNU programs.</p>
+
+<p>There's an interesting benefit you can get from using such a
+powerful language as a version of Lisp as your primary extensibility
+language.  You can implement other languages by translating them into
+your primary language. If your primary language
+is <acronym>TCL</acronym>, you can't very easily implement Lisp by
+translating it into <acronym>TCL</acronym>. But if your primary
+language is Lisp, it's not that hard to implement other things by
+translating them. Our idea was that if each extensible application
+supported Scheme, you could write an implementation
+of <acronym>TCL</acronym> or Python or Perl in Scheme that translates
+that program into Scheme. Then you could load that into any
+application and customize it in your favorite language and it would
+work with other customizations as well.</p>
+
+<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
+developer, put my language into your application, not his
+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
+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
+touch. So that's the plan we have for the future.</p>
+
+<p>I haven't been speaking about free software, but let me briefly
+tell you a little bit about what that means. Free software does not
+refer to price; it doesn't mean that you get it for free. (You may
+have paid for a copy, or gotten a copy gratis.) It means that you have
+freedom as a user. The crucial thing is that you are free to run the
+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
+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
+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
+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
+to make it easier for you to live in freedom, to cooperate.</p>
+
+<p>This is a matter of the freedom to cooperate. We're used to
+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
+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>
+
+<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
+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>
+
+<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),
+but after one long joint development session, Steele began drifting
+away, so I finished Emacs.  Others particularly including Eugene
+C. Cicciarelli and Mike McMahon contributed substantially later
+on.</li>
+
+<li id="foot-2">Bernie Greenberg says that Dan Weinreb's
+implementation of Emacs for the Lisp Machine came before Greenberg's
+implementation for Multics.  I apologize for the mistake.</li>
+
+<li id="foot-3">Greenblatt's plan, as I understood it, was to hire lab
+people part time, so that they could continue working at the AI Lab.
+Symbolics hired them full time instead, so they stopped working at
+MIT.</li>
+
+<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
+contract did not require this.  Symbolics' plan was to rupture this
+cooperation unilaterally.</li>
+
+<li id="foot-5">It was not that I cared particularly about the fate of
+LMI, but rather I did not want to let Symbolics gain through its
+aggression against the AI Lab.</li>
+
+<li id="foot-6">This statement has been misconstrued as saying that I
+never, ever looked at Symbolics' code.  Actually it says I did look,
+at first.  The Symbolics source code was available at MIT, where I was
+entitled to read it, and at first that's how I found out about their
+changes.
+
+<p>But that meant I had to make a special effort to solve each problem
+differently, in order to avoid copying Symbolics code.  After a while,
+I concluded it was better not to even look.  That way I could write
+code in whatever way was best, without concern for what might be in
+Symbolics' code.</p></li>
+
+<li id="foot-7">Symbolics at one point protested to MIT that my work,
+by thwarting their plan, had cost Symbolics a million dollars.</li>
+
+<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>
+</ol>
+
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+<div class="unprintable">
+
+<p>Please send general FSF &amp; GNU inquiries to
+<a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.
+There are also <a href="/contact/">other ways to contact</a>
+the FSF.  Broken links and other corrections or suggestions can be sent
+to <a href="mailto:address@hidden";>&lt;address@hidden&gt;</a>.</p>
+
+<p><!-- TRANSLATORS: Ignore the original text in this paragraph,
+        replace it with the translation of these two:
+
+        We work hard and do our best to provide accurate, good quality
+        translations.  However, we are not exempt from imperfection.
+        Please send your comments and general suggestions in this regard
+        to <a href="mailto:address@hidden";>
+        &lt;address@hidden&gt;</a>.</p>
+
+        <p>For information on coordinating and submitting 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
+of this article.</p>
+</div>
+
+<!-- Regarding copyright, in general, standalone pages (as opposed to
+     files generated as part of manuals) on the GNU web server should
+     be under CC BY-ND 3.0 US.  Please do NOT change or remove this
+     without talking with the webmasters or licensing team first.
+     Please make sure the copyright date is consistent with the
+     document.  For web pages, it is ok to list just the latest year the
+     document was modified, or published.
+     
+     If you wish to list earlier years, that is ok too.
+     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
+     years, as long as each year in the range is in fact a copyrightable
+     year, i.e., a year in which the document was published (including
+     being publicly visible on the web or in a revision control system).
+     
+     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 Free Software Foundation, Inc.</p>
+
+<p>This page is licensed under a <a rel="license"
+href="http://creativecommons.org/licenses/by-nd/3.0/us/";>Creative
+Commons Attribution-NoDerivs 3.0 United States License</a>.</p>
+
+<!--#include virtual="/server/bottom-notes.html" -->
+
+<p class="unprintable">Updated:
+<!-- timestamp start -->
+$Date: 2018/07/30 07:32:29 $
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+</body>
+</html>



reply via email to

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