20 research outputs found

    On the footprints of join points : the blueprint approach

    Get PDF
    Aspect-oriented techniques are widely used to better modularize object-oriented programs by introducing crosscutting concerns in a safe and non-invasive way, i.e., aspectoriented mechanisms better address the modularization of functionality that orthogonally crosscuts the implementation of the application. Unfortunately, as noted by several researchers, most of the current aspect-oriented approaches are too coupled with the application code, and this fact hinders the concerns separability and consequently their re-usability since each aspect is strictly tailored on the base application. Moreover, the join points (i.e., locations affected by a crosscutting concerns) actually are defined at the operation level. It implies that the possible set of join points includes every operation (e.g., method invocations) that the system performs. Whereas, in many contexts we wish to define aspects that are expected to work at the statement level, i.e., by considering as a join point every point between two generic statements (i.e., lines of code). In this paper, we present our approach, called Blueprint, to overcome the abovementioned limitations of the current aspect-oriented approaches. The Blueprint consists of a new aspect-oriented programming language based on modeling the join point selection mechanism at a high-level of abstraction to decouple aspects from the application code. To this regard, we adopt a high-level pattern-based join point model, where join points are described by join point blueprints, i.e., behavioral patterns describing where the join points should be found

    Dedicated Programming Support for Context-Aware Ubiquitous Applications

    Full text link

    Bridging the Gap between Machine and Language using First-Class Building Blocks

    Get PDF
    High-performance virtual machines (VMs) are increasingly reused for programming languages for which they were not initially designed. Unfortunately, VMs are usually tailored to specific languages, offer only a very limited interface to running applications, and are closed to extensions. As a consequence, extensions required to support new languages often entail the construction of custom VMs, thus impacting reuse, compatibility and performance. Short of building a custom VM, the language designer has to choose between the expressiveness and the performance of the language. In this dissertation we argue that the best way to open the VM is to eliminate it. We present Pinocchio, a natively compiled Smalltalk, in which we identify and reify three basic building blocks for object-oriented languages. First we define a protocol for message passing similar to calling conventions, independent of the actual message lookup mechanism. The lookup is provided by a self-supporting runtime library written in Smalltalk and compiled to native code. Since it unifies the meta- and base-level we obtain a metaobject protocol (MOP). Then we decouple the language-level manipulation of state from the machine-level implementation by extending the structural reflective model of the language with object layouts, layout scopes and slots. Finally we reify behavior using AST nodes and first-class interpreters separate from the low-level language implementation. We describe the implementations of all three first-class building blocks. For each of the blocks we provide a series of examples illustrating how they enable typical extensions to the runtime, and we provide benchmarks validating the practicality of the approaches

    Bridging the Gap between Machine and Language using First-Class Building Blocks

    Get PDF
    High-performance virtual machines (VMs) are increasingly reused for programming languages for which they were not initially designed. Unfortunately, VMs are usually tailored to specific languages, offer only a very limited interface to running applications, and are closed to extensions. As a consequence, extensions required to support new languages often entail the construction of custom VMs, thus impacting reuse, compatibility and performance. Short of building a custom VM, the language designer has to choose between the expressiveness and the performance of the language. In this dissertation we argue that the best way to open the VM is to eliminate it. We present Pinocchio, a natively compiled Smalltalk, in which we identify and reify three basic building blocks for object-oriented languages. First we define a protocol for message passing similar to calling conventions, independent of the actual message lookup mechanism. The lookup is provided by a self-supporting runtime library written in Smalltalk and compiled to native code. Since it unifies the meta- and base-level we obtain a metaobject protocol (MOP). Then we decouple the language-level manipulation of state from the machine-level implementation by extending the structural reflective model of the language with object layouts, layout scopes and slots. Finally we reify behavior using AST nodes and first-class interpreters separate from the low-level language implementation. We describe the implementations of all three first-class building blocks. For each of the blocks we provide a series of examples illustrating how they enable typical extensions to the runtime, and we provide benchmarks validating the practicality of the approaches

    DYNAMIC LANGUAGE UPDATING

    Get PDF
    With respect to traditional systems, language interpreters are hard to evolve and the adoption of evolved languages is slow. Language evolution is hindered by the fact that their implementations often overlook design principles, especially those related to modularity. Consequently, language implementations and their updates are monolithic. Language evolution often breaks the backward compatibility and requires developers to rewrite their applications. Furthermore, there is little or no support to evolve language interpreters at runtime. This would be useful for systems that cannot be shut down and to support context-aware interpreters. To tackle these issues, we designed the concept of open interpreters which provide support for language evolution through reflection. Open interpreters allow one to partially update a language to maintain the backward compatibility. Furthermore, they allow one to dynamically update a language without stopping the overlying application. Open interpreters can be dynamically tailored on the task to be solved. The peculiarity of this approach is that the evolution code is completely separated from the application or the original interpreter code. In this dissertation we define the concept of open interpreters, we design a possible implementation model, we describe a prototype implantation and provide the proof-of-concept examples applied to various domains

    Un interpréteur extensible pour le prototypage des langages d'aspects

    Get PDF
    The value of using different (possibly domain-specific) aspect languages to deal with a variety of crosscutting concerns in the development of complex software systems is well recognized. One should be able to use several of these languages together in a single program. However, on the one hand, developing a new Domain-Specific Aspect Language (DSAL) in order to capture all common programming patterns of the domain takes a lot of time, and on the other hand, the designer of a new language should manage the interactions with the other languages when they are used together. In this thesis, we introduce support for rapid prototyping and composing aspect languages based on interpreters. We start from a base interpreter of a subset of Java and we analyze and present a solution for its modular extension to support AOP based on a common semantics aspect base defined once and for all. The extension, called the aspect interpreter, implements a common aspect mechanism and leaves holes to be defined when developing concrete languages. The power of this approach is that the aspect languages are directly implemented from their operational semantics. This is illustrated by implementing a lightweight version of AspectJ. To apply the same approach and the same architecture to full Java without changing its interpreter (JVM), we reuse AspectJ to perform a first step of static weaving, which we complement by a second step of dynamic weaving, implemented through a thin interpretation layer. This can be seen as an interesting example of reconciling interpreters and compilers. We validate our approach by describing prototypes for AspectJ, EAOP, COOL and a couple of other DSALs and demonstrating the openness of our AspectJ implementation with two extensions, one dealing with dynamic scheduling of aspects and another with alternative pointcut semantics. Different aspect languages implemented with our framework can be easily composed. Moreover, we provide support for customizing this composition.L'intĂ©rĂȘt de l'utilisation de diffĂ©rents langages d'aspects pour faire face Ă  une variĂ©tĂ© de prĂ©occupations transverses dans le dĂ©veloppement de systĂšmes logiciels complexes est reconnu. Il faudrait ĂȘtre capable d'utiliser plusieurs de ces langages dans un seul logiciel donnĂ©. Cependant, d'une part la phase de dĂ©veloppement d'un nouveau langage dĂ©diĂ© capturant tous les patrons de programmation du domaine prend beaucoup de temps et, d'autre part, le concepteur doit gĂ©rer les interactions avec les autres langages quand ils sont utilisĂ©s simultanĂ©ment. Dans cette thĂšse, nous introduisons un support pour le prototypage rapide et la composition des langages d'aspects, basĂ© sur des interprĂ©teurs. Nous partons d'un interprĂ©teur d'un sous-ensemble de Java en Ă©tudiant et en dĂ©finissant son extension modulaire afin de supporter la programmation par aspects en se basant sur une sĂ©mantique d'aspects partagĂ©e. Dans l'interprĂ©teur d'aspects, nous avons implĂ©mentĂ© des mĂ©canismes communs aux langages d'aspects en laissant des trous Ă  dĂ©finir pour implĂ©menter des langages d'aspects concrets. La puissance de cette approche est de permettre d'implĂ©menter directement les langages Ă  partir de leur sĂ©mantique. L'approche est validĂ©e par l'implĂ©mentation d'une version lĂ©gĂšre d'AspectJ. Pour appliquer la mĂȘme approche et la mĂȘme architecture Ă  Java sans modifier son interprĂ©teur (JVM), nous rĂ©utilisons AspectJ pour effectuer une premiĂšre Ă©tape de tissage statique, qui est complĂ©tĂ©e par une deuxiĂšme Ă©tape de tissage dynamique, implĂ©mentĂ©e par une mince couche d'interprĂ©tation. C'est un exemple montrant l'intĂ©rĂȘt qu'il peut y avoir Ă  concilier interprĂ©tation et compilation. Des prototypes pour AspectJ, EAOP, COOL et des langages dĂ©diĂ©s simples, valident notre approche. Nous montrons le caractĂšre ouvert de notre implĂ©mentation d'AspectJ en dĂ©crivant deux extensions: la premiĂšre permet l'ordonnancement dynamique des aspects, la deuxiĂšme propose des sĂ©mantiques alternatives pour les points de coupe. Les langages d'aspects implĂ©mentĂ©s avec notre approche peuvent ĂȘtre facilement composĂ©s. En outre, cette composition peut ĂȘtre personnalisĂ©e

    Modularisation de la sécurité informatique dans les systÚmes distribués

    Get PDF
    Addressing security in the software development lifecycle still is an open issue today, especially in distributed software. Addressing security concerns requires a specific know-how, which means that security experts must collaborate with application programmers to develop secure software. Object-oriented and component-based development is commonly used to support collaborative development and to improve scalability and maintenance in software engineering. Unfortunately, those programming styles do not lend well to support collaborative development activities in this context, as security is a cross-cutting problem that breaks object or component modules. We investigated in this thesis several modularization techniques that address these issues. We first introduce the use of aspect-oriented programming in order to support secure programming in a more automated fashion and to minimize the number of vulnerabilities in applications introduced at the development phase. Our approach especially focuses on the injection of security checks to protect from vulnerabilities like input manipulation. We then discuss how to automate the enforcement of security policies programmatically and modularly. We first focus on access control policies in web services, whose enforcement is achieved through the instrumentation of the orchestration mechanism. We then address the enforcement of privacy protection policies through the expert-assisted weaving of privacy filters into software. We finally propose a new type of aspect-oriented pointcut capturing the information flow in distributed software to unify the implementation of our different security modularization techniques.IntĂ©grer les problĂ©matiques de sĂ©curitĂ© au cycle de dĂ©veloppement logiciel reprĂ©sente encore un dĂ©fi Ă  l’heure actuelle, notamment dans les logiciels distribuĂ©s. La sĂ©curitĂ© informatique requiert des connaissances et un savoir-faire particulier, ce qui implique une collaboration Ă©troite entre les experts en sĂ©curitĂ© et les autres acteurs impliquĂ©s. La programmation Ă  objets ou Ă  base de composants est communĂ©ment employĂ©e pour permettre de telles collaborations et amĂ©liorer la mise Ă  l’échelle et la maintenance de briques logicielles. Malheureusement, ces styles de programmation s’appliquent mal Ă  la sĂ©curitĂ©, qui est un problĂšme transverse brisant la modularitĂ© des objets ou des composants. Nous prĂ©sentons dans cette thĂšse plusieurs techniques de modularisation pour rĂ©soudre ce problĂšme. Nous proposons tout d’abord l’utilisation de la programmation par aspect pour appliquer de maniĂšre automatique et systĂ©matique des techniques de programmation sĂ©curisĂ©e et ainsi rĂ©duire le nombre de vulnĂ©rabilitĂ©s d’une application. Notre approche se focalise sur l’introduction de vĂ©rifications de sĂ©curitĂ© dans le code pour se protĂ©ger d’attaques comme les manipulations de donnĂ©es en entrĂ©e. Nous nous intĂ©ressons ensuite Ă  l’automatisation de la mise en application de politiques de sĂ©curitĂ© par des techniques de programmation. Nous avons par exemple automatisĂ© l’application de rĂšgles de contrĂŽle d’accĂšs fines et distribuĂ©es dans des web services par l’instrumentation des mĂ©canismes d’orchestration de la plate-forme. Nous avons aussi proposĂ© des mĂ©canismes permettant l’introduction d’un filtrage des donnĂ©es Ă  caractĂšre privĂ©e par le tissage d’aspects assistĂ© par un expert en sĂ©curitĂ©
    corecore