117 research outputs found
The Buffered \pi-Calculus: A Model for Concurrent Languages
Message-passing based concurrent languages are widely used in developing
large distributed and coordination systems. This paper presents the buffered
-calculus --- a variant of the -calculus where channel names are
classified into buffered and unbuffered: communication along buffered channels
is asynchronous, and remains synchronous along unbuffered channels. We show
that the buffered -calculus can be fully simulated in the polyadic
-calculus with respect to strong bisimulation. In contrast to the
-calculus which is hard to use in practice, the new language enables easy
and clear modeling of practical concurrent languages. We encode two real-world
concurrent languages in the buffered -calculus: the (core) Go language and
the (Core) Erlang. Both encodings are fully abstract with respect to weak
bisimulations
Performance scalability analysis of JavaScript applications with web workers
Web applications are getting closer to the performance of native applications taking advantage of new standard–based technologies. The recent HTML5 standard includes, among others, the Web Workers API that allows executing JavaScript applications on multiple threads, or workers. However, the internals of the browser’s JavaScript virtual
machine does not expose direct relation between workers and running threads in the browser and the utilization of logical cores in the processor. As a result, developers do not know how performance actually scales on different environments and therefore what is the optimal number of workers on parallel JavaScript codes. This paper presents the first performance scalability analysis of parallel web apps with multiple workers. We focus on two case studies representative of different worker execution models. Our analyses show performance scaling on different parallel processor microarchitectures and on three major web browsers in the market. Besides, we study the impact of co–running applications on the web app performance. The results provide insights for future approaches to automatically find out the optimal number of workers that provide the best tradeoff between performance and resource usage to preserve system responsiveness and user experience, especially on environments with unexpected changes on system workload.Peer ReviewedPostprint (author's final draft
Towards Symbolic Execution in Erlang
The final publication is available at Springer via http://dx.doi.org/10.1007/978-3-662-46823-4_28The concurrent functional language Erlang [1] has a number of distinguishing
features, like dynamic typing, concurrency via asynchronous message passing
or hot code loading, that make it especially appropriate for distributed, faulttolerant,
soft real-time applications. The success of Erlang is witnessed by the
increasing number of its industrial applications. For instance, Erlang has been
used to implement Facebook’s chat back-end, the mobile application Whatsapp
or Twitterfall—a service to view trends and patterns from Twitter—, to name
a few. The success of the language, however, also requires the development of
powerful testing and verification techniques.
Symbolic execution is at the core of many program analysis and transformation
techniques, like partial evaluation, test-case generation or model checking.
In this paper, we introduce a symbolic execution technique for Erlang. We discuss
how both an overapproximation and an underapproximation of the concrete
semantics can be obtained. We illustrate our approach through some examples.
To the best of our knowledge, this is the first attempt to formalize symbolic
execution in the context of this language, where previous approaches have only
considered exploring different schedulings but have not dealt with symbolic data.
More details can be found in the companion technical reportThis work has been partially supported by the Spanish Ministerio de Economía y Competitividad (Secretaría de Estado de Investigación, Desarrollo e Innovación) under grant TIN2013-44742-C4-1-R and by the Generalitat Valenciana under grant PROMETEO/2011/052.Vidal Oriola, GF. (2015). Towards Symbolic Execution in Erlang. En Perspectives of System Informatics. Springer. 351-360. https://doi.org/10.1007/978-3-662-46823-4_28S35136
Everything counts in small amounts
This paper describes an encoding tool which utilises the "data is code" principle of symbolic expressions available in Lisp-like languages to allow the scripting of tightly packed, cross-platform network protocols. This dynamic approach provides specific flexibility when working on embedded systems as it reduces the amount of cross compilation and deploy cycles that occur following more traditional development approaches. In addition, the separation of how the data is encoded from the compiled application facilitates a concept known as extensibility of the network protocol without requiring special handling
Multi-level Visualization of Concurrent and Distributed Computation in Erlang
This paper describes a prototype visualization system
for concurrent and distributed applications programmed
using Erlang, providing two levels of granularity of view. Both
visualizations are animated to show the dynamics of aspects of
the computation.
At the low level, we show the concurrent behaviour of the
Erlang schedulers on a single instance of the Erlang virtual
machine, which we call an Erlang node. Typically there will be
one scheduler per core on a multicore system. Each scheduler
maintains a run queue of processes to execute, and we visualize
the migration of Erlang concurrent processes from one run queue
to another as work is redistributed to fully exploit the hardware.
The schedulers are shown as a graph with a circular layout. Next
to each scheduler we draw a variable length bar indicating the
current size of the run queue for the scheduler.
At the high level, we visualize the distributed aspects of the
system, showing interactions between Erlang nodes as a dynamic
graph drawn with a force model. Speci?cally we show message
passing between nodes as edges and lay out nodes according to
their current connections. In addition, we also show the grouping
of nodes into “s_groups” using an Euler diagram drawn with
circles
Refactoring = Substitution + Rewriting
We present an approach to describing refactorings that abstracts away from
particular refactorings to classes of similar transformations, and presents an
implementation of these that works by substitution and subsequent rewriting.
Substitution is language-independent under this approach, while the rewrites
embody language-specific aspects. Intriguingly, it also goes back to work on
API migration by Huiqing Li and the first author, and sets refactoring in that
general context.Comment: 6p
Simplifying Contract-Violating Traces
Contract conformance is hard to determine statically, prior to the deployment
of large pieces of software. A scalable alternative is to monitor for contract
violations post-deployment: once a violation is detected, the trace
characterising the offending execution is analysed to pinpoint the source of
the offence. A major drawback with this technique is that, often, contract
violations take time to surface, resulting in long traces that are hard to
analyse. This paper proposes a methodology together with an accompanying tool
for simplifying traces and assisting contract-violation debugging.Comment: In Proceedings FLACOS 2012, arXiv:1209.169
Building dependency graph for slicing erlang programs
Program slicing is a well-known technique that utilizes dependency graphs and static program analysis. Our goal is to perform impact analysis of Erlang programs based on the resulted program slices, that is we want to measure the impact of any change made on the source code: especially we want to select a subset of test cases which must be rerun after the modification. However impact analyzer tools exist for object oriented languages, the used dependency graphs heavily depend on the syntax and semantics of the used programming language, thus we introduce dependency graphs for a dynamically typed functional programming language, Erlang
- …