5,887 research outputs found
Open Programming Language Interpreters
Context: This paper presents the concept of open programming language
interpreters and the implementation of a framework-level metaobject protocol
(MOP) to support them. Inquiry: We address the problem of dynamic interpreter
adaptation to tailor the interpreter's behavior on the task to be solved and to
introduce new features to fulfill unforeseen requirements. Many languages
provide a MOP that to some degree supports reflection. However, MOPs are
typically language-specific, their reflective functionality is often
restricted, and the adaptation and application logic are often mixed which
hardens the understanding and maintenance of the source code. Our system
overcomes these limitations. Approach: We designed and implemented a system to
support open programming language interpreters. The prototype implementation is
integrated in the Neverlang framework. The system exposes the structure,
behavior and the runtime state of any Neverlang-based interpreter with the
ability to modify it. Knowledge: Our system provides a complete control over
interpreter's structure, behavior and its runtime state. The approach is
applicable to every Neverlang-based interpreter. Adaptation code can
potentially be reused across different language implementations. Grounding:
Having a prototype implementation we focused on feasibility evaluation. The
paper shows that our approach well addresses problems commonly found in the
research literature. We have a demonstrative video and examples that illustrate
our approach on dynamic software adaptation, aspect-oriented programming,
debugging and context-aware interpreters. Importance: To our knowledge, our
paper presents the first reflective approach targeting a general framework for
language development. Our system provides full reflective support for free to
any Neverlang-based interpreter. We are not aware of any prior application of
open implementations to programming language interpreters in the sense defined
in this paper. Rather than substituting other approaches, we believe our system
can be used as a complementary technique in situations where other approaches
present serious limitations
Persistent Contextual Values as Inter-Process Layers
Mobile applications today often fail to be context aware when they also need
to be customizable and efficient at run-time. Context-oriented programming
allows programmers to develop applications that are more context aware. Its
central construct, the so-called layer, however, is not customizable. We
propose to use novel persistent contextual values for mobile development.
Persistent contextual values automatically adapt their value to the context.
Furthermore they provide access without overhead. Key-value configuration files
contain the specification of contextual values and the persisted contextual
values themselves. By modifying the configuration files, the contextual values
can easily be customized for every context. From the specification, we generate
code to simplify development. Our implementation, called Elektra, permits
development in several languages including C++ and Java. In a benchmark we
compare layer activations between threads and between applications. In a case
study involving a web-server on a mobile embedded device the performance
overhead is minimal, even with many context switches.Comment: 8 pages Mobile! 16, October 31, 2016, Amsterdam, Netherland
Dynamic Choreographies: Theory And Implementation
Programming distributed applications free from communication deadlocks and
race conditions is complex. Preserving these properties when applications are
updated at runtime is even harder. We present a choreographic approach for
programming updatable, distributed applications. We define a choreography
language, called Dynamic Interaction-Oriented Choreography (AIOC), that allows
the programmer to specify, from a global viewpoint, which parts of the
application can be updated. At runtime, these parts may be replaced by new AIOC
fragments from outside the application. AIOC programs are compiled, generating
code for each participant in a process-level language called Dynamic
Process-Oriented Choreographies (APOC). We prove that APOC distributed
applications generated from AIOC specifications are deadlock free and race free
and that these properties hold also after any runtime update. We instantiate
the theoretical model above into a programming framework called Adaptable
Interaction-Oriented Choreographies in Jolie (AIOCJ) that comprises an
integrated development environment, a compiler from an extension of AIOCs to
distributed Jolie programs, and a runtime environment to support their
execution.Comment: arXiv admin note: text overlap with arXiv:1407.097
Enabling High-Level Application Development for the Internet of Things
Application development in the Internet of Things (IoT) is challenging
because it involves dealing with a wide range of related issues such as lack of
separation of concerns, and lack of high-level of abstractions to address both
the large scale and heterogeneity. Moreover, stakeholders involved in the
application development have to address issues that can be attributed to
different life-cycles phases. when developing applications. First, the
application logic has to be analyzed and then separated into a set of
distributed tasks for an underlying network. Then, the tasks have to be
implemented for the specific hardware. Apart from handling these issues, they
have to deal with other aspects of life-cycle such as changes in application
requirements and deployed devices. Several approaches have been proposed in the
closely related fields of wireless sensor network, ubiquitous and pervasive
computing, and software engineering in general to address the above challenges.
However, existing approaches only cover limited subsets of the above mentioned
challenges when applied to the IoT. This paper proposes an integrated approach
for addressing the above mentioned challenges. The main contributions of this
paper are: (1) a development methodology that separates IoT application
development into different concerns and provides a conceptual framework to
develop an application, (2) a development framework that implements the
development methodology to support actions of stakeholders. The development
framework provides a set of modeling languages to specify each development
concern and abstracts the scale and heterogeneity related complexity. It
integrates code generation, task-mapping, and linking techniques to provide
automation. Code generation supports the application development phase by
producing a programming framework that allows stakeholders to focus on the
application logic, while our mapping and linking techniques together support
the deployment phase by producing device-specific code to result in a
distributed system collaboratively hosted by individual devices. Our evaluation
based on two realistic scenarios shows that the use of our approach improves
the productivity of stakeholders involved in the application development
A gentle transition from Java programming to Web Services using XML-RPC
Exposing students to leading edge vocational areas of relevance such as Web Services can be difficult. We show a lightweight approach by embedding a key component of Web Services within a Level 3 BSc module in Distributed Computing. We present a ready to use collection of lecture slides and student activities based on XML-RPC. In
addition we show that this material addresses the central topics in the context of web services as identified by Draganova (2003)
Type oriented parallel programming for Exascale
Whilst there have been great advances in HPC hardware and software in recent
years, the languages and models that we use to program these machines have
remained much more static. This is not from a lack of effort, but instead by
virtue of the fact that the foundation that many programming languages are
built on is not sufficient for the level of expressivity required for parallel
work. The result is an implicit trade-off between programmability and
performance which is made worse due to the fact that, whilst many scientific
users are experts within their own fields, they are not HPC experts.
Type oriented programming looks to address this by encoding the complexity of
a language via the type system. Most of the language functionality is contained
within a loosely coupled type library that can be flexibly used to control many
aspects such as parallelism. Due to the high level nature of this approach
there is much information available during compilation which can be used for
optimisation and, in the absence of type information, the compiler can apply
sensible default options thus supporting both the expert programmer and novice
alike.
We demonstrate that, at no performance or scalability penalty when running on
up to 8196 cores of a Cray XE6 system, codes written in this type oriented
manner provide improved programmability. The programmer is able to write
simple, implicit parallel, HPC code at a high level and then explicitly tune by
adding additional type information if required.Comment: As presented at the Exascale Applications and Software Conference
(EASC), 9th-11th April 201
- âŠ