为什么使用 THEN 来结束一个 IF 结构 ? 什么是串线编码?不同的串线编码技术之间有什么差异? 有没有人写过把 Forth 编译成 Java 字节码的程序? 能够把 JAVA 字节码翻译成 Forth 吗? 没有操作系统的 Forth 怎么运行? 为什么不用 Forth 来编写一个操作系统呢? 为什么使用 THEN 来结束一个 IF 结构 ? --------------------------------------------- 一些人认为 Forth 使用 THEN 很别扭,而另一些人则不以为然。 按照 Webster's New Encyclopedic Dictionary 解释, then (adv.) 有以下的意义: 2b: following next after in order ... 3d: as a necessary consequence (if you were there, then you saw them). Forth 的 THEN 具有 2b 的意义(接着、然后),而 Pascal 和其它程序设计语言则引用了 3d. 的意义(那么就、则)。 如果你不喜欢这样来使用 THEN ,可以按下列方式定义一个 ENDIF 替代: : ENDIF POSTPONE THEN ; IMMEDIATE 什么是串线编码?不同的串线编码技术之间有什么差异? --------------------------------------------------- 串线编码是实现虚拟机解释器的一种方法,你可以从下列站点得到关于串线编码的更深入的解释: <http://www.complang.tuwien.ac.at/forth/threaded-code.html>. 有没有人写过把 Forth 编译成 Java 字节码的程序? --------------------------------------------------- Paul Curtis <mailto:paul.curtis@ra-ltd.demon.co.uk> 写到: 尽管 JVM 是一个堆栈机,但是并不能有效地编译 Forth 程序,下面是一些原因: , • 一个调用方法的最大堆栈深度必须是已知的,见 JVM Spec, p. 111 • JVM 方法只能为调用者返回一个单一的对象,这样的堆栈结果就不可能实现: ( n1 n2 -- n3 n4 ) • 对于无符号数没有直接的支持; • CATCH 和 THROW 不能很容易地实现,你需要通过异常表来俘获异常,这不能够很好地匹配 Forth 模型,见 JVM Spec, p. 112 • 你不得不扩展 Forth 以便为 JAVA 方法产生所要求的属性; • 没有指针运算一类的事情; • 你不能把一个东西放到堆栈上然后强制地把它转为另一种类型; • 你不能在原始字节码之外产生一个对象,这是由于安全的原因; 这就是说,你可以使用 JVM 的字节码来产生一些类似 Forth 的东西,但是不能用 JVM 来实现 Forth 的堆栈。 如果你对这个答案不满意,应该使用 Jasmin 来直接编写 JVM 的程序。 能够把 JAVA 字节码翻译成 Forth 吗? -------------------------------------------------- 把 JAVA 字节码翻译成 Forth 需要处理许多琐碎的事情: • 垃圾收集 • 线程 • 控制结构 (branches->ANS Forth's 七个通用的控制结构字 ) • 异常 • 子程序 (JavaVM 码不指定一个子程序返回到它的调用者 ) • JavaVM 与直到 Forth-83 的标准 t 都犯了同样错误:它指定类型的大小,比如 JavaVM int 总是 32-bit ,为了支持这些必须增加几个操作符 • 本地库(没有它们则 JavaVM 不能做任何事情) 没有操作系统的 Forth 怎么运行? ------------------------------------------------- 在裸机硬件上运行的 Forth 系统被称为独立系统(与协同系统相比:协同系统在一个操作系统上运行)。注意不要把独立系统与本地码系统相混(后者指的是把 Forth 代码编译成机器码的系统);独立系统以本地串线编码方式存在。 Forth 系统从一开始就是独立系统,它执行操作系统的功能(从硬件到多用户多任务), 现在的嵌入式 Forth 系统通常都是独立系统。 服务器和桌面系统通常是协同系统,这样做是为了避免本来在这些系统已经可以使用的大量设备再重新编写驱动程序,同时也方便了 Forth 用户和其它软件用户。 为什么不用 Forth 来编写一个操作系统呢? ------------------------------------------------- 独立 Forth 系统可以被看成是一个用 Forth 语言编写的操作系统,所以用 Forth 来写一个操作系统当然是可能的。有些人多次建议用 Forth 来开发一个操作系统,但是反对者也列出了这样一些理由: • 如果你是在计划为台式机或者桌面系统编写一个操作系统的话,我们将面临与独立 Forth 系统同样的问题,当然这也是任何一个新操作系统所必须面对的问题:我们需要为那些广泛使用的各种硬件编写驱动程序,需要为新操作系统编写新的应用程序; • 为了解决应用程序编写问题,有些开发者建议可以让我们自己开发的操作系统与某个现有的操作系统比如 Linux兼容,包括API 甚至 ABI 兼容,不过我们还应该明确开发这个操作系统的目的: • 如果这是一个练习,则项目可能太大; • 如果仅仅是为了得到一个操作系统,这可能没有什么意义,因为现有的系统已经工作得很好了; • 如果是为了显示 Forth 的某些优点,比如代码特别小等,似乎有更简单的办法。而为了保持与旧操作系统的兼容,这些优点可能会荡然无存,再说了,究竟有多少人真的关心一个操作系统核心代码的大小呢?

评论