SlideShare a Scribd company logo
Using Scala for building DSL’s

                         Abhijit Sharma
                         Innovation Lab,
                         BMC Software




                                           1
What is a DSL?
• Domain Specific Language
 • Appropriate abstraction level for domain - uses precise
   concepts and semantics of domain
 • Concise and expressive for a specific domain – not general
   purpose
 • Domain experts can communicate, critique better with
   programmers and amongst themselves
 • Math – Mathematica, UI – HTML, CSS, Database - SQL




                                                                2
DSL’s at large - Ant
• Build tool Ant is an XML based DSL
   • Task to build a jar with a dependency on task compile




                                                             3
DSL’s at large – RoR ActiveRecord
• Web App framework Ruby on Rails
   • ActiveRecord to model domain objects and persist them –
   • Domain constraint implementations do not clutter API – uniqueness,
     cardinality, null check




                                                                          4
Cloud Computing DSL
• Audience – Non tech savvy cloud end users
• DSL - English language sentence for requesting a
  machine with technical and price specifications




                                                     5
Cloud Computing DSL - Model
• Domain Concept – Machine
  • Technical specifications - cpu, os
  • Pricing specifications - spot price, pricing strategy –
    default or define inline

                 Machine

                 •cpu:Cpu
                 •os:String
                 •spotPrice:Int       Cpu

                                  •arch: String
                                  •cpus: Int




                                                         6
Cloud Computing Java DSL
• Builder pattern - Method Chaining Fluent Interface




                                                       7
Cloud Computing Java DSL - Pattern
• Builder Pattern - Method Chaining




                                      8
Cloud Computing Java DSL - Issues
• Syntax restrictions, verbosity – parenthesis, dot, semi-
  colons
• Non Domain complexity – Builder
• No Inline strategy – no higher order functions




                                                        9
DSL Classification
• Internal DSL
  • Embedded in a host language like Ruby, Scala,
    Groovy – use their features
  • Bound by host language syntax and semantics
• External DSL – standalone developed ground up
  • Define syntax and semantics as a grammar
  • Use tools like lexical analyzers, parsers,
    interpretation, code generators


                                                    10
Internal DSL Classification
• Internal DSL
  • Generative - Ruby, Groovy Techniques like
    runtime metaprogramming
      • Meta Objects – inject new behaviour at runtime
  • Embedded in host language
    • Smart API – Method chaining – Java etc.
    • Syntax tree manipulation – Groovy, Ruby libraries
    • Type Embedding – Scala – statically typed, type
      constraints, no invalid operations on types

                                                         11
Scala Language
• Scala is a “scalable” language
• JVM based – leverage libs, JVM perf,
  tools, install base etc
• Mixed Paradigm – Object Oriented +
  Functional Programming
    • Object Oriented Programming - Improves on Java
      OOP (Traits, no statics, advanced types)



                                                  12
Scala Language
• Functional Programming - Functions
  • No side effects and immutable variables
  • “First-class” citizens - Can be assigned,
    passed around, returned
  • Higher order functions promote composition
    using other more primitive functions
• Lots of powerful features – discussed later
• Statically Typed – Type Safe DSL
                                                13
Scala – Readable style - Syntax
• Elegant, succinct syntax unlike verbose Java
  • Optional dots, Operators are methods
  • Syntactic sugar method takes one/zero argument, drop
    period and parentheses




                                                           14
Scala – Readable style - Inference
• Type inference minimizes the need for explicit type
  information – still Type safe




                                                        15
Scala - Implicits
• Implicit Conversions – wrap original type e.g. Integer
  • Generative expression - Implicit conversion converts the 1,
    an Int, to a RichInt which defines a ‘to’ method
  • Lexically scoped – Unlike other languages like Groovy where
    such modifications are global in scope
• Implicit argument to function – don’t need to pass –
  Concise syntax




                                                              16
