Forth

Forth编程范型| 面向堆栈、过程式、反射式、串接

|

設計者| Charles H. Moore
发行时间| 1970年，​55年前​（1970）
型態系統| 无类型
文件扩展名| .fs, .fth, .forth
網站| forth-standard.org
主要實作產品
SwiftForth (Forth, Inc.)
Gforth（英语：Gforth） (自由软件)
VFX Forth (微处理器引擎)
啟發語言
Burroughs大型系统（英语：Burroughs large systems）, Lisp, APL
影響語言
Factor, Joy, PostScript, RPL（英语：RPL (programming language)）, REBOL

Forth是1960年代末期，由查理斯·摩爾发展出来在天文台使用的電腦自動控制系統及程序设计语言[1]，允许使用者很容易組合系統已有的簡單指令，定义成為功能较复杂的高階指令。由於其結構精簡、執行快速、操作方便，廣為當代天文學界使用[2][3]。八十年代以後，有愛用者成立Forth Interest Group在世界各地推廣，並陸續在各类计算机上建立Forth系統及標準的语言。

## 简介

[编辑]

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类系统。

## 引用

[编辑]

1. ^ 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）.
2. ^ NASA applications of Forth (original NASA server no longer running, copy from archive.org)
3. ^ Space Related Applications of Forth.  [2007-09-04]. （原始内容存档于2010-10-24）.
4. ^ [1]（页面存档备份，存于互联网档案馆）
5. ^ [2]（页面存档备份，存于互联网档案馆）
6. ^ HTTP链接（页面存档备份，存于互联网档案馆）
7. ^ 镜像站点（页面存档备份，存于互联网档案馆）

## 外部連結

[编辑]

* FIG（页面存档备份，存于互联网档案馆），Forth兴趣小组，是致力于教育和推广Forth编程语言的一个全球性的非盈利组织。
* Forth公司主页（页面存档备份，存于互联网档案馆），上面有很多经典的Forth学习资料，历史和教程。
* 中国Forth程序员，Forth程序员社区和资料站。
* Starting Forth（页面存档备份，存于互联网档案馆），Leo Brodie写的Forth语言的入门教材，该书的特色是使用大量生动的图片来说明程序执行的流程。

* 查
* 论
* 编

编程语言

范型|

| 过程式|

* FORTRAN
* COBOL
* JOVIAL
* ALGOL 60
* JOSS（英语：JOSS）
* BASIC
* PL/I
* MUMPS（英语：MUMPS）
* ALGOL 68
* Forth
* Pascal
* Turbo Pascal
* C
* Modula-2
* Ada 83
* occam
* Oberon
* Go
* Ballerina（英语：Ballerina (programming language)）

|

面向对象|

* Simula 67
* Smalltalk
* Objective-C
* Eiffel
* Object Pascal
* Delphi
* Self
* CLOS
* Visual Basic
* Gambas
* Ada 95
* Java
* C#
* Vala
* Crystal（英语：Crystal (programming language)）

多范型|

* C++
* Modula-3
* Dylan
* Python
* Lua
* JavaScript
* Ruby
* D
* Factor
* Scala
* F#
* Haxe
* Nim
* Chapel（英语：Chapel (programming language)）
* Rust
* Kotlin
* Dart
* Swift
* Zig
* Ring（英语：Ring (programming language)）
* V（英语：V (programming language)）
* Mojo
* Carbon

函数式|

* LISP
* Scheme
* Common Lisp
* Clojure
* Logo
* APL/`J`
* ML
* Standard ML
* OCaml
* Erlang
* Elixir
* Haskell
* SAC
* Agda
* Idris
* jq
* Gleam（英语：Gleam (programming language)）

逻辑式|

* Prolog
* Datalog
* Mercury
* AnsProlog
* ProbLog（英语：ProbLog）

脚本语言|

| 动态语言|

* SNOBOL
* Icon
* REXX
* Perl
* Raku
* Tcl/Tk
* Python
* Lua
* Ruby
* PHP
* Hack
* CFML（英语：ColdFusion Markup Language）
* REBOL
* Red（英语：Red (programming language)）
* Io
* Julia
* jq

|

Shell语言|

* Unix shell
* sh/ash/dash
* csh/tcsh
* ksh
* bash
* zsh
* rc（英语：rc (Unix shell)）
* sed
* AWK
* PowerShell

ECMA-262|

* ECMAScript
* JavaScript
* TypeScript
* CoffeeScript/LiveScript（英语：LiveScript (programming language)）
* Elm
* PureScript
* Reason
* Bosque（英语：Bosque (programming language)）

特定平台|

| .NET|

* C#
* C++/CLI
* F#
* PowerShell
* VB.NET
* Small Basic

|

JVM|

* Java
* AspectJ（英语：AspectJ）
* Scala
* Clojure
* Groovy
* Kotlin

特定领域|

| 科学计算|

* Speakeasy（英语：Speakeasy (computational environment)）
* IDL
* GDL
* Maxima
* Maple
* MATLAB
* Octave
* Scilab
* Wolfram
* R
* Yorick（英语：Yorick (programming language)）
* SageMath
* Julia

|

GPU计算|

* Cg/HLSL
* GLSL
* Brook（英语：BrookGPU）
* OpenCL
* SYCL
* CUDA/PTX（英语：Parallel Thread Execution）
* Futhark
* SPIR-V（英语：Standard Portable Intermediate Representation）

数据查询|

* CODASYL（英语：CODASYL）
* SQL
* PL/SQL
* T-SQL
* SQL/PSM（英语：SQL/PSM）
* xBase（英语：xBase）
* XPath
* XQuery（英语：XQuery）
* GraphQL

可视化|

* Prograph（英语：Prograph）
* Simulink
* LabVIEW
* Orange（英语：Orange (software)）
* KNIME（英语：KNIME）
* Scratch
* Snap!
* App Inventor
* Power Fx

传媒设计|

* SuperCollider
* Pure Data
* AviSynth
* Processing
* ChucK

其它|

* 汇编语言
* APT（英语：APT (programming language)）
* GPSS（英语：GPSS）
* CLIPS（英语：CLIPS）
* AMPL
* dc
* yacc
* make
* PostScript
* XSLT
* LLVM IR
* WebAssembly
* 深奥的编程语言

* 目录
* 列表
* 历史
* 比较（英语：Comparison of programming languages）
* 时间线

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板