标题：Forth语言
Forth 的来历
按照 Forth语言的发明人 Charles Moore（ Chuck ）的说法： 
我第一次把各种想法组合成一个整体之后，它在“第三代计算机” IBM1130 上工作得如此有效，以致于我认为它是“第四代语言”，理所当然地应该被称为 FOURTH 。不过，当时的 IBM 计算机只允许 5 个字符的标识符。所以 FOURTH 变成了 Forth ，这是一个非常好的的文字游戏。
历史
Forth 语言是 60 年代发明的，当时 Moore 在斯坦福线性加速器中心做计算机程序员工作，后来变成了一个自由工程师。当时的工程技术人员为了控制编译程序必须学习大量的方法，包括连接器、汇编器、伪指令以及高级语言，开发这个新工具的目标就是为了克服这些问题。 
第一个称为 Forth 的程序大约是在 1970 年编写的。第一个完整的实现是 1971 年在一台 PDP-11 上完成的，用于亚利桑那州国家射电天文台的 11 米射电望远镜。这个系统的责任是定向和跟踪望远镜，收集数据并记录到磁带上，支持一个交互式的图形终端，供天文学家分析以前记录的数据。系统的多任务特点允许这些功能同时执行，没有时间上和其它方面的冲突。 
这个系统取得了巨大的成功，世界各地的天文学家开始请求提供软件拷贝。Forth的使用范围迅速也扩大，国际天文学会于 1976 年接受了 Forth 作为标准语言。 
这个应用的成功还促使 Moore 和 Elizabeth Rather （ ("Bess") 于 1973 年成立了 Forth, Inc. 公司，目标是开发这种语言的商业应用。 Forth, Inc. 在小型机上开发了多用户的 Forth 版本，可以用于从数据库到图像处理等科学和应用领域。和第一个应用一样，它们需要不同工具的组合。 
1977 年，公司为刚刚出现的 8 位处理器开发了一个称为“microForth”的版本，对小型机上的“miniForth”做了扩展和补充。1979 年，称为“PolyForth”的产品替代了这些系统。从此以后，它就成了市场上销售量最大的 Forth 系统。 
“microForth”系统在美国、欧洲和日本的嵌入式微处理器应用中取得了成功，由此产生了欧洲 Forth 用户团体 (EFUG) ；1978年，位于北加利福尼亚的计算机爱好者成立了 Forth 兴趣组织 (FIG). 
FIG 从天文台得到 Forth 系统，再用这个系统开发出一个简单的模型，然后在几个不同的系统上实现（那当然是得到了 Forth,Inc 的许可之后）并以非常低的价格销售。这个模型后来变成了著名的 FIG-Forth 模型。所有这些使得对 Forth 的兴趣迅速增大。 FIG 目前在 15 个国家中有 60 个分支。
特点
Forth 是一个交互式的程序设计环境，最初是为程序员在小型和微型计算机上开发应用程序而设计的。最早用于科学和工业应用，比如仪器、机器人、过程控制、图形和图像处理、人工智能和商业应用。 Forth 的主要优点是软件开发快速、交互式、计算机硬件的高效使用等。 
Forth 常常被作为一种语言，这当然也是它最常见的方面，然而 Forth 所提供的功能比传统的程序设计语言要多。传统的高级语言工具包含有许多分离的工具（编译器、编辑器、汇编器等等）， Forth 把它们融为一体。与传统的高级语言相比，它是经过深思熟虑的，完全没有传统高级语言那么复杂的语法特性。 
最早实现的 Forth 是一个独立的系统，它包含独立操作系统的一般功能，还包括有编辑器、编译器、汇编器、调试器和其它工具。一个单一的、简单的、一致的规则支配这些能力。今天，尽管还能在许多处理器上见到独立的版本，但更多的版本是与 MSDOS 、WINDOWS、UNIX 一类操作系统协同工作的。
起源
Forth 并不起源于其它已有的程序设计语言，所以它的外观和内部特点对于新用户来说是特殊的。但是 Forth 的简单性、高度模块化和交互式特性可以弥补初学者的陌生感，使得 Forth 非常易于学习和使用。一个新的程序员通常需要花一些时间来掌握 Forth 巨大的命令集，通过一个月左右的全面使用，程序员就可以理解它的整个内部工作机理，所学到的东西要比传统操作系统和编译器多得多。 
Forth 与传统语言最大的不同是它的可扩展性。 Forth 的编程过程就是定义新的字，字实际上就是语言的新命令。字可以用一系列以前定义的字来定义，这个过程与教育孩子的过程相似：我们总是用孩子们以前理解的概念来教给孩子们新的概念，而这些字被称为“高级定义”。同样，新的字也可以用汇编代码定义，因为在多数 Forth 实现中都包括宿主处理器的汇编器，而这些字被称为 CODE 字。 
可扩展性的结果是我们在开发一个应用的同时，也间接地开发了一个特殊的、针对这一类应用的“面向应用的语言”，它可以用于或者经过修改之后被用于相似的应用。 
Forth 的可扩展性并不仅仅是为语言自身增加新的命令，所以不要把定义字与传统高级语言定义函数、过程等同。可扩展性还能够创建一个可以定义其它字的字，这种字被称为“定义字”。在创建这样一个定义字的时候，程序员能够指定它所创建的字在编译时间、运行时间或者这两种状态下的特殊行为。这个能力允许我们定义特殊的数据类型，并对其行为和结构实施完全的控制。又由于这种字的运行时间行为可以用高级语言或者汇编语言来定义，所以由定义字创建的字将具有与其它 Forth 字一样的性能。系统也允许我们增加一个新的“编译指示符”以实现特殊类型的循环或者其它的控制结构，比如CASE 结构。
编程
Forth 语言和英语非常相似，它的基本元素是已命名的数据项、过程，以及创建用户化数据项的定义字的能力。过程和定义字可以使用以前定义的字或者汇编代码来定义，它们与其它语言的子程序相似，也与其它语言的命令等效。 Forth 允许我们在键盘上打入一个函数的名字，这个函数将被立即执行。然而，如果我们把功能的名字放到定义中，将编译成对于这个函数的引用。 
高级字是由其它字的集合来定义的，我们可以把这个过程想象成是其它语言的宏或者词典中的英语定义。新的字被加入到它们可以使用的存储器中，其定义被加入到字典中。在一个 Forth 字的命名规则中，只有很少的几个字符不能作为命名字符使用。许多程序组织使用更好的命名约定，通过可打印的字符以增加程序的可读性。 
当遇到一个字的时候， Forth 就通过字典搜索希望找到这个字的定义，如果找到，这个字定义的功能或者被立即执行，或者作为引用而被编译到新的定义中。然而，如果在字典中没有找到这个字，系统就试着把它转换成一个数。如果转换成功，就把它放在堆栈上。如果不能转换成数字，就显示这个字并打印出一个错误的信息来报告这个字是系统所不知道的。
设计原理：
· 字必须在引用之前被定义； 
· 逻辑流限制只有顺序、条件和循环，有专门的字用于实现常用的程序控制结构； 
· 程序员使用许多小的、独立的模块（字）来实现最大的可测试性和可靠性； 
这种方法有两个明显的优点 
· 新的字总是用以前定义和测试过的字来构造，所以调试更容易。模块可以单独执行以测试它的功能； 
· 固有的模块性使 Forth 成为一个“设计性语言”，允许自顶向下的设计同时保持自底向上的测试。一个字可以在不同的程序中使用，但是它的功能只需要定义一次； 
这些都保证了 Forth 软件能够快速和有效地被开发，同时，如果管理得当，也可以作为自身文档的基础。
Forth 主要元素：
· 一个字典； 
· 两个堆栈，一个是参数栈，另一个是用于嵌套的返回栈； 
· 键盘（输入流）解释器； 
· 一个汇编器； 
· 虚拟存储；
用 Forth 开发的项目
以下是一些使用 Forth 开发的项目 
Atari 的许多投币游戏机都是用 Forth 开发的。他们相信开发高性能代码的最快方法是使用 Forth ，加上使用汇编语言来重写最内层的循环。 
按照最近与著名的 Infocom 高级游戏开发者的谈话，他们的游戏解释器也是用 Forth 写成的。 
Unison World 为 CP/M 操作系统开发了许多游戏，全部都是用 FIG-Forth 编写的。按他们技术总监 Marc de Groot 的说法，把一个基于 Z80 的游戏移植到 6502 或者 MC6809 上，典型的时间不多于 3 个月。 
美国 Federal Express（联邦快递）公司的手持式行李分捡系统的程序是用 Forth 编写的。项目经理 Gene Farrar 说，他可以按需要在几个星期内升级新固件，相比而言，其它的小组维护 C 语言代码则至少需要 6 个月的时间。 
1990 年 11 月哥伦比亚航天飞机的 4 个载荷中有 3 个是用 Forth 编程的。按设计团队之一Johns Hopkins University's Applied Physics Laboratory的 John Hayes 说法，他们选择 Forth 来解决飞行中的硬件问题，灵活性是一个主要的因素。 
SUN 公司把 Forth 用于它的工作站可编程 Boot ROM 中，以每天 500-1000 台的速度发货，是可编程 Forth 系统中数量最大的。 1994 年 IEEE 1275-1994 将 Forth 用于 BOOT （初始配置） 固件的标准，这也是 POWER PC 通用硬件平台的基础。 
在电影《终结者 II ：世界末日》中， Cyberdyne Systems T1000 系统的特技效果是基于 Morphing 软件包 Forth 产生的。