In this post I will share about what DSL and how we can create our own.
Domain Specific languages are specialized languages targeted to domain, it has less vocabulary as compared to general purpose languages. DSL is not new concepts it has been around for ages for eg Cascading Style Sheets is one of the very popular one that we get exposed to everyday, excel spreadsheet macros, SQL,Build tools like make , Ant etc and many tools in unix like awk,sed etc.
XML can be also categorized as DSL but not sure how many people will love that!
DSL maps problem domain to solution domain.
DSL are built using general purpose language and are targeted for specific domain like
- Accounting domain
- Insurance domain
- Trading domain
- Testing etc
DSL Categories
Internal
Internal domain specific language |
Internal DSL can be also seen as a library implemented on top of host language.
External
External DSL is not written in the same host language , it can be written in some scripting language and then parsed and compiled.
External domain specified language |
Building external DSL is more involved , it has various new components like lexical analyzer , parser , compiler , code generator.
DSL does not have to be textual , for some domains it makes sense to create visual DSL..
Lets gets started
Enough of talking! show me some DSL.
All the examples shown are based on java, although java is not the best language to build DSL but a lot is possible with such a non expressive language.
Rule engine
State machine
Testing framework
Trading System
How to build
Now we have seen some real examples of DSL, let's discuss on how to building one.
- Domain is the core thing in DSL, getting a language that is based on domain core concepts is very important.
- Implicit context - Remembering context in which terms are used plays an important role in expressiveness.
- Well designed abstraction - users with beginner level knowledge should also be able to use language.
- Tools - Having tools like dsl workbench plays an important role in adoption.
Trade off
Nothing comes for free and DSL also have some
- Build complexity.
- Learning curve for users of language
- Exceptions and error handling are not trivial
- Performance issue.
- Integration issue
- Backward compatibility.
No comments:
Post a Comment