博文

1x Forth (1)(2005-08-05 13:26:00)

摘要: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 ,它也可能是所有这类处理器中的第一个。它是一个 ......

阅读全文(2703) | 评论:0

Forth 常见问题解答(4)(2005-08-05 13:18:00)

摘要:
为什么使用 THEN 来结束一个 IF 结构 ?
什么是串线编码?不同的串线编码技术之间有什么差异?
有没有人写过把 Forth 编译成 Java 字节码的程序?
能够把 JAVA 字节码翻译成 Forth 吗?
没有操作系统的 Forth 怎么运行?
为什么不用 Forth 来编写一个操作系统呢?




为什么使用 THEN 来结束一个 IF 结构 ?
---------------------------------------------
一些人认为 Forth 使用 THEN 很别扭,而另一些人则不以为然。

按照 Webster's New Encyclopedic Dictionary 解释, then (adv.) 有以下的意义:

2b: following next after in order ...

3d: as a necessary consequence (if you were there, then you saw them).

Forth 的 THEN 具有 2b 的意义(接着、然后),而 Pascal 和其它程序设计语言则引用了 3d. 的意义(那么就、则)。

如果你不喜欢这样来使用 THEN ,可以按下列方式定义一个 ENDIF 替代:

: ENDIF POSTPONE THEN ; IMMEDIATE



什么是串线编码?不同的串线编码技术之间有什么差异?
---------------------------------------------------
串线编码是实现虚拟机解释器的一种方法,你可以从下列站点得到关于串线编码的更深入的解释:

<http://www.complang.tuwien.ac.at/forth/threaded-code.html>.



有没有人写过把 Forth 编译成 Java 字节码的程序?
-----------......

阅读全文(2597) | 评论:0

Forth 常见问题解答(3)(2005-08-05 13:17:00)

摘要:
哪些观点是口水大战?
商业化的还是自由软件的 Forth 系统?
自由软件的 Forth 是很差的 Forth ?
块还是文件?
我从哪里能够找到 C-to-Forth 编译器 ?
从哪里可以找到 Forth-to-C 编译器 ?
Forth 中有记录类型吗?




哪些观点是口水大战?
----------------------------------------------------
有些观点引起了长久和热烈的争论,参加的双方都在重复自己的观点而从来都想听别人是怎么说有,我希望你不要陷入其中。

这里我列出了一些针锋相对的观点,作为你阅读的起点,这样可以避免像他们一样地投身到战斗中去。



商业化的还是自由软件的 Forth 系统?
----------------------------------------------------
“付出什么,你就会得到什么。使用一个商业化的 Forth 系统,你可以得到商业化的文档和支持,我们需要一个商业化的系统,否则 Forth 就是死路一条”。

“我使用自由软件方式的 Forth 系统有良好的经验。我没有钱付给商业 Forth 系统。我想要源代码(有些商业系统不提供整个系统的源代码),文档和支持很差的商业软件开发者也不乏其例。没有自由软件方式, Forth 就是死路一条 ” 。



自由软件的 Forth 是很差的 Forth ?
----------------------------------------------------
“任何人都可以写一个很坏的 Forth ,然后没有文档和支持地发布出来;使用了这样的系统之后,没有人再想用 Forth 做任何工作。自由的 Forth 败坏了 Forth 的名声,自由的 Forth 抢了开发者的生意。 ”

“许多人通过 fig-Forth 学习 Forth ,确实有优秀的自由软件 Forths 。许多成功的语言开始都(并且现在仍然)提供自由软件版本。没有自由......

阅读全文(2277) | 评论:0

Forth 常见问题解答(2)(2005-08-05 13:16:00)

摘要:
Forth 有哪些标准?
什么是 RFI ?
Forth 有编码规范吗?
我在管理堆栈时遇到了麻烦,是不是应该使用全局变量?
什么是 Forth 兴趣组织?
Chuck Moore 是谁?他现在做什么?



Forth 有哪些标准
-------------------------------------
Forth 的美国国家标准是 ANSI X3.215-1994, 作为一个权威的 Forth 标准在国际上被广泛接受 ("ANS Forth") 。 这个标准也被国际标准化组织所接受 (ISO/IEC 15145:1997).

IEEE Standard 1275-1994, 称为“开放式固件”标准,派生于 Forth ,已经被 Sun Microsystems 、 HP 、 Apple 、 IBM 等公司做为编写引导程序和固件的公司遵循标准。参见 <http://playground.sun.com/1275/home.html>.

