Forth/结构 vs. 实际执行操作的词语
我们已经描述了通过列出字典中先前定义的词语的顺序来创建词语定义的过程,这些词语将在给定的顺序中依次执行。可以想象调用一个“高级”词语,它反过来调用字典中较低级别的其他“高级”词语,这些词语再调用更低级别的其他词语。请注意,所有这些结构都是为了程序员、维护以及许多其他良好的理由而存在的。
除了组织先前定义的词语序列之外,显然还需要其他东西,而且不能无休止地进行下去。最终,我们必须找到一种不同类型的词语,它实际上可以执行某些操作:例如,将两个数字相加,移动一个值,或其他通常与“机器指令”相关的操作。这些被称为“机器码词”。在字典的底部,经典的 Forth 系统包含一组此类词语,这些词语实现了一个或多或少标准的“Forth 虚拟机”。通常,每个机器码词都是一个简短的汇编语言指令序列,它们实现了一个特定的标准函数,例如名为 SWAP 的参数堆栈操作。备选实现直接在硬件中实现机器码词,例如在 FPGA(现场可编程逻辑阵列 ~= 桌面硬件开发环境)的门中。
定义机器码词和“高级”词语的过程在形式上类似于欧几里得几何或伯特兰·罗素和阿尔弗雷德·诺斯·怀特海的《数学原理》[1]等形式化构建的数学系统中的“公理”和“定理”。在 Forth 字典的设计中,考虑了哪些公理是必需的,以及是否需要添加公理以允许先前未定义的操作进行。从这个意义上讲,添加一个新的机器码词,例如使 TCP/IP 通信成为可能,而这些通信无法使用基于先前机器码词集的结构来实现,这被视为在字典中添加一个“TCP/IP 通信公理”。
Forth 程序的执行通常在用户或其他进程请求执行特定词语时进行。如果这是一个“高级”词语,则会混合使用跟踪调用序列并有时到达机器码词并在“Forth 虚拟机”上执行指令。显然,当专门的硬件提供一组独特的机器码词以发送信号给奇异的专用处理器或 I/O 设备时,这种技术可以带来巨大的益处。然后添加标准机器码和更高级别的词语将提供一个环境,在该环境中,可以在其之上开发额外的“高级”词语以发挥独特仪器的功能。