19,536 research outputs found
Structural operational semantics through context-dependent behaviour
We present an operational semantics for an imperative language with concurrency and procedures. The approach is novel because we expose the building block operations – variable assignment and condition checking – in the labels on the transitions; these form the context-dependent behaviour of a program. Using this style results in two main advantages over existing formalisms for imperative programming language semantics: firstly, our individual transition rules are less cluttered, and secondly, we are able to more abstractly and intuitively describe the semantics of procedures, including by-value and by-reference parameters. Existing techniques in the literature tend to result in complex and hard-to-read rules for even simple language constructs, or avoid discussion of procedures and parameters entirely. Our semantics for procedures utilises the context-dependent behaviour in the transition label to neatly handle variable name scoping, and defines the semantics of recursion without requiring additional rules. We also demonstrate how the semantics may be extended to handle function calls within expressions, array element and record field updates, and higher-order programming constructs
Towards Autopoietic Computing
A key challenge in modern computing is to develop systems that address
complex, dynamic problems in a scalable and efficient way, because the
increasing complexity of software makes designing and maintaining efficient and
flexible systems increasingly difficult. Biological systems are thought to
possess robust, scalable processing paradigms that can automatically manage
complex, dynamic problem spaces, possessing several properties that may be
useful in computer systems. The biological properties of self-organisation,
self-replication, self-management, and scalability are addressed in an
interesting way by autopoiesis, a descriptive theory of the cell founded on the
concept of a system's circular organisation to define its boundary with its
environment. In this paper, therefore, we review the main concepts of
autopoiesis and then discuss how they could be related to fundamental concepts
and theories of computation. The paper is conceptual in nature and the emphasis
is on the review of other people's work in this area as part of a longer-term
strategy to develop a formal theory of autopoietic computing.Comment: 10 Pages, 3 figure
Communications in Choreographies, Revisited
Choreographic Programming is a paradigm for developing
correct-by-construction concurrent programs, by writing high-level descriptions
of the desired communications and then synthesising process implementations
automatically. So far, choreographic programming has been explored in the
monadic setting: interaction terms express point-to-point communications of a
single value. However, real-world systems often rely on interactions of
polyadic nature, where multiple values are communicated among two or more
parties, like multicast, scatter-gather, and atomic exchanges. We introduce a
new model for choreographic programming equipped with a primitive for grouped
interactions that subsumes all the above scenarios. Intuitively, grouped
interactions can be thought of as being carried out as one single interaction.
In practice, they are implemented by processes that carry them out in a
concurrent fashion. After formalising the intuitive semantics of grouped
interactions, we prove that choreographic programs and their implementations
are correct and deadlock-free by construction
Trustworthy Refactoring via Decomposition and Schemes: A Complex Case Study
Widely used complex code refactoring tools lack a solid reasoning about the
correctness of the transformations they implement, whilst interest in proven
correct refactoring is ever increasing as only formal verification can provide
true confidence in applying tool-automated refactoring to industrial-scale
code. By using our strategic rewriting based refactoring specification
language, we present the decomposition of a complex transformation into smaller
steps that can be expressed as instances of refactoring schemes, then we
demonstrate the semi-automatic formal verification of the components based on a
theoretical understanding of the semantics of the programming language. The
extensible and verifiable refactoring definitions can be executed in our
interpreter built on top of a static analyser framework.Comment: In Proceedings VPT 2017, arXiv:1708.0688
On Asynchrony and Choreographies
Choreographic Programming is a paradigm for the development of concurrent
software, where deadlocks are prevented syntactically. However, choreography
languages are typically synchronous, whereas many real-world systems have
asynchronous communications. Previous attempts at enriching choreographies with
asynchrony rely on ad-hoc constructions, whose adequacy is only argued
informally. In this work, we formalise the properties that an asynchronous
semantics for choreographies should have: messages can be sent without the
intended receiver being ready, and all sent messages are eventually received.
We explore how out-of-order execution, used in choreographies for modelling
concurrency, can be exploited to endow choreographies with an asynchronous
semantics. Our approach satisfies the properties we identified. We show how our
development yields a pleasant correspondence with FIFO-based asynchronous
messaging, modelled in a process calculus, and discuss how it can be adopted in
more complex choreography models.Comment: In Proceedings ICE 2017, arXiv:1711.1070
- …