首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog - WAM的高级用途

Prolog - WAM的高级用途
EN

Stack Overflow用户
提问于 2014-10-03 14:59:16
回答 1查看 645关注 0票数 4

我正试图从概念的高度来理解世界水资源管理的目的,但我迄今咨询过的所有消息来源都认为,我知道的比我目前所了解的要多,而且他们从底层着手处理这个问题(细节)。他们从向我扔树开始,就像现在一样,我关心的是看到整个森林。

以下问题的答案将有助于我开展这项工作:

挑选任何一群有成就的、专业的Prolog实现者-- SISCtus人员、YAP人、ECLiPSe人--不管是谁。现在,给他们一个在现有虚拟机上实现专业的、可执行的、基于WAM的Prolog的目标,比如Erlang或Java。为了消除诸如“这取决于您的其他目标是什么”这样的答案,让我们说,除了我刚才给出的目标之外,其他任何目标都是他们开发之前实现时的目标。

  1. 他们(通常)会在VM (Erlang/JVM)中实现虚拟机( WAM)吗?这意味着您会让虚拟机在另一个虚拟机之上运行或由另一个虚拟机模拟吗?
  2. 如果对1的答案是否定的,这是否意味着他们会试图以某种方式将WAM及其相关的指令和执行直接映射到底层的Erlang/Java,以便使WAM“消失”,也就是说只运行一个VM (Erlang/JVM)?如果是这样的话,这是否意味着任何WAM堆、堆栈、内存操作、寄存器分配、指令等等实际上都是Erlang/Java堆(经过一些调整或按摩)?
  3. 如果对1的回答是肯定的,这是否意味着开发人员使用的任何语言(Erlang或Java,甚至Clojure )中的任何WAM堆、堆栈、内存操作等都是普通数组或链接列表?

我想得到的就是这个。WAM仅仅是一些帮助程序员组织代码、理解正在发生的事情、将Prolog映射到底层机器、提供可移植性等的抽象或工具,还是认为它是实现Prolog所必需的(几乎)必要的,或者至少是相当有用的“内部结束”?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 17:10:32

在回答这个有趣的问题时,我很兴奋地看到那些比我更有见识的人说了些什么,但是在不太可能的情况下,我实际上比你知道的更多,让我概述一下我的理解。当真正的专家出现并纠正我和/或提供更真实的答案时,我们都会受益。

WAM为您提供了一种实现Prolog的方法的过程描述。指定的Prolog并没有具体说明它必须如何实现,它只是讨论了应该看到的行为。因此,WAM是一种实现方法。我不认为任何流行的系统都遵循它,他们每个人都有他们自己的版本。它更像是一个架构模式和算法草图,而不是像Java虚拟机这样的规范。如果它更坚定,这本书http://wambook.sourceforge.net/可能就不需要存在了。我(非常稀疏)的理解是,主要的技巧是使用两个堆栈:一个是自Algol以来每种编程语言的常规调用/返回堆栈,另一个是用于选择点和回溯的特殊“跟踪”。(编辑:@false现在已经到来,并指出WAM寄存器是我以前从未听说过的主要技巧,这表明了我的无知。)无论如何,要实现Prolog,您需要一种正确的方法来处理搜索。在WAM之前,人们大多采用临时方法.我不会感到惊讶的是,有新的和/或更复杂的技巧,但它是一个健全的架构,广泛使用和理解。

所以你的三部分问题的答案是,我想,两者都是。VM中将有一个VM。当然,VM中的VM将以适当的语言实现,因此将使用该语言的原语来处理VM的不可见部分(堆栈和跟踪)。Clojure可以提供对语言如何与自己的实现语言共享东西的洞察力。你可以自由地按需要进行混合。

最后一个问题的答案是,WAM只是你所描述的目的的抽象,而不是它本身的目的。例如,没有像“可移植的WAM字节码”这样的东西编译Java成为可移植的JVM字节码,这可能证明它没有其他好处。如果您有一种实现Prolog的新方法,那么一定要尝试它,忘记所有关于WAM的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26181455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档