wamcc:将Prolog编译成C (No.7-1)

cri-dist.univ-paris1.fr/diaz/publications/WAMCC/iclp95.pdf 



摘要:
我们呈现的wamcc系统,是一个通过WAM的,转换Prolog到C的Prolog编译器。这种方法有一些有趣的的后果:简单,高效,可移植性,可扩展性和模块化。事实上,该系统不纳入复杂的优化,但效率和Quintus Prolog2.5(基于汇编语言编写的一个模拟器)类似,只比Sicstus Prolog语言(编译为机器码)慢30%。它对任何机器都是马上可移植的,机器需带有一个C编译器并易于扩展,如限制,如clp(FD)系统,是基于wamcc的。要感谢C的模块化,它还集成了一种简单而有效使用的模块化。

一、引言
目前,编译Prolog是一项众所周知的课题。当高速的Prolog系统的设计不完全评估,它不再像十几年前般具有挑战性。可以说是在逻辑编程中的最后十年的重大突破沃伦抽象机(Warren Abstract Machine:WAM)的定义[14],成为Prolog编译的事实上的标准,已经帮助许多研究者获得一个更好的机会去了解Prolog的执行,并开发出高效的逻辑程序系统。此外WAM证明有足够的灵活性,保持骨干各种扩展,如高阶,约束,并行或并发逻辑程序。然而,简单而高效的Prolog系统的设计仍然是一个活跃的话题。我们于1991年开始发展我们自己的逻辑引擎,以提供一个良好的各种扩展的基础和逻辑编程特定的约束[6]。这个新系统的要求如下:

可扩展性:系统应作为实验平台。这意味着在Prolog引擎的设计简单而不复杂的优化会过分扩大系统的规模。

可移植性:为了实现广泛扩散和避免实属固有特定的体系结构的喜好。

效率:由于Prolog系统缺乏足够的底层表现,要避免跛足的未来扩展。一门新的语言的确往往首先判断(计数器)经典基准的表现,其次它提供的新颖性和表现。因此,我们的逻辑引擎的目标是象仿真版本Sicstus Prolog一样有效,这是一个高度优化的C模拟器。


模块化:分解成若干个模块的Prolog应用程序。这也可能第一步忘了内置的谓词,这将是写在以后的Prolog单独模块。

经典技术包括编译Prolog成为一个WAM-like指令集,然后直接执行用C语言编写的一个模拟器中WAM代码(Sicstus Prolog的原始版本)或汇编器(QUINTUS Prolog)或编译机器码(BIM的Prolog,Sicstus Prolog的最新版本,Aquarius Prolog)。

然而,无论是仿真还是编译,都不能满足我们安全机器码的初步要求:如果没有优化的或极其复杂,仿真已表现不佳;如果优化而生产的本机代码肯定不是一个简单的任务,是不可移植的。因此,我们决定调查一个新的替代:翻译Prolog语言到C。事实上,至少在理论上,这一解决方案是合并两者的优点的方法。确保可移植性是由C语言的全球霸权决定的,在编译过程结束后产生机器码(通过C编译器)。这样就避免了模拟器开销,并因此从缺乏优化得以补偿。 C语言的模块化使人们有可能作为单独的C模块一样编译Prolog模块,它可以通过连接器连接(谓词能见度应对通过适当的C声明)。编译到C还能够为这个简单的接口(以及任何其他编译)语言,并产生真正的可执行文件作为输出的逻辑系统。由此产生的系统,名为wamcc,证明这种方法是健全的,把Prolog翻译到C的系统可以作为一个高效的优化商业Prolog。

本文组织如下。第2节的基本思路关于WAM代码的执行。第3节介绍了其他现有系统如何编译WAM代码为C,而第4节wamcc方法。第5节细节是内存是如何管理wamcc,终于,第6呈现性能评价。一个简短的结论结束此文件。

你可能感兴趣的:(c,优化,扩展,语言,引擎,编译器)