Scala - Higher order functions
• Functions as parameters or return values
• Flexible mechanism for composition
• Anonymous Functions




                                             17
Scala - Higher order functions
• Currying – set some parameters – concise &
  powerful




                                               18
Scala – Functional Combinators
• Calculate the total price of all Linux machines – uses
  several combinators – filter, map, foldLeft – all take
  other functions as predicates




                                                       19
Scala – Cloud Computing DSL - Relook




                                       20
Scala – Cloud Computing DSL - Implicits
• Consider excerpt - 8 cpus “64bit” – Using Implicit conversion we
  get the object representing the CPU - Cpu(8, 64bit)




                                                               21
Scala – Cloud Computing DSL – E2E
DSL - new Machine having (8 cpus
   "64bit") with_os “Linux“
•   Implicit Conversion
•   Method Chaining – Builder pattern –
    without the cruft
•   Syntactic sugar no parenthesis, dot,
    brackets




                                           22
Scala – Cloud Computing DSL – Functions
•   Using Higher Order
    Functions – Flexible pricing
•   Spot Price Threshold - Inline
    strategy - Anonymous
    Functions




                                          23
Scala - Pattern Matching
• Pattern Matching – Switch
  Case on Steroids
• Cases can include value,
  types, wild-cards, sequences,
  tuples, deep inspection of
  objects




                                  24
Scala - Pattern Matching &Case Classes
• Case Classes – simplified
  construction and can be used
  in pattern matching
• Pattern matching on Case
  Classes
   • Deep pattern matching on
     object contents
   • Make good succinct
     powerful DSL




                                     25
Scala - Pattern Matching – Visitor Pattern
• Pattern match and case
  classes – extensible visitor
• Different operations on tree
   • Expression Evaluation
   • Prefix Notation
• Very expressive, flexible and
  concise code




                                             26
Scala – For Comprehensions
• Loop through Iterable sequences and
  comprehend/compute something
  • E.g. Filter 32, 64 bit architectures




                                           27
Scala – For Comprehensions + Option
• Wrap vars & function returns as
  Option – Null Checks, resilient
  programming
• Option sub classes : None and Some
• Options with for comprehensions,
  automatic removal of None
  elements from comprehensions




                                       28
Scala – For Comprehensions + Option
• Validate and audit
  machines
• Using Options with for
  comprehensions eliminate
  the need for most
  “null/empty” checks.
• Succinct, safe DSL with
  uncluttered API




                                      29
External DSL in Scala
DSL - having (8 cpus "64bit") with_os "Linux" at_spot_price 30
• Parser Combinator library – available as a library on host
  language – Scala
• External Parser Generators like JavaCC – use tools to
  generate code for tokenizing, parsing
• Parser Combinator Specification is like a BNF grammar




                                                                 30
External DSL in Scala
• Each function is a parser - works on
  a portion of the input, parses it and
  may optionally pass on the
  remaining part to the next parser in
  the chain via the combinator
• Several combinators provided by the
  library like ‘~’ the sequencing
  combinator composes two parsers
  sequentially.
• Optional function application
  combinator (^^) can work, applying
  the function on the result of the
  sequencing combinator.




                                          31
Thanks

   abhijit.sharma@gmail.com
     Twitter : sharmaabhijit
Blog : abhijitsharma.blogspot.com


                                    32
Scala - Traits
•   Traits are collections of fields and
    behaviors that you can extend or mixin
    to your classes.
•   Modularize these concerns, yet enable
    the fine-grained “mixing” of their
    behaviors with other concerns at build
    or run time – Callbacks & Ordered
•   Traits can be mixed-in at class level or
    at instance creation
•   AOP Pervasive concerns - Logging,
    Ordering, Callback Handling




                                               33

More Related Content