早先的 Forth 标准包括 Forth-83 Standard 和 Forth-79 Standard ,这些都是 Forth Standards Team 提出的,而更早的 FIG-Forth 标准没有像这样正式发布,但它却是许多年里 Forth 的“事实标准”。

Forth STANDARDS 自 1978 年以来 Forth Standard Team 发布了 Forth 79 和 Forth 83 标准, ANS Forth 文档 X3.215-1994 是 X3J14 技术委员会发布的。最近的标准 ANS Forth 定义了一系列的核心字,并给这些字的实现方式以很大的自由度。 ANS Forth 可以支持的硬件范围比以前的任何 Forth 标准都大,可能也比任何其它程序设计语言大,参看 <ftp://ftp.uu.net/vendor/minerva/uathena.htm> 得到最新信息。标准的拷贝为 193 美元,但是 ANS Forth 草案是免费的(有一些版权的限制),可以通过 FTP......

阅读全文(3231) | 评论:0

Forth 常见问题解答(1)(2005-08-05 13:15:00)

摘要:本文译自 comp.lang.forth Frequently Asked Questions (1/6): General/Misc

原文整理 M. Anton Ertl, anton@mips.complang.tuwien.ac.at

Forth 是什么?
Forth 是怎么来的?
Forth 用在什么地方?为什么要使用 Forth?
Forth 过时了吗?
Forth 比 C 语言还要小、还要快吗?



Forth 是什么?
----------------------------------------
Forth 是一个基于堆栈的、可扩展的、没有类型检测的语言,可能最有名的是它的“逆波兰”(后缀)算术表达法,使用过 HP 计算器的人应该对这种方法比较熟悉:在 Forth 中把两个数相加,你需要输入 3 5 + 而不是 3 + 5 。

在 Forth 中,基本的程序单位是“字”:字可以是一个命名的数据项、子程序或者操作符。 Forth 的编程就是用已经存在的字来定义新的字。

Forth 语句:

: SQUARED DUP * ;

定义了一个新的字 SQUARED ,它的功能是对一个数求平方(通过自身相乘)。由于全部的语言结构都是由字组成的,应用程序员可以根据需要“扩展” Forth 以加入新的操作符、程序结构或者数据类型。 Forth 的“内核”包含了用于整数、地址、字符和布尔值的操作符,字符串和浮点操作可以选择加入。



Forth 是怎么来的?
-------------------------------------
Forth 这个名字的本意是想说明这个软件是为第四代(下一代)计算机设计的,那正是 Moore 通过分布式小型计算机所看到特色。不过,当时他使用的操作系统限制文件名只能少于 5 个字符,所以字母 'U' 就被去掉了。

直到 70 年代未期,还是使用着 FORTH 这种全部大写的字母,因为那个时候流行着只支持大写字母的 I/O 设备。随着小写 I/......

阅读全文(2604) | 评论:0

维基中的Forth(2005-08-05 13:00:00)

摘要:http://zh.wikipedia.org/wiki/Forth

Forth
维基百科,自由的百科全书
Forth是六十年代末期,由Charles H. Moore发展出来的一种程序设计语言,允许使用者将现有的简单叙述,定义成较复杂的叙述。

FORTH采用以词典为核心,以堆栈为基础的高度模块化结构,是一种将解译程序和组译程序合并运用的双态系统。使用FORTH,可在编译过程中检测差错,并且逐步增加编译程序代码部份。利用FORTH所写的程序几乎不必任何修改,就能在各类计算机运作;甚至在特别设计的电脑上可以完全放弃组合语言,直接由FORTH转化成机器语言,就好像现代的Java machine。台湾的黄大一是这方面的专材,并在1980年代后期开发过两部完全使用FORTH的嵌入式系统。同时,使用者也可以自由使用自己定义的运算功能,加入编译器 (compiler) 中,使Forth语言更有弹性。

最常用在内建程序,以及系统与过程控制。现在,它也用在微计算机上,主要运用在数据搜集与处理、图形处理、专家系统,以及实时流程控制等。

[编辑]
Forth语言的Hello World程序
下面是一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:

." Hello, world!" CR
[编辑]
从程序员的角度看Forth
用Forth的“追随者”的话来说,Forth是一种“人机一体”的语言。在程序员的意识中必须要有一台逻辑上的机器(可能是实际的芯片,也可能是虚拟机)。这台机器拥有两个堆栈(数据堆栈和返回堆栈),一个词典(在Forth中的词(word)对应于高级语言的函数或者子程序,若干的词构成词典。)一个内部解释器和一个外部解释器。

和Forth语言一样,也是基于堆栈的程序设计语言还有PostScript。

......

阅读全文(2139) | 评论:0