第四,通过我读过的几本手册,通常用非常低级的术语来定义,通常是在装配中。以这种方式定义Forth对于理解实现是非常反直觉的,并且真正仅仅是为了将Forth的基于汇编或其他基于低级语言的端口编写到不同的系统/体系结构中。
这可以在着名的JonesForth中看到,在那里他实现了在装配速度时不必实现的单词,并且模糊了装配结束和Forth开始之间的界限。
Starting Forth是一个更好的工作,以一种更容易理解的方式解释Forth,但是,因为它适用于教授Forth本身,所以在Forth解释器/编译器的实际功能方面并不是非常简洁,并且再次模糊了Forth实现。
我真正想要的是简明扼要地说,Forth实施的功能是什么?什么是Forth如何运作的高级模型?到目前为止我明白了:
这是我真正可以肯定的,因为在ANS FORTH-83需要的字集中,INTERPRET没有被定义,但是在Starting Forth中,INTERPRET被定义为用于检查单词的字典的原始单词,如果不检查它是否是数字,如果不是中止。所有这些相互矛盾的信息,以及相反缺乏关于Forth的信息总体上使Forth的内容变得复杂。
任何Forth实现都可以在逻辑上划分为以下层(或机制):
每个下一层都基于(并使用)前面的层。还可以在引擎盖下使用一些额外的可重用模块(例如,堆栈,列表等)。
了解下一层需要了解前一层。在澄清了最初的问题之后,这个答案也可以扩展。
要么看FORTH作为用户/程序员(那里有Brodie书籍"Starting FORTH"和"Thinking FORTH"闪耀,或者看看Pelc的tutorial)。无需担心下一个,或装配,或任何“低级”。选择一些FORTH系统并使用它。
或者使用它的内脏,然后jonesforth是必须的。其他有趣的系统是lbForth(自托管,为几种不同的机器进行元编译),或ff(也是元编译,来自最小“伪汇编程序”源的boostraps)。
如果你不想搞乱低级别的细节,还有几个用C语言编写的FORTH。