PPTX
power flow and optimal power flow
PPTX
gorakhpur Railway internship
PPTX
Tarrif and load curves
PDF
Microgrid Protection
PPT
DSP architecture
PPTX
RENEWABLE ENERGY TECHNOLOGIES unit1.pptx
power flow and optimal power flow
gorakhpur Railway internship
Tarrif and load curves
Microgrid Protection
DSP architecture
RENEWABLE ENERGY TECHNOLOGIES unit1.pptx

What's hot (6)

PDF
Project Report Of SRAM Design
PPT
Routing.ppt
PPT
NUCLEAR MICROBATTARY
PPTX
An Optimal Power Flow (OPF) Method with Improved Voltage Stability Analysis
PPT
Programmableperipheralinterface 8255 ppt
PPTX
Synthesis
Project Report Of SRAM Design
Routing.ppt
NUCLEAR MICROBATTARY
An Optimal Power Flow (OPF) Method with Improved Voltage Stability Analysis
Programmableperipheralinterface 8255 ppt
Synthesis
Ad

Viewers also liked (20)

KEY
Simple Scala DSLs
PDF
A Field Guide to DSL Design in Scala
PDF
Domain specific languages and Scala
PPTX
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
PPTX
Reactive X 响应式编程
PPTX
PPT
Implementing External DSLs Using Scala Parser Combinators
PDF
University Students Fighting World Hunger - Slacktivism vs. Activism. Does a ...
PPT
Detskaya Rabota2
PPS
PPT
Earth Day
PPT
Lourenza
PPT
Tamk Conference Finished 2008
PPSX
Johnstown Pa Defense Hub
PPT
Web Configurator
PDF
IVI (Tom Nastas) Presentation At 3rd Moscow Venture Fair
PPT
Sentimenduak
PDF
Fairgrounds Proposal
PPT
Eu Kyoto Prototcol Class Presentation Sumiko
PPT
Simple Scala DSLs
A Field Guide to DSL Design in Scala
Domain specific languages and Scala
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
Reactive X 响应式编程
Implementing External DSLs Using Scala Parser Combinators
University Students Fighting World Hunger - Slacktivism vs. Activism. Does a ...
Detskaya Rabota2
Earth Day
Lourenza
Tamk Conference Finished 2008
Johnstown Pa Defense Hub
Web Configurator
IVI (Tom Nastas) Presentation At 3rd Moscow Venture Fair
Sentimenduak
Fairgrounds Proposal
Eu Kyoto Prototcol Class Presentation Sumiko
Ad

Similar to Writing DSL's in Scala (20)

PDF
Using Scala for building DSLs
PDF
Scala in Model-Driven development for Apparel Cloud Platform
PPTX
AestasIT - Internal DSLs in Scala
PPT
Indic threads pune12-polyglot & functional programming on jvm
PDF
An Introduction to Scala for Java Developers
PDF
BCS SPA 2010 - An Introduction to Scala for Java Developers
PDF
Getting Started With Scala
PDF
Getting Started With Scala
PDF
Scala, Akka, and Play: An Introduction on Heroku
PDF
Quick introduction to scala
PDF
Software Engineering Thailand: Programming with Scala
PPTX
All about scala
PPT
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
PDF
Scala a case4
PDF
Typesafe stack - Scala, Akka and Play
PPTX
Scala adoption by enterprises
KEY
Polyglot Grails
PDF
An Introduction to Scala - Blending OO and Functional Paradigms
PDF
Miles Sabin Introduction To Scala For Java Developers
PDF
A Brief Introduction to Scala for Java Developers
Using Scala for building DSLs
Scala in Model-Driven development for Apparel Cloud Platform
AestasIT - Internal DSLs in Scala
Indic threads pune12-polyglot & functional programming on jvm
An Introduction to Scala for Java Developers
BCS SPA 2010 - An Introduction to Scala for Java Developers
Getting Started With Scala
Getting Started With Scala
Scala, Akka, and Play: An Introduction on Heroku
Quick introduction to scala
Software Engineering Thailand: Programming with Scala
All about scala
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Scala a case4
Typesafe stack - Scala, Akka and Play
Scala adoption by enterprises
Polyglot Grails
An Introduction to Scala - Blending OO and Functional Paradigms
Miles Sabin Introduction To Scala For Java Developers
A Brief Introduction to Scala for Java Developers

