The history of programming languages shows a continuous search for new composition mechanisms, which are better suited for structuring increasingly complex software systems into modules that can be developed and reused independently. Well-known examples are procedure calls, object aggregation, function composition, inheritance, delegation, mix-ins, aspects, andsoforth. Composition mechanisms can address various forms of composition of objects or components at the level of their behavior or interactions, e.g., by design patterns, contracts or explicit protocols. They can be general-purpose, but there is also a wide variety of domain-specific compositions, which are applicable for certain categories of applications.
However, most languages adopt a very small and fixed set of composition mechanisms, usually with explicit notation and predefined semantics. If a language does not provide any mechanisms with the required compositional behavior, programmers need to write workarounds in the application program, which typically have a negative impact on the quality of the software. Alternatively they may introduce the new composition mechanisms through macros, libraries, frameworks or language extensions, which also negatively affects the application if it is not well-integrated with the application program.
This workshop intends to stimulate research in programming languages and software development by exploring the notion that languages should not offer a limited set of fixed composition mechanisms, but allow for flexibility, a wide variety of compositions, domain-specific and tailored compositions, or programmable compositions of various program artifacts.