gpt4 book ai didi

operators - 什么是原始 Forth 运算符?

转载 作者:行者123 更新时间:2023-12-02 19:50:08 33 4
gpt4 key购买 nike

我对实现 Forth 系统很感兴趣,这样我就可以获得一些构建简单虚拟机和运行时的经验。

当从 Forth 开始时,人们通常首先了解堆栈及其运算符(DROP、DUP、SWAP 等),因此很自然地将它们视为原始运算符。但他们不是。它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符。后来了解了 store (!) 和 fetch (@),它们可以用来实现 DUP、SWAP 等等(哈哈!)。

那么什么是原始运算符?哪些必须直接在运行时环境中实现,然后才能构建所有其他环境?我对高性能不感兴趣;我想要一些我(和其他人)可以学习的东西。运算符(operator)优化可以稍后进行。

(是的,我知道我可以从图灵机开始,然后从那里开始。这有点极端。)

编辑:我的目标类似于引导操作系统或新的编译器。我至少需要实现什么,以便我可以用这些原始构建 block 构建系统的其余部分?我不会在裸硬件上实现这个;作为一项教育练习,我会编写自己的最小虚拟机。

最佳答案

This thread涵盖了你的确切问题。这是soup-to-nuts implementation具有完整的文档。

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

我很享受这个过程,因为有一些非常有趣的谜题,比如让 DOES> 完全正确(一旦我有了可靠的 DOES> 实现,我就创建了闭包变成了非常非常小的代码)。

关于operators - 什么是原始 Forth 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/407987/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com