Recently uploaded (20)

PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Modernizing your data center with Dell and AMD
PDF
cuic standard and advanced reporting.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Advanced IT Governance
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Network Security Unit 5.pdf for BCA BBA.
Unlocking AI with Model Context Protocol (MCP)
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
NewMind AI Weekly Chronicles - August'25 Week I
NewMind AI Monthly Chronicles - July 2025
Spectral efficient network and resource selection model in 5G networks
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Modernizing your data center with Dell and AMD
cuic standard and advanced reporting.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Electronic commerce courselecture one. Pdf
Advanced IT Governance

Writing DSL's in Scala

  • 1. Using Scala for building DSL’s Abhijit Sharma Innovation Lab, BMC Software 1
  • 2. What is a DSL? • Domain Specific Language • Appropriate abstraction level for domain - uses precise concepts and semantics of domain • Concise and expressive for a specific domain – not general purpose • Domain experts can communicate, critique better with programmers and amongst themselves • Math – Mathematica, UI – HTML, CSS, Database - SQL 2
  • 3. DSL’s at large - Ant • Build tool Ant is an XML based DSL • Task to build a jar with a dependency on task compile 3
  • 4. DSL’s at large – RoR ActiveRecord • Web App framework Ruby on Rails • ActiveRecord to model domain objects and persist them – • Domain constraint implementations do not clutter API – uniqueness, cardinality, null check 4
  • 5. Cloud Computing DSL • Audience – Non tech savvy cloud end users • DSL - English language sentence for requesting a machine with technical and price specifications 5
  • 6. Cloud Computing DSL - Model • Domain Concept – Machine • Technical specifications - cpu, os • Pricing specifications - spot price, pricing strategy – default or define inline Machine •cpu:Cpu •os:String •spotPrice:Int Cpu •arch: String •cpus: Int 6
  • 7. Cloud Computing Java DSL • Builder pattern - Method Chaining Fluent Interface 7
  • 8. Cloud Computing Java DSL - Pattern • Builder Pattern - Method Chaining 8
  • 9. Cloud Computing Java DSL - Issues • Syntax restrictions, verbosity – parenthesis, dot, semi- colons • Non Domain complexity – Builder • No Inline strategy – no higher order functions 9
  • 10. DSL Classification • Internal DSL • Embedded in a host language like Ruby, Scala, Groovy – use their features • Bound by host language syntax and semantics • External DSL – standalone developed ground up • Define syntax and semantics as a grammar • Use tools like lexical analyzers, parsers, interpretation, code generators 10
  • 11. Internal DSL Classification • Internal DSL • Generative - Ruby, Groovy Techniques like runtime metaprogramming • Meta Objects – inject new behaviour at runtime • Embedded in host language • Smart API – Method chaining – Java etc. • Syntax tree manipulation – Groovy, Ruby libraries • Type Embedding – Scala – statically typed, type constraints, no invalid operations on types 11
  • 12. Scala Language • Scala is a “scalable” language • JVM based – leverage libs, JVM perf, tools, install base etc • Mixed Paradigm – Object Oriented + Functional Programming • Object Oriented Programming - Improves on Java OOP (Traits, no statics, advanced types) 12
  • 13. Scala Language • Functional Programming - Functions • No side effects and immutable variables • “First-class” citizens - Can be assigned, passed around, returned • Higher order functions promote composition using other more primitive functions • Lots of powerful features – discussed later • Statically Typed – Type Safe DSL 13
  • 14. Scala – Readable style - Syntax • Elegant, succinct syntax unlike verbose Java • Optional dots, Operators are methods • Syntactic sugar method takes one/zero argument, drop period and parentheses 14
  • 15. Scala – Readable style - Inference • Type inference minimizes the need for explicit type information – still Type safe 15
  • 16. Scala - Implicits • Implicit Conversions – wrap original type e.g. Integer • Generative expression - Implicit conversion converts the 1, an Int, to a RichInt which defines a ‘to’ method • Lexically scoped – Unlike other languages like Groovy where such modifications are global in scope • Implicit argument to function – don’t need to pass – Concise syntax 16
  • 17. Scala - Higher order functions • Functions as parameters or return values • Flexible mechanism for composition • Anonymous Functions 17
  • 18. Scala - Higher order functions • Currying – set some parameters – concise & powerful 18
  • 19. Scala – Functional Combinators • Calculate the total price of all Linux machines – uses several combinators – filter, map, foldLeft – all take other functions as predicates 19
  • 20. Scala – Cloud Computing DSL - Relook 20
  • 21. Scala – Cloud Computing DSL - Implicits • Consider excerpt - 8 cpus “64bit” – Using Implicit conversion we get the object representing the CPU - Cpu(8, 64bit) 21
  • 22. Scala – Cloud Computing DSL – E2E DSL - new Machine having (8 cpus "64bit") with_os “Linux“ • Implicit Conversion • Method Chaining – Builder pattern – without the cruft • Syntactic sugar no parenthesis, dot, brackets 22
  • 23. Scala – Cloud Computing DSL – Functions • Using Higher Order Functions – Flexible pricing • Spot Price Threshold - Inline strategy - Anonymous Functions 23
  • 24. Scala - Pattern Matching • Pattern Matching – Switch Case on Steroids • Cases can include value, types, wild-cards, sequences, tuples, deep inspection of objects 24
  • 25. Scala - Pattern Matching &Case Classes • Case Classes – simplified construction and can be used in pattern matching • Pattern matching on Case Classes • Deep pattern matching on object contents • Make good succinct powerful DSL 25
  • 26. Scala - Pattern Matching – Visitor Pattern • Pattern match and case classes – extensible visitor • Different operations on tree • Expression Evaluation • Prefix Notation • Very expressive, flexible and concise code 26
  • 27. Scala – For Comprehensions • Loop through Iterable sequences and comprehend/compute something • E.g. Filter 32, 64 bit architectures 27
  • 28. Scala – For Comprehensions + Option • Wrap vars & function returns as Option – Null Checks, resilient programming • Option sub classes : None and Some • Options with for comprehensions, automatic removal of None elements from comprehensions 28
  • 29. Scala – For Comprehensions + Option • Validate and audit machines • Using Options with for comprehensions eliminate the need for most “null/empty” checks. • Succinct, safe DSL with uncluttered API 29
  • 30. External DSL in Scala DSL - having (8 cpus "64bit") with_os "Linux" at_spot_price 30 • Parser Combinator library – available as a library on host language – Scala • External Parser Generators like JavaCC – use tools to generate code for tokenizing, parsing • Parser Combinator Specification is like a BNF grammar 30
  • 31. External DSL in Scala • Each function is a parser - works on a portion of the input, parses it and may optionally pass on the remaining part to the next parser in the chain via the combinator • Several combinators provided by the library like ‘~’ the sequencing combinator composes two parsers sequentially. • Optional function application combinator (^^) can work, applying the function on the result of the sequencing combinator. 31
  • 32. Thanks abhijit.sharma@gmail.com Twitter : sharmaabhijit Blog : abhijitsharma.blogspot.com 32
  • 33. Scala - Traits • Traits are collections of fields and behaviors that you can extend or mixin to your classes. • Modularize these concerns, yet enable the fine-grained “mixing” of their behaviors with other concerns at build or run time – Callbacks & Ordered • Traits can be mixed-in at class level or at instance creation • AOP Pervasive concerns - Logging, Ordering, Callback Handling 33