Implementing Polymorphism by @the_antlr_guy : http://goo.gl/IM9UN
Great Read | Bootstrapping a simple compiler from nothing @ http://bit.ly/k3S3kz
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.
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!
1. Jr., G.L.S.: Growing a language. Higher-Order and Symbolic Computation 12(3), 221–236 (1999) .
This post describes the motivation behind implementing a new language for a problem domain.Domain-specific languages (DSLs) are basically programming languages. But they are specifically targeted/tailored towards particular problem domains. Hence, it implies that DSLs are narrow in applicably unlike General-purpose programming languages(GPLs); thus, DSL precisely abstracts the domain and its semantics. At the same time, being specific to a particular problem domains make it hard to reuse and adapt to a new problem domains or in the same evolving domain with new set of requirements.
Domain-specific languages (DSLs) are basically programming languages. But they are specifically targeted/tailored towards particular problem domains. Hence, it implies that DSLs are narrow in applicably unlike General-purpose programming languages(GPLs); thus, DSL precisely abstracts the domain and its semantics. At the same time, being specific to a particular problem domains make it hard to reuse and adapt to a new problem domains or in the same evolving domain with new set of requirements.
“Only way to manage complexity is to bring order to chaos”
Complex software systems consist of several concerns such as, performance, reliability , fault-tolerance, persistency. Hence, domain specialization is required to capture these concerns precisely and to perform various analyses specific to the domain. DSLs , thus reduce the complexity of complex systems by providing high level linguistic abstraction through succinct syntax and by isolating concerns from one another which additionally results in highly cohesive sub-systems. Following figure illustrate the fact that DSLs covers various concerns of complex software systems vertically rather than horizontally.
Although in recent years DSL-centric paradigm gets wider-applicability in various application domains due to the increase of domain specialization, the fundamental ideas of DSLs existed long before.