Internal DSL Development with F# | via @tomaspetricek

Recently, Tomas Petricek gave a talk on the topic of internal DSL development with F#. In particular, he discussed the motivation behind DSL development, and demonstrated a number of example DSLs using F#. If you are interested, please check it out —


TUDelft | Lectures of Model-Driven Software Development Course

The following lectures on Model-Driven Software Development(MDSD) are given by Dr. Eelco Visser at Tudelft  in IN4308 course.   To get the basic idea of MDSD and motivation behind it , please go through these lectures .

Lecture 1 : MDSD : Introduction and Overview

Lecture 2 : Domain Analysis & Data Modeling

Lecture 3 & 4 : Web Abstraction

In these lectures, WebDSL , a DSL for Web Application is introduced.  Continuing from the previous discussion on Domain Analysis, these lectures address the design issues and motivation behind abstracting the domain of Web Application using this DSL.

Lecture 5 : Web Abstraction to actual Implementation

Inside Software Language Composition

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!


1. Jr., G.L.S.: Growing a language. Higher-Order and Symbolic Computation 12(3), 221–236 (1999) .

Domain Specific Languages (DSLs)

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)[1]; 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.

Figure 1:  DSLs are bridging the semantic gaps.


“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.

Figure 2 :  Vertical domain specialization of DSLs in a complex system.

Although in recent years DSL-centric paradigm gets wider-applicability in various application domains due to the increase of domain specialization, the fundamental ideas[2] of DSLs existed  long before.

Continue reading “Domain Specific Languages (DSLs)”