Bar*_*own 35 interpreter operators forth vm-implementation
我对实现Forth系统感兴趣,因此我可以获得构建简单VM和运行时的一些经验.
当在Forth开始时,人们通常首先了解堆栈及其运算符(DROP,DUP,SWAP等),因此很自然地将它们视为原始运算符之一.但他们不是.它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符.后来人们学习了存储(!)和获取(@),可以用来实现DUP,SWAP等等(哈!).
那么原始运营商是什么?哪些必须直接在运行时环境中实现,可以从中构建所有其他环境?我对高性能不感兴趣; 我想要一些我(和其他人)可以学习的东西.运营商优化可以在以后进行
(是的,我知道我可以从图灵机启动并从那里开始.这有点极端.)
编辑:我的目标是类似于引导操作系统或新编译器.我至少需要做什么才能实现,以便我可以用这些原始构建块构建系统的其余部分?我不会在裸硬件上实现它; 作为一项教育活动,我会编写自己的最小虚拟机.
pli*_*nth 23
这个主题涵盖了您的确切问题.这是一个完整文档的汤到坚果实现.
我在大学期间编写了一个针对68K的子程序.我定义了运行时环境和字典格式,然后写了一些C代码,它启动了一个加载了默认字典的Macintosh应用程序,填充了一些I/O向量并运行了代码.然后我拿了Leo Brodie的书" Starting Forth",开始用68K汇编语言实现基本词典.我从算术/逻辑词开始,然后控制结构然后是词定义/操纵词.我的理解是,至少你需要@,!,+, - ,*和/.其余的可在这些方面来实现,但是这就像试图基于写一个完整的图形库SetPixel和GetPixel:它会工作,但让人惊讶,为什么呢?
我喜欢这个过程,因为有一些非常有趣的谜题,比如DOES>完全正确(一旦我有一个可靠的DOES>实现,我创建的闭包变成了微小的,少量的代码).
Dav*_*ley 10
很久以前,我有一本名为"Threaded Interpretive Languages"的书,由Byte发表,我在Z80大会上讨论了如何实现类似Forth的语言(我认为它们从未称之为Forth).
你可能没有Z80方便,或想要一个,但这本书可能是有益的.
comp.lang.forth上的这篇文章列出了一些"最小的Forths".
http://groups.google.com/group/comp.lang.forth/msg/10872cb68edcb526
为什么我知道这个?我的兄弟Mikael写了#3,他还写了一篇关于制作"最小Forth"的文章(虽然是瑞典文).如果我没记错的话,他想获得一套可以用硅制造的最小的算子.