2 research outputs found

    Run-time Variability with First-class Contexts

    Get PDF
    Software must be regularly updated to keep up with changing requirements. Unfortunately, to install an update, the system must usually be restarted, which is inconvenient and costly. In this dissertation, we aim at overcoming the need for restart by enabling run-time changes at the programming language level. We argue that the best way to achieve this goal is to improve the support for encapsulation, information hiding and late binding by contextualizing behavior. In our approach, behavioral variations are encapsulated into context objects that alter the behavior of other objects locally. We present three contextual language features that demonstrate our approach. First, we present a feature to evolve software by scoping variations to threads. This way, arbitrary objects can be substituted over time without compromising safety. Second, we present a variant of dynamic proxies that operate by delegation instead of forwarding. The proxies can be used as building blocks to implement contextualization mechanisms from within the language. Third, we contextualize the behavior of objects to intercept exchanges of references between objects. This approach scales information hiding from objects to aggregates. The three language features are supported by formalizations and case studies, showing their soundness and practicality. With these three complementary language features, developers can easily design applications that can accommodate run-time changes

    Primitives for the Dynamic Evolution of Component-Based Applications

    No full text
    Due to the coarse granularity of components-based applications, components platforms are good candidates for enabling dynamic software evolution. The LuckyJ platform was designed to allow the dynamic evolution of applications. It implements the three primitives load, remove and replace to modify the components set. The design and implementation of a web server outlined several evolution patterns that should be integrated in LuckyJ to ease the task of maintainers and developers of applications that evolve dynamically. This lead to the definition of additional primitives as well as a language that would be used to automate the updating process in such a dynamic setting
    corecore