Emulated Flat Concurrent Prolog

This material has been extracted from The Logix System User's Manual, Version 2.0.

Concurrent Prolog [5] is a logic programming language designed for concurrent programming and parallel execution. It is a process oriented language, which embodies dataflow synchronization and guarded command indeterminacy as the basic control mechanisms. Flat Concurrent Prolog (FCP) [3], was identified as a practical and efficient subset of Concurrent Prolog, which supports most of its programming techniques. The reader is referred to [6] for a survey of the language and its programming techniques, and for an extensive bibliography. Further evolution of the language resulted in the development of FCP(:,?), which is the language currently supported by the Logix System. The reader is referred to [10] for language definition, and to [11] for program examples and techniques.

Logix is a programming environment written in Flat Concurrent Prolog (FCP) which allows the development and testing of concurrent logic programs. Logix includes a compiler, which compiles FCP programs into an FCP abstract machine instruction set, and an emulator, written in C, which emulates these instructions. Logix is organized around three types of objects: computations, modules, and services. A computation is the unit of execution, control and debugging in Logix; a module is the unit of compilation; a service provides access to facilities and capabilities of the underlying system, for example the screen and the file services. Several computations may proceed in parallel under Logix. A computation may span many modules and services; several concurrent computations may execute code in the same module.

A computation occurs in time. It starts with an initial process, typically specified interactively by the user. At each point in time a computation consists of a multiset of processes; it terminates when this becomes empty. A computation proceeds by processes performing actions. A process may terminate, fork, or change state. While doing so it may assign values to variables by unification, thus achieving the effect of communication in general, and output construction in particular. On a multiprocessor Logix, a computation could span several processors.

A module is a unit of compilation. It consists of a set of procedures, preceded by an optional declaration. A procedure may call and be called by procedures in other modules using remote procedure calls. Modules are loaded automatically when called and compiled automatically as needed. The active module is a service, which may be either a server or a monitor. Remote procedure calls between services are implemented via the stream communication capabilities of FCP. In a parallel implementation of Logix different services may reside in different processors, and remote procedure calls may cross processor boundaries [7].

A Logix user is provided with an initial set of services, which are accessed via remote procedure calls. These include a screen service, a file service, and a compile service, among others. In addition, a server or monitor is created for each service, to serve remote procedure calls directed to it.

Acquiring the Logix system

More about the Logix system

The SpiFcp subsystem

The BioSpi subsystem

Incremental updates per release



This document is licensed under: Gnu General Public License - Version 3