348 research outputs found
Coordination using a Single-Writer Multiple-Reader Concurrent Logic Language
The principle behind concurrent logic programming is a set of processes which co-operate in monotonically constraining a global set of variables to particular values. Each process will have access to only some of the variables, and a process may bind a variable to a tuple containing further variables which may be bound later by other processes. This is a suitable
model for a coordination language. In this paper we describe a type system which ensures the co-operation principle is never breached, and which makes clear through syntax the pattern of data flow in a concurrent logic program. This overcomes problems previously associated with the practical use of concurrent logic languages
Transforming specifications of observable behaviour into programs
A methodology for deriving programs from specifications of observable
behaviour is described. The class of processes to which this methodology
is applicable includes those whose state changes are fully definable by labelled
transition systems, for example communicating processes without
internal state changes. A logic program representation of such labelled
transition systems is proposed, interpreters based on path searching techniques
are defined, and the use of partial evaluation techniques to derive
the executable programs is described
A Lingua Franca for Concurrent Logic Programming
This paper describes such a lingua franca. 2. GHC and Parlog A GHC or Parlog program is a set of relations {R 1 , ... , R n }. Each R i is made up of guarded Horn clauses of the same name and arity. In Edinburgh Prolog syntax where H, G 1 , ... G m , B 1 , ... B n are atomic formulae (unitary Prolog goals) and m ³³ 1 and n ³³ 1 each clause has the following form H :- G 1 and ... and G m | B 1 and ... and B n The clause's head H gives its relation name and arity, and the G i s and B j s are its guard and body goals, separated by the commitment operator |. The meta-symbol and signifies a conjunction operator. The primitive true, which always succeeds, fills empty guards or bodies. The clause's declarative reading is H is true if G 1 and ... and G m and B 1 and ... and B n are true and is a place filler in GHC for the parallel conjunction operator ",", and in Parlog for either the parallel "," or the sequential conjunction operator "&". One or more clauses form an ordered relation C 1 or ... or C n . where each C i is a guarded Horn clause, or is a meta-symbol acting as a place filler for a clause search operator, and the symbol "." terminates the relation. In GHC or only stands for the parallel search operator "." whereas in Parlog i
Lambda Calculus in Core Aldwych
Core Aldwych is a simple model for concurrent computation, involving the concept of agents which communicate through shared variables. Each variable will have exactly one agent that can write to it, and its value can never be changed once written, but a value can contain further variables which are written to later. A key aspect is that the reader of a value may become the writer of variables in it. In this paper we show how this model can be used to encode lambda calculus. Individual function applications can be explicitly encoded as lazy or not, as required. We then show how this encoding can be extended to cover functions which manipulate mutable variables, but with the underlying Core Aldwych implementation still using only immutable variables. The ordering of function applications then becomes an issue, with Core Aldwych able to model either the enforcement of an ordering or the retention of indeterminate ordering, which allows parallel execution
Efficient management of backtracking in and-parallelism
A backtracking algorithm for AND-Parallelism and its implementation at the Abstract Machine level are presented: first, a class of AND-Parallelism models based on goal independence is defined, and a generalized version of Restricted AND-Parallelism (RAP) introduced as characteristic of this class. A simple and efficient backtracking algorithm for R A P is then discussed. An implementation scheme is presented for this algorithm which offers minimum overhead, while retaining the performance and storage economy of sequent ial implementations and taking advantage of goal independence to avoid unnecessary backtracking ("restricted intelligent backtracking"). Finally, the implementation of backtracking in sequential and AND-Parallcl systems is explained through a number of examples
Interregional Migration in Romania during the 1990s
Since 1990 the territorial mobility in Romania has recorded a series of particularities determined by major transformations in the political, economic and social life. The economic disparities already existing between the prosperous and the lagging regions have increased during the transition years, influenced by institutional renewal, restructuring, privatization, etc. Several regions display higher unemployment rates, lower activity rates, lower incomes per capita and higher out-migration rates compared with the average. These regions have adapted inadequately to the changing economic conditions, such as the decline of various industries (e.g. coal mining in the south part of Romania) and, as a result of this fact, their out-migration has been intensified. In the early 1990s were already noticed widespread regional disparities in terms of labour supply as well as the main demographic indicators. Starting from this overall image the present paper examines the main changes in the intensity, orientation and territorial distance of migration flows as well as their structure and the variable influence of the ?push / pull? factors involved in this process. As a preliminary step in the analysis of the main characteristics of interregional mobility in Romania, the most significant zones in terms of their contribution to total national migration have been selected. Population and labour mobility between regions has been studied using a set of indicators calculated for the 1990 ? 2000 period: gross and net migration, in- and out-migration rates, in- and out-migration flows for the selected zones, their structure and dynamics and so on. Regression functions, input-output tables and gravitational models have been mainly employed. Analysing the results, the economic disparities seem to be the key issue in the question of population and labour mobility, as asserted by the neoclassical theory. Though, its mechanism is not confirmed by a series of concrete situations, such as the intense urban-rural flows, showing that, besides the economic factors, the institutional ones as well as the individual and family motivations are also very important for the persons that decide to migrate. In the next years is expected a decrease in the interregional migration in favour of the intra-regional one. The migration flows from urban to rural areas at the same time with those from rural to rural areas will continue to play a significant role. Finally, the paper discusses the economic policy measures able to reduce the long-distance migration and the intensity of the ?push? factors.
An abstract machine for restricted and-parallel execution of logic programs
Although the sequential execution speed of logic programs has been greatly improved by the concepts introduced in the Warren Abstract Machine (WAM), parallel execution represents the only way to increase this speed beyond the natural limits of sequential systems. However, most proposed parallel logic programming execution models lack the performance optimizations and storage efficiency of sequential systems. This paper presents a parallel abstract machine which is an extension of the WAM and is thus capable of supporting ANDParallelism without giving up the optimizations present in sequential implementations. A suitable instruction set, which can be used as a target by a variety of logic programming languages, is also included. Special instructions are provided to support a generalized version of "Restricted AND-Parallelism" (RAP), a technique which reduces the overhead traditionally associated with the run-time management of variable binding conflicts to a series of simple run-time checks, which select one out of a series of compiled execution graphs
Ordering Optimizations for Concurrent Logic Programs
Ordering optimisations are optimisations that can be applied to a concurrent logic program when the atoms of a clause are known to be ordered. In this paper ordering optimisations are reviewed, reformulated and refined. The paper explains how ordering optimisations can be realised in terms of abstract interpretation and shows that by, building on schedule analysis, simple, efficient and accurate forms of abstract interpretation can achieved. The paper outlines how to: identify instances of unification which can be simplified or removed; distinguish repeated synchronisation instructions; indicate which redundant checks can be removed when producers are ordered before consumers in the same thread; identify which variables can be accessed without dereferencing; indicate where variable initialisation and unification can be simplified; and show which variables can be allocated to an environment. Some safety checks can also be removed by using mode information
Reducing Scheduling Overheads for Concurrent Logic Programs
Strictness analysis is crucial for the efficient implementation of the lazy functional languages. A related technique for the concurrent logic languages (CLLs) called schedule analysis is presented which divides at compile-time a CLL program into threads of totally ordered atoms, whose relative ordering is determined at run-time. The technique enables the enqueuing and dequeuing of processes to be reduced, synchronisation tests to be partially removed, introduces the possibility of using unboxed arguments, and permits variables to be migrated from a heap to a stack to affect a form of compile-time garbage collection. The implementation is outlined and some preliminary results are given
- …
