我感兴趣的实施规系统,只是让我可以得到一些经验建立一个简单的虚拟机和运行时间。

开始时提出,一般学习有关的堆及其运营者(DROP,DUP,交换,等等。) 第一,所以很自然的想到这些作为是其中的原始经营者。但他们不是。他们每人可以分到经营者,直接操作的内存和堆的指针。后一个学习有关的商店(!) 和获取(@)它可用于实现DUP、交换、等等(ha!).

那么什么是原始经营者?哪些必须直接实施的运行环境从而所有其他人能够建立?我不感兴趣的高性能;我想要的东西,我(和其他人)可以借鉴。操作者优化可以晚一点。

(是的,我知道,我可以开始与一个图灵机,并从那里走。这是一个位于极端。)

编辑:我的目标是类似的引导操作系统或新编译器。我需要做什么做的实现,在最小,所以,我可以建造其余的系统出的那些原始的建设块?我不会实现这在裸露的硬件;作为一个教育运动,我会写我自己的小虚拟机。

有帮助吗?

解决方案

此主题涵盖您的确切的问题。这是一个汤到坚果的实施带有完整的文档。

我在大学期间写了一个针对 68K 的Frout子程序。我定义了运行时环境和字典格式,然后写了一些C代码,它引导了一个加载了默认字典的Macintosh应用程序,填充了一些I / O向量并运行了代码。然后我拿了Leo Brodie的书开始Forth 并开始在68K中实现基本词典汇编语言。我从算术/逻辑词开始,然后控制结构然后是词定义/操纵词。我的理解是,至少你需要@,!,+, - ,*和/。其余的可以用这些来实现,但这就像尝试编写基于SetPixelGetPixel的整个图形库:它会起作用,但是为什么呢?

我喜欢这个过程,因为有一些非常有趣的谜题,比如DOES>完全正确(一旦我有一个坚实的<=>实现,我创建的闭包变成了微小的,很少量的代码)。 / p>

其他提示

很久以前,我有一本名为<!>“的书,我认为是Byte发表的”Threaded Interpretive Languages <!>“,讨论了如何实现类似Forth的语言(我不认为他们在Z80组装中称它为Forth。

你可能没有Z80方便,或想要一本,但这本书可能很有启发性。

comp.lang.forth上的这篇文章列出了一些<!>“最小Forths <!>”;

http://groups.google.com/group/comp .lang.forth / MSG / 10872cb68edcb526

为什么我知道这个?我的兄弟Mikael写了#3,他还写了一篇关于制作<!>的论文。 “;最小Forth <!>”; (虽然是瑞典语)。如果我没记错的话,他想获得一套可以用硅片构建的最小算子。

我仍然不相信这个问题是完整的。例如,可以减少Plinth的指令;毕竟,*/可以用+-来实现,但是'+'可以用后继函数来实现(参见 Peano axioms 。)这会让你进入图灵机附近。你怎么知道在哪里停下来?

您可能还想看看Hans Bezemer的 4tH编译器

其中提出执行情况是使用不提供这种信息的文档?鉴于其性质,可能依赖于实现的。有一套标准的词在字典中,但它们是否得到了有会/C/或任何通过阐述不应该的问题,因为列为定义自可扩展的语言。

与您所说的相反,通常DROP SWAP等被认为是基本的Forth操作。原因是如果你使用你建议的内存操作来实现它们,整个系统会变得更多,而不是更简单。 在Forth和基础之间没有明显的区别。在80年代,字典搜索将是基本的,并以汇编语言编码以提高速度,而托管的现代Linux可以承担在所谓的高级别编码。 Forthers也倾向于常规地在汇编语言中重新编码高级汇编语言和高级语言。我是ciforth和yourforth的作者。 可以定义<!> lt; = as <!> quot; <!> gt; <!>不QUOT;就像我在ciforth做的那样。但是在你以后我决定拥有所有<!> lt; <!> lt; = <!> gt; <!> gt; =类似,统一外观,小型汇编程序实际上更简单。这是一种判断力,一种品味,当然不是原则问题。

在上下文中,我将问题解释为:<!>“对于以合理的速度到达合理强大的Forth的原始操作的数量,合理的大小是多少?<!>; 很明显,你不会对巧妙的技巧感兴趣,以牺牲巨大的开销为代价来摆脱一个汇编词,正如在讨论这个主题的一些主题中所发现的那样。

现在你可以看看像Jonesforth yourforth eforth这样的一些小Forth,并得出结论,大多数人到达大约50到100个原语。 那些Forth是用汇编语言定义的。如果要在c,python或Java中定义基元,情况又是不同的。现在,例如上面的字典搜索你可以选择c和Forth。与语言设计无关的考虑因素开始发挥作用。你可能是一个多产的程序员,或者你可能会坚持在Forth编码,因为它是一个学习项目。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top