135,748 research outputs found
A Prolog compiler and its extension for OR-parallelism
This report describes algorithms for the compiler component of the Aurora
Or-Parallel Prolog system.
The compiler translates one Prolog clause at a time into a sequence
of abstract instructions. The instruction set is based on the sequential Warren Ab-
stract Machine (WAM) with extensions for full Prolog, shallow backtracking, memory
management and garbage collection, and for the SRI model of or-parallel execution of
Prolog.
Most of the described algorithms apply to compilation of sequential Prolog programs.
The extensions introduced to support or-parallelism are minor, and concern pruning
operators (cut and commit) and compile-time allocation of binding array offsets for
permanent variables (generalised environment trimming).
Code generation proper is kept separate from register allocation, and uses heuristics
for finding a compilation order which minimises the number of register-register copies.
After such copies have been coalesced where possible, register allocation is performed
in a single pass over the intermediate code.
The various compilation phases are described in detail, and the implementation is
compared with some other compilers
A formally verified compiler back-end
This article describes the development and formal verification (proof of
semantic preservation) of a compiler back-end from Cminor (a simple imperative
intermediate language) to PowerPC assembly code, using the Coq proof assistant
both for programming the compiler and for proving its correctness. Such a
verified compiler is useful in the context of formal methods applied to the
certification of critical software: the verification of the compiler guarantees
that the safety properties proved on the source code hold for the executable
compiled code as well
Fast Recompilation of Object Oriented Modules
Once a program file is modified, the recompilation time should be minimized,
without sacrificing execution speed or high level object oriented features. The
recompilation time is often a problem for the large graphical interactive
distributed applications tackled by modern OO languages. A compilation server
and fast code generator were developed and integrated with the SRC Modula-3
compiler and Linux ELF dynamic linker. The resulting compilation and
recompilation speedups are impressive. The impact of different language
features, processor speed, and application size are discussed
- …