186,220 research outputs found

    On the design of software composition : mechanisms and the analysis of composition conflicts

    Get PDF
    A large variety of programming languages exists, and these languages differ\ud substantially with regard to the modularization and composition mechanisms they support. Such differences may have an impact on important software engineering characteristics, such as reusability, exibility, analyzability and stability. The design of software languages often entails making trade-offs between such characteristics. In this thesis, we study several state-of-the-art programming languages, in particular focusing on aspect-oriented languages. Aspects have been proposed as a means to improve software modularization in the presence of crosscutting concerns; the aim is that such improved modularization leads to better software maintainability. In this thesis, we strive to improve several engineering characteristics, in particular those that are influenced by the use of aspect-oriented languages. Specically, to improve the analyzability of programs written in aspect-oriented languages, we propose several analysis techniques. First, we introduce an algorithm that ensures the declarative application of introductions by aspects. However, the use of introductions can also cause new kinds of composition conflicts. We propose automated tools to detect such conflicts. In addition, we employ graph-based formalisms to detect several other categories of issues related to introductions by aspects. In addition, we attempt to improve changeability, both from the perspective of software engineers who write programs using aspects, as well as from the perspective of language engineers who prototype new (aspect) languages. To\ud this end, we define an aspect metamodel interpreter framework, which can be used to define many aspect-oriented languages, including domain-specific aspect languages, of which we give several examples. Using this framework, it is also possible to write programs that use aspects written in multiple aspect languages, expressed in terms of the interpreter framework. Finally, we present a powerful composition infrastructure that supports the definition of a range of composition mechanisms, such as different styles of inheritance, but also aspect-based or domain-specific composition mechanisms. The infrastructure is defined in terms of a language that defines no fixed composition semantics, but provides a generic mechanism for constructing composition mechanisms from primitives that are expressed as rst-class objects

    Free composition instead of language dictatorship

    Get PDF
    Historically, programming languages have been—benevolent—dictators: reducing all possible semantics to specific ones offered by a few built-in language constructs. Over the years, some programming languages have freed the programmers from the restrictions to use only built-in libraries, built-in data types, and builtin type-checking rules. Even though—arguably—such freedom could lead to anarchy, or people shooting themselves in the foot, the contrary tends to be the case: a language that does not allow for extensibility is depriving software engineers of the ability to construct proper abstractions and to structure software in the most optimal way. Therefore the software becomes less structured and maintainable than would be possible if the software engineer could express the behavior of the program with the most appropriate abstractions. The idea proposed by this paper is to move composition from built-in language constructs to programmable, first-class abstractions in a language. We discuss several prototypes of the Co-op language, which show that it is possible, with a relatively simple model, to express a wide range of compositions as first-class concepts

    Liberating Composition from Language Dictatorship

    Get PDF
    Historically, programming languages have been—although benevolent—dictators: fixing a lot of semantics into built-in language constructs. Over the years, (some) programming languages have freed the programmers from restrictions to use only built-in libraries, built-in data types, or built-in type checking rules. Even though, arguably, such freedom could lead to anarchy, or people shooting themselves in the foot, the contrary tends to be the case: a language that does not allow for extensibility, is depriving software engineers from the ability to construct proper abstractions and to structure software in the most optimal way. Instead, the software becomes less structured and maintainable than would be possible if the software engineer could express the behavior of the program with the most appropriate abstractions. The new idea proposed by this paper is to move composition from built-in language constructs to programmable, first-class abstractions in the language. As an emerging result, we present the Co-op concept of a language, which shows that it is possible with a relatively simple model to express a wide range of compositions as first-class concepts

    A Case for Custom, Composable Composition Operators

    Get PDF
    Programming languages typically support a fixed set of com- position operators, with fixed semantics. This may impose limits on software designers, in case a desired operator or semantics are not supported by a language, resulting in suboptimal quality characteristics of the designed software system. We demonstrate this using the well-known State design pattern, and propose the use of a composition infrastructure that allows the designer to define custom, composable composition operators. We demonstrate how this approach improves several quality factors of the State design pattern, such as reusability and modularity, while taking a reason- able amount of effort to define the necessary pattern-related code
    corecore