Charles Moore, April 13, 1999
这篇文章是 Jeff Fox 根据 Charles Moore 谈话录音所写。
/* 文中提到的ColorForth指令在原文中是彩色的,但在这个BLOG中我无法做到。因此,你还可以查看我在CSDN BLOG上转贴的原文:
http://blog.csdn.net/wxj729/services/trackbacks/313656.aspx
*/
我请求 Chuck Moore 允许我对这次关于 15 年来 Forth 语言变迁的谈话进行录像。我们安装了摄像机,他谈论了我在这个网站上提出的问题,但是这一次我们不再把焦点集中在固体物理、 VLSI 或者芯片和调试方面的经验,而是 Forth 语言。我觉得他谈论了这些年来的 Forth 语言,但是相比我所关心的、 30 年前发明的语言来说,他谈及了更多的方面。
我介绍 Chuck.
(Jeff Fox) 今天,我请 Chuck Moore 对 Forth 做一个介绍,我想请他谈一谈对于自己发明的语言在最近 15 年里的经验。现在我们请 Charles Moore 。
(Charles Moore) 这可是一个大话题,我们谈多长时间?
(Jeff) 磁带只有一个小时。
(Chuck) 15 年,那差不多是我用计算机面对软件的整个经历。回想 15 年前,把重点从 Forth 语言转向 Forth 微处理器的动机主要有两个。
首先是软件的问题已经解决了。编写应用程序很容易,不用费太大的劲。所有的问题都是硬件,硬件笨拙、零乱、可靠性差,特别是你需要为客户的硬件而编写客户化的软件时。如果你想调试硬件那就更是一个大麻烦。这些都说明硬件工程师并没有做出出色的工作,当然,他们比工业界的软件工程师做得好,但是没有 Forth 软件工程师做得好。因此我想看看我能够在这些硬件问题方面做些什么。这可能是个错误。 Forth 有许多有趣的事情可做,硬件可就不这么有趣了。
我不知道你是不是听过这些历史,第一个 Forth 处理器是 Novix ,它也可能是所有这类处理器中的第一个。它是一个 16 位的处理器,使用高速工艺制造,平均 8MIPS 。这个工作很有趣,我们给它配了一个很好的 Forth 系统,称为 cmForth ,比我为 Forth Inc. 所做的其它 Forth 都更小、更简单,后来 ShBoom 是 32 位处理器, 50MIPS 。现在 i21 是最新的成果,它是 20 位的,我很高兴地宣布它的速度是: 500MIPS.
每个处理器都有它自己的 Forth 语言,目标非常简单:使硬件与软件结合的复杂性最小。只要我没有看到其它的人在做这件事情,只是嘴上说说的人不算,没有人真的在使复杂性最小方面做任何事情,那就是我需要尽力去做的。
我们正在建立一种文化,它不能够抗拒比如 Y2K 这样很小的灾难。一但我们失去了十亿美元的封装厂、一但我们失去了由数千人组成的程序员团队,我们还能够重新建立起来吗?不用关心能不能重建的事情?计算机值得我们的社会这样投入吗?它本来可以简单得多。如果它更简单,那么我对技术在未来不确定社会中更持久这样的事情就会更有信心。
把事情弄复杂好象是一个倾向。人们喜欢把它们弄得复杂,这种情况随处可见。你可以在电视节目中是看到,可以在市场的产品中看到,也可以在网站网页上看到,简单地表示信息不足,你把它弄得精彩。我想可能有一个最佳的复杂度是人脑能够设计它们。你把事情弄简单了,大众会觉得无聊,但是你把它们弄得太复杂,一样会失去大众。
我从来没有因为简单而觉得无聊。给我做一件事情更简单的方法,我就会迫不急待地去得到它。但是在汽车、飞机、航天器和大量的复杂设备方面却不是这样。 Forth 不需要这么复杂。经典的 Forth 是从简单开始的,它慢慢地被复杂所包围。在 Forth Inc. 里,这都成了公司的文化。我们有了一个软件包,我们销售它、我们拓展它、我们钟情于它。当我离开 Forth Inc 之后,就有了一个简化的机会, cmForth 就是成果。不幸的是 cmForth 并没有广泛应用,所以我很难告诉你它能够工作得多好。
在我的记忆中, ShBoom 与 cmForth 一样好。我做的最大应用是使视频能够工作并开始客户芯片设计包的过程,所以我知道使用 ShBoom 的捷径。
i21 ,我现在使用的是带颜色的 Forth ,还没有用它做有效的应用。它极端地简单,它比任何的前辈都简单。我想说说为什么。
i21 本身是一个简单的处理器,但也没有做到可能的最简化,因为好象我们能出售这个处理器的唯一希望就是它的速度,所以我增加了许多的复杂性以满足速度的要求。我希望我得到了某种平衡的理由。 500 MIPS 是一个诱人的速度。我们只能使这个速度保持片刻,但某一天它会变得平滑。问题是没有哪些应用需要这样的速度,或者说没有大量的处理器要求这种速度。它很难销售。
我最近已经看到的最有趣的应用是 SETI 的家庭计划,在这个计划中,你可以从 Arecebo 网站上下载数据并在自己的 PC 机上处理两个星期,然后把结果传回去与研究机构分享。所以一个快速的处理器可以很容易在那里销售和应用。可能 SETI 分布式处理器系统有一些事情可以做。
一但你得到了一个处理器,你希望它适合 Forth。之后, Forth 应该怎样开发这个处理器呢?这个问题引出了 Forth 是什么的问题。我期待有人能够告诉我答案。我不断在问, Forth 是什么?
Forth 是高度因子化的代码。我不知道除了说 Forth 是定义之外还能说什么。如果你有了许多短小的定义,那你就是在编写 Forth 程序。为了写出许多短小的定义,你需要一个堆栈。堆栈并不流行,我很奇怪为什么它没有流行。许多压力来自于既得利益者,他们不喜欢堆栈,他们喜欢寄存器。堆栈并不是能够解决所有问题的一个概念,但它的确非常非常有用,特别是对于信息屏蔽,并且你需要两个堆栈。
这些思想到现在已经有 30 多年了,我已经谈论它们 30 多年了,可现在被人们接受的程度与 30 年前没有什么差异,可能随着工业的发展,对它们的关注反而是更少了。
Forth
Defintions
Stacks
这就是 Forth 。需要支持定义。
什么是定义?非常经典的说法是一个定义就是用冒号说明一些事情、字、在什么地方结束定义等等
: some ~~~ ;
我总是试着通过缩写来说明其中的意义,不论你这里写下的字串是为了更常用或者是更方便。但它并不严格地是缩写,它可以有一个或者两个参数。这里有一个程序员相关的问题,也可能是与所有程序设计都有关的问题:我们给一个子程序输入了太多的参数。看看许多 C 语言程序,它们很可笑。程序中的每件事情都通过调用序列传递,而子程序只是一个哑巴。
一个 Forth 字不应该有多于一个或者两个参数。人们处理堆栈时有这么多的麻烦来处理堆栈,绝对不应该有多于 3 至 4 个元素的深度。
我们现在的具体做法是使一个字(:)以红色显示。通过这种方式你就不需要再使用冒号了,这不仅减少了你存储源程序文本的大小,而且也使得后面的工作极为清晰。红色的字是被定义的字:
some ~~~
定义是绿色的,在定义之中可以有一个分号表示返回,但是并不结束一个定义。如果需要,你可以有多个返回,你还可以有多于一个入口点。没有冒号定义,这个定义就会落入另一个定义,并在下一处返回;我们已经没有表示编译模式和执行模式的状态。你或者是在运行绿色或者是在运行白底黑字。黑色意味着执行,绿色意味着编译,红色意味着定义。
这对我来说更简单也更清晰,这是一个崭新的概念,但是还没有被广泛接受,不过我们马上就会看到。
但是对于堆栈来说,堆栈应该很浅。在 i21 芯片上,堆栈只有 18 个元素的深度,这个尺寸的选择是一个有效的数字。
处理这个堆栈的字是 DUP 、 DROP 和 OVER ,没有别的了。 SWAP 也很方便,你需要它,但它不是一个机器指令。但是,我们没有 PICK 和 ROLL ,没有什么复杂的操作可以使你能够按索引来访问元素。前两个元素是你需要关心的堆栈部分。当然。在一个芯片上,它们是两个 ALU 的输入端,这也是硬件相关的。
其它的元素也在堆栈上,因为你把它们放到了那里,你准备以后当堆栈回到那里时再处理它们。它们不在那里是因为你正在使用它们。你不想堆栈上的东西太多,因为你很快就会忘掉他们的意义。
所以,那些画堆栈图示的人马上应该明白他们正在做着不正确的事情,哪怕是很常用的短小的图示。这种方法是:如果你定义了一个字,你还写上一个说明来显示堆栈的影响,比如说 F 和 x 和 y
F ( x - y )
过去,当我把堆栈弄得太复杂时我也使用这种方法,但是现在不再这样了。我们不需要这类的信息,它应该能够从源代码中很容易地得到,或者应该在另外的地方编写文档。
所以我使用的堆栈操作非常有限,而条件操作也是这样,在经典的 Forth 中我们使用 IF ELSE THEN ,现在我排除了 ELSE 。
我不认为 ELSE 的用途能够与介绍它的复杂性相比较,你可以通过我的代码明白这一点。我将把 IF 和一个分号一起使用,我将在一个点上退出定义或者继续。
IF ~~~ ; THEN
我有两条分支,但是我用了“分号并不结束一个定义”的新特点。
正文
1x Forth (1)2005-08-05 13:26:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/forth/3449.html
阅读(2791) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论