Language composition is an integral aspect of Software Language Engineering(SLE) to enable modularity in language definition and ensure reusability of the existing language constructs.
“From now on, a main goal in designing a language should be to plan for growth.” – Guy Steele: Growing a Language, OOPSLA’98 invited talk[1].
Ideally, a language should be designed in such a way that evolving it with respect to different language constructs should require the minimum effort. However, that is far from reality in SLE. It is well-known that designing and implementing a high quality language requires considerable amount of effort. Therefore, to incorporate agile development concepts in SLE and to support language evolution and integration in modest maintenance effort, reusability of the existing language constructs is considered as a fundamental functional requirement of SLE.
The complexity of this problem increases with the ubiquitous proliferation of Domain-specific Languages(DSLs), since composition of various DSLs in the context of solving different problems has become a real-world use-case scenario. Thus, wider-acceptability of DSLs further warrant modular composition of language features since the realization of the DSLs can only be discerned if efforts put in their actual implementation can somehow be optimized.
Currently, we are working on designing a meta-language that will support modular definition of the language constructs. Primary objective of this endeavor is to promote “Language-as-a-Library” ideology in SLE. Modularity is another integral aspect of this meta-language that will allow language designer to create different language modules and can be used as in by adding reference. Therefore, we envisage that the outcome of this research would be a framework that will facilitate rapid software language development by reusing the exiting language features as much as possible and thus, it will enable cost-effective (agile) language development.
In addition , with the goal of designing language in a modular and reusable manner, we started with a survey to find out the existing state-of-the-art framework that supports several features discussed above. In the next blog posts, we will discuss about the potential outcome(s) of the research along with, the existing strategies of software language composition(SLC), the technologies promoting the notion of modular and composable language. Stay tuned!
References
1. Jr., G.L.S.: Growing a language. Higher-Order and Symbolic Computation 12(3), 221–236 (1999) .