60,682 research outputs found
Evolving a DSL implementation
Domain Specific Languages (DSLs) are small languages designed for use in a specific domain. DSLs typically evolve quite radically throughout their lifetime, but current DSL implementation approaches are often clumsy in the face of such evolution. In this paper I present a case study of an DSL evolving in its syntax, semantics, and robustness, implemented in the Converge language. This shows how real-world DSL implementations can evolve along with changing requirements
Software issues involved in code translation of C to Ada programs
It is often thought that translation of one programming language to another is a simple solution that can be used to extend the software life span or in rehosting software to another environment. The possible problems are examined as are the advantages and disadvantages of direct machine or human code translation versus that of redesign and rewrite of the software. The translation of the expert system language called C Language Integrated Production System (CLIPS) which is written in C, to Ada, will be used as a case study of the problems that are encountered
Modeling of the youBot in a serial link structure using twists and wrenches in a bond graph
We present a walk-through tutorial on the modeling of a complex robotic system, like the newly developed desktop mobile manipulator youBot developed by KUKA[5, 4]. The tutorial shows the design of models for typical robotic elements, done in a reusable object-oriented style. We employ an energy-based approach for modeling and its bondgraph notation to ensure encapsulation of functionality, extendability and reusability of each element of the model. The kinematic representation of mechanical elements is captured using screw theory. The modeling process is explained in two steps: ļ¬rst submodels of separate components are elaborated and next the model is constructed from these components
Modular, Fully-abstract Compilation by Approximate Back-translation
A compiler is fully-abstract if the compilation from source language programs
to target language programs reflects and preserves behavioural equivalence.
Such compilers have important security benefits, as they limit the power of an
attacker interacting with the program in the target language to that of an
attacker interacting with the program in the source language. Proving compiler
full-abstraction is, however, rather complicated. A common proof technique is
based on the back-translation of target-level program contexts to
behaviourally-equivalent source-level contexts. However, constructing such a
back- translation is problematic when the source language is not strong enough
to embed an encoding of the target language. For instance, when compiling from
STLC to ULC, the lack of recursive types in the former prevents such a
back-translation.
We propose a general and elegant solution for this problem. The key insight
is that it suffices to construct an approximate back-translation. The
approximation is only accurate up to a certain number of steps and conservative
beyond that, in the sense that the context generated by the back-translation
may diverge when the original would not, but not vice versa. Based on this
insight, we describe a general technique for proving compiler full-abstraction
and demonstrate it on a compiler from STLC to ULC. The proof uses asymmetric
cross-language logical relations and makes innovative use of step-indexing to
express the relation between a context and its approximate back-translation.
The proof extends easily to common compiler patterns such as modular
compilation and it, to the best of our knowledge, it is the first compiler full
abstraction proof to have been fully mechanised in Coq. We believe this proof
technique can scale to challenging settings and enable simpler, more scalable
proofs of compiler full-abstraction
A static cost analysis for a higher-order language
We develop a static complexity analysis for a higher-order functional
language with structural list recursion. The complexity of an expression is a
pair consisting of a cost and a potential. The former is defined to be the size
of the expression's evaluation derivation in a standard big-step operational
semantics. The latter is a measure of the "future" cost of using the value of
that expression. A translation function tr maps target expressions to
complexities. Our main result is the following Soundness Theorem: If t is a
term in the target language, then the cost component of tr(t) is an upper bound
on the cost of evaluating t. The proof of the Soundness Theorem is formalized
in Coq, providing certified upper bounds on the cost of any expression in the
target language.Comment: Final versio
Toward an architecture for quantum programming
It is becoming increasingly clear that, if a useful device for quantum
computation will ever be built, it will be embodied by a classical computing
machine with control over a truly quantum subsystem, this apparatus performing
a mixture of classical and quantum computation.
This paper investigates a possible approach to the problem of programming
such machines: a template high level quantum language is presented which
complements a generic general purpose classical language with a set of quantum
primitives. The underlying scheme involves a run-time environment which
calculates the byte-code for the quantum operations and pipes it to a quantum
device controller or to a simulator.
This language can compactly express existing quantum algorithms and reduce
them to sequences of elementary operations; it also easily lends itself to
automatic, hardware independent, circuit simplification. A publicly available
preliminary implementation of the proposed ideas has been realized using the
C++ language.Comment: 23 pages, 5 figures, A4paper. Final version accepted by EJPD ("swap"
replaced by "invert" for Qops). Preliminary implementation available at:
http://sra.itc.it/people/serafini/quantum-computing/qlang.htm
Optimizing for confidence - Costs and opportunities at the frontier between abstraction and reality
Is there a relationship between computing costs and the confidence people
place in the behavior of computing systems? What are the tuning knobs one can
use to optimize systems for human confidence instead of correctness in purely
abstract models? This report explores these questions by reviewing the
mechanisms by which people build confidence in the match between the physical
world behavior of machines and their abstract intuition of this behavior
according to models or programming language semantics. We highlight in
particular that a bottom-up approach relies on arbitrary trust in the accuracy
of I/O devices, and that there exists clear cost trade-offs in the use of I/O
devices in computing systems. We also show various methods which alleviate the
need to trust I/O devices arbitrarily and instead build confidence
incrementally "from the outside" by considering systems as black box entities.
We highlight cases where these approaches can reach a given confidence level at
a lower cost than bottom-up approaches.Comment: 11 pages, 1 figur
- ā¦