Forth
Forth是1960年代末期,由查理斯·摩尔发展出来在天文台使用的电脑自动控制系统及程式设计语言[1],允许用户很容易组合系统已有的简单指令,定义成为功能较复杂的高阶指令。由于其结构精简、执行快速、操作方便,广为当代天文学界使用[2][3]。八十年代以后,有爱用者成立Forth Interest Group在世界各地推广,并陆续在各类电脑上建立Forth系统及标准的语言。
编程范型 | 面向堆栈、过程式、反射式、串接 |
---|---|
设计者 | Charles H. Moore |
发行时间 | 1970年 |
类型系统 | 无类型 |
文件扩展名 | .fs, .fth, .forth |
网站 | forth-standard |
主要实现产品 | |
SwiftForth (Forth, Inc.) Gforth (自由软件) VFX Forth (微处理器引擎) | |
启发语言 | |
Burroughs大型系统, Lisp, APL | |
影响语言 | |
Factor, Joy, PostScript, RPL, REBOL |
简介
Forth以可扩展的词典为核心,采用以堆栈为基础的高度模块化结构,是一种将解译器和编译器合并运用的双态系统。使用FORTH,可在编译过程中检测差错,并且逐步扩充编译程序代码。利用标准Forth所写的程序几乎不必大修改,就能在各类电脑运作;甚至在特别设计的电脑上可以完全放弃组合语言,直接由Forth转化成机器语言,就好像现代的Java虚拟机。同时,用户也可以把自己定义的运算功能加入编译器中,使Forth语言更有弹性。
Forth是一种可扩展的,交互式的语言。亦适用于小型的嵌入式电脑,现在它几乎可以在任何主流的晶片上解译和编译,甚至已有多种可直接运行Forth指令的晶片。在电子表格,专家系统,多用户数据库,和分布式实时控制系统中有广泛的应用。表面来看,Forth是一种基于堆栈的概念机。例如要计算(3+4)*5,程序就是:3 4 + 5 *。首先把3和4入堆栈,然后调用+子程序,把堆栈的最顶上两个元素取出(也就是3和4)进行加法运算,然后把结果入堆栈,然后把5入堆栈,然后调用*子程序,把最顶的2个元素,也就是7和5取出,并进行乘法运算,然后把结果入堆栈,最后的。把结果从堆栈中取出打印。事实上这是一种最简单有效的概念机。当然Forth远远不止这些。
最常用在内建程序,以及系统与过程控制,它也用在微电脑上。主要运用在数据搜集与处理、图形处理、专家系统,以及实时流程控制等。
样例程序
下面是一个在标准输出装置上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
: run-hello \定义一个单词,名字叫run-hello
." Hello, world!" CR ;
run-hello
只有在编译模式,也就是在定义一个单词的中使用."指令,才能输出字符串。
从程序员的角度看Forth
用Forth的“追随者”的话来说,Forth是一种“人机一体”的语言。在程序员的意识中必须要有一台逻辑上的机器(可能是实际的晶片,也可能是虚拟机)。这台机器拥有两个堆栈(数据堆栈和返回堆栈),一个词典(在Forth中的词(word)对应于高级语言的函数或者子程序,若干的词构成词典。)一个内部解释器和一个外部解释器。
和Forth语言一样,也是基于堆栈的程式设计语言还有PostScript。基于堆栈的工具还有linux下的计算器dc,在其内部是通过堆栈实现的。
使用Forth开发应用程式与使用其他语言开发应用程式的感受有很大的不同。Forth的一切都是透明的,用户可以看到每一个功能的实现原理和过程,正是由于这一点,Forth可以作为学习操作系统及编程的非常好的工具。关于Forth编程的特点有一个较为贴切的描述:"如果C语言给你的感觉是:它是最好的程式设计语言,那么使用Forth给你的感觉则是:自己是最好的程式设计师。”
实现
在微软的windows操作系统下,一个很好的Forth系统是Win32Forth。详见win32forth[4] 。
GNU/Linux系列操作系统下,GForth是GNU对ANS Forth的一个实现,可在gnu网站[5]下载(另有HTTP链接[6],GNU软件一般推荐通过镜像站点[7]下载)。下载后,使用通常的configure; make; make install
指令即可编译安装。GForth还可以内建在著名的文本编辑器Emacs中使用。若出现问题,请阅读BUILD-FROM-SCRATCH
文件。
GForth同时适用于其他系统,例如OS X等UNIX类系统。
引用
- ^ C. H. Moore; E. D. Rather; D. R. Colburn. The Evolution of Forth. ACM SIGPLAN Notices. ACM SIGPLAN History of Programming Languages 28 (3). March 1993 [2021-04-04]. (原始内容存档于2011-08-22).
- ^ NASA applications of Forth (original NASA server no longer running, copy from archive.org)
- ^ Space Related Applications of Forth. [2007-09-04]. (原始内容存档于2010-10-24).
- ^ [1](页面存档备份,存于互联网档案馆)
- ^ [2](页面存档备份,存于互联网档案馆)
- ^ HTTP链接(页面存档备份,存于互联网档案馆)
- ^ 镜像站点(页面存档备份,存于互联网档案馆)
外部链接
- FIG(页面存档备份,存于互联网档案馆),Forth兴趣小组,是致力于教育和推广Forth编程语言的一个全球性的非盈利组织。
- Forth公司主页(页面存档备份,存于互联网档案馆),上面有很多经典的Forth学习资料,历史和教程。
- 中国Forth程序员,Forth程序员社区和资料站。
- Starting Forth(页面存档备份,存于互联网档案馆),Leo Brodie写的Forth语言的入门教材,该书的特色是使用大量生动的图片来说明程序执行的流程。