Java中的Forth Interpreter

时间:2009-09-12 19:27:30

标签: java interpreter forth

Here我找到了一个用Java实现的Simple Forth Interpreter 但是,如果我想使用它,我不明白它的意义吗?

Forth Interpreter的优点是什么:

  • 如果最终编译的代码是 由JVM执行的仍然是“Byte 代码“我们将会怎样 口译员在做什么?
  • 写作会有所帮助吗? 高效/紧凑的计划?
  • 我是否会在Forth中编写代码 并且翻译将转换它 到Java?

你的想法......

7 个答案:

答案 0 :(得分:5)

页面上的作者描述了实施FORTH的子集并适合在其他应用程序中合并;据推测,它旨在为应用程序提供脚本编写功能。通过吐出java或JVM字节代码,系统工作的可能性相当小;它几乎肯定使用了用Java编写的解释器。

传统上,FORTH解释器可以在非常小的内存中实现。我知道有人在COSMAC上实现了一个,而核心解释器的长度是30 bytes 。面向堆栈的字节代码也非常紧凑,因为它不需要指定操作数的位置 - 它只是从堆栈中读取并将结果存放在堆栈的顶部。这使得它在嵌入式系统领域很受欢迎,其中解释器的小开销被程序逻辑的紧凑表示所抵消。

现在它不那么重要,因为机器往往要大得多,尽管数字交叉makes a good point还有其他仍在使用FORTH的情况。

答案 1 :(得分:4)

  

写作会有所帮助吗?   高效/紧凑的计划?

这是值得商榷的。

我确信FORTH人会告诉你它很快。但我怀疑在Java中实现的FORTH解释器上运行的FORTH程序的执行速度是否与直接在Java中实现的等效程序的速度相对应。首先,JIT编译器不能像普通Java版本那样优化FORTH解释器。

如果“紧”意味着“使用更少的记忆”,我认为差异将是微不足道的。请记住,在“FORTH in Java”和“plain Java”情况下,您都拥有Java JVM的所有内存开销。这可能会破坏FORTH代码密度与等效编译的Java代码密度的任何比较。

答案 2 :(得分:2)

不是字节码转换器

您的问题的答案是:“见下文,有点,没有”。

这只是一个需要输入并产生一些输出的程序。输入是Forth脚本。除了一些非常重要的系统外,实际生成字节码很少见。 jRuby,Clojure,Scala ..这样的大系统确实产生字节码。

但是你的Forth解释器可能只是:一个恰好用java编写的脚本解释器。它接受的输入是一个各种程序,所以你最终会得到一个很好的双间接执行。通过在CPU上运行的jvm执行的字节码解释器执行。

现在,如果你在CPU模拟器上运行它,或者在Forth中编写一个解释器,你可以使它成为三重间接的。 (从某种意义上说,它已经存在,因为您的英特尔CPU在执行它们之前翻译了大多数x86 opcodes into micro-ops。: - )

无论如何,重点是用java这样的静态语言编写的程序可能想要获取一些复杂的用户输入并执行它,或者程序的作者可能更容易在第四方面完成,允许他用java和Java编写。

在理解之前,你应该考虑所有这些。

答案 3 :(得分:2)

它确实允许您编写高效/紧凑的程序。部分是因为定义定义词(在编译时执行的词)的能力可以具有有效定义域特定语言(DSL)的效果。 Forth还鼓励重构(否则堆栈的东西简直变得难以理解......)因此代码会很紧张。

答案 4 :(得分:1)

7th是恕我直言,比JVM上的任何其他RPN语言更接近原始设计。有一个编辑器,包括行号和代码美容器。 “interpiler”和词典/词汇/当前/上下文的匹配实现。 有条件地,大多数依赖于硬件的词 - 存储到特定存储器地址或从特定存储器地址获取 - 都会丢失。无论如何,在JVM上进行内存计算的任何单词都是毫无意义的。 在7th中已经对第四种语法进行了一些有用的补充:

  • help
  • 这个词
  • 7th是面向对象的
  • 有一个像模式匹配的perl
  • 复数和数组是语言的一部分
  • 可重定向/不可行的机制,可选择将输出发送到堆栈或控制台,并防止执行文件io单词,例如。在测试时

答案 5 :(得分:0)

有几个Forth系统在Java中实现了Forth解释器。我知道有两个实际上将第四个源编译成JVM类,并允许您直接执行Forth代码而无需解释器。

答案 6 :(得分:0)

像FORTH一样的解释器的主要优点是它的交互性–意味着我输入一个词并立即得到答复。如果首先需要一个中间步骤来生成文件或其他内容,那么这种优势就消失了。第二件事是POL (面向问题的语言)方面:该语言必须无缝可扩展。因此,如果类似FORTH的语言无法编译新单词,那么它就毫无价值。