Higher order escape analysis: optimizing stack allocation in functional program implementations
Proceedings of the third European symposium on programming on ESOP '90
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
A continuation-passing style for prolog
ILPS '94 Proceedings of the 1994 International Symposium on Logic programming
Garbage collection: algorithms for automatic dynamic memory management
Garbage collection: algorithms for automatic dynamic memory management
Partial evaluation in aircraft crew planning
PEPM '97 Proceedings of the 1997 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
tu Prolog: A Light-Weight Prolog for Internet Applications and Infrastructures
PADL '01 Proceedings of the Third International Symposium on Practical Aspects of Declarative Languages
A New Data Structure for Implementing Extensions to Prolog
PLILP '90 Proceedings of the 2nd International Workshop on Programming Language Implementation and Logic Programming
BinProlog: a Continuation Passing Style Prolog Engine
PLILP '92 Proceedings of the 4th International Symposium on Programming Language Implementation and Logic Programming
Efficient and flexible access control via logic program specialisation
Proceedings of the 2004 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
P#: a concurrent prolog for the .NET framework
Software—Practice & Experience
The Reasoned Schemer
HotpathVM: an effective JIT compiler for resource-constrained devices
Proceedings of the 2nd international conference on Virtual execution environments
PyPy's approach to virtual machine construction
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications
RPython: a step towards reconciling dynamically and statically typed OO languages
Proceedings of the 2007 symposium on Dynamic languages
The architecture and design of a malleable object-oriented prolog engine
Proceedings of the 2008 ACM symposium on Applied computing
Trace-based just-in-time type specialization for dynamic languages
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Tracing the meta-level: PyPy's tracing JIT compiler
Proceedings of the 4th workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages and Programming Systems
O, partial evaluator, where art thou?
Proceedings of the 2010 ACM SIGPLAN workshop on Partial evaluation and program manipulation
Demand-driven indexing of prolog clauses
ICLP'07 Proceedings of the 23rd international conference on Logic programming
Towards just-in-time partial evaluation of prolog
LOPSTR'09 Proceedings of the 19th international conference on Logic-Based Program Synthesis and Transformation
Prolog Cafe: a prolog to java translator system
INAP'05 Proceedings of the 16th international conference on Applications of Declarative Programming and Knowledge Management
Allocation removal by partial evaluation in a tracing JIT
Proceedings of the 20th ACM SIGPLAN workshop on Partial evaluation and program manipulation
HappyJIT: a tracing JIT compiler for PHP
Proceedings of the 7th symposium on Dynamic languages
Runtime feedback in a meta-tracing JIT for efficient dynamic languages
Proceedings of the 6th Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems
Theory and Practice of Logic Programming - Prolog Systems
Loop-aware optimizations in PyPy's tracing JIT
Proceedings of the 8th symposium on Dynamic languages
The efficient handling of guards in the design of RPython's tracing JIT
Proceedings of the sixth ACM workshop on Virtual machines and intermediate languages
Lightweight compilation of (c)lp to javascript*
Theory and Practice of Logic Programming
Unipycation: a case study in cross-language tracing
Proceedings of the 7th ACM workshop on Virtual machines and intermediate languages
Hi-index | 0.00 |
Most Prolog implementations are implemented in low-level languages such as C and are based on a variation of the WAM instruction set, which enhances their performance but makes them hard to write. In addition, many of the more dynamic features of Prolog (like assert), despite their popularity, are not well supported. We present a high-level continuation-based Prolog interpreter based on the PyPy project. The PyPy project makes it possible to easily and efficiently implement dynamic languages. It provides tools that automatically generate a just-in-time compiler for a given interpreter of the target language, by using partial evaluation techniques. The resulting Prolog implementation is surprisingly efficient: it clearly outperforms existing interpreters of Prolog in high-level languages such as Java. Moreover, on some benchmarks, our system outperforms state-of-the-art WAM-based Prolog implementations. Our paper aims to show that declarative languages such as Prolog can indeed benefit from having a just-in-time compiler and that PyPy can form the basis for implementing programming languages other than Python.