SlideShare a Scribd company logo
What’s
DSL
and what isn’t
hosted by supported by
@parazito
What is
Examples
Types
Why
What isn’t
Agenda
Domain Specific
Language
Examples
SQL CSS
A domain-specific language (DSL) is a computer language
specialized to a particular application domain.
This is in contrast to a general-purpose language (GPL), which
is broadly applicable across domains.
https://en.wikipedia.org/wiki/Domain-specific_language
What is DSL?
An internal DSL is just a particular idiom of writing
code in the host language.
So a Ruby internal DSL is Ruby code, just written in
particular style which gives a more language-like feel.
Internal DSL
rake
ActiveRecord::Migration
An external DSL is a completely separate
language that is parsed into data that the host
language can understand.
External DSL
ElasticSearch
Query DSL
- Developer productivity
- Understandable by business people
- "Code should read like a conversation"
- DSL is a healthy bi-product of a good object-
oriented design
Why?
Fluent Interfaces
Method chaining
ActiveRecord example
What isn’t
DSL
FactoryGirl
FactoryGirl - Syntax Helpers
Fabrication
Fabrication - Fabricate method
Hpricot
Thanks!
● Rake - DSL Definition
● Introduction to Domain Specific Languages
● Using Rake Build Language - Martin Fowler
● The tale of Hpricot's sudo-constructor
● The L in DSL: langue ou langage?
● DSLs: What's the big deal?
● Uma DSL que transformou o produto
● FactoryGirl
● Fabrication Gem
● A dead simple DSL responsible to understand .recipe files
● Language Implementation Patterns: Create Your Own DSL and GPL
● Domain-Specific Languages by Martin Fowler
References
Questions?

More Related Content

PPT
DSL explained _
PPTX
BDD or DSL как способ построения коммуникации на проекте - опыт комплексного ...
PPTX
DDD - What, why, how?
PPTX
Using PowerShell as DSL in .Net applications
PPTX
Translating software with SDL Passolo?
PPTX
Introduction to SDL Passolo
PPTX
Translating software with SDL Passolo
PPTX
Fun with DSL
DSL explained _
BDD or DSL как способ построения коммуникации на проекте - опыт комплексного ...
DDD - What, why, how?
Using PowerShell as DSL in .Net applications
Translating software with SDL Passolo?
Introduction to SDL Passolo
Translating software with SDL Passolo
Fun with DSL

What's hot (18)

KEY
Perl 6 DBDI 201007 (OUTDATED, see 201008)
PPTX
This is not DDD you're looking for @ KanDDDinsky
PPT
Jug dynamic languages_in_jvm
PPTX
Week 4 css recap and js
PPT
Coldfusion
 
PPTX
How developers write documentation
PDF
Php melb cqrs-ddd-predaddy
KEY
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
ODP
Glance rebol
PPTX
Bdd and Behat
PDF
Domain Specific Languages
PDF
Language Engineering With Xtext
PDF
What is the best programming language for your web product?
PPTX
Drupal coding standards and best practices
PPT
F# Sample and Resources
PPTX
.Net language support
PDF
What if-your-application-could-speak
KEY
Taking PHP to the next level
Perl 6 DBDI 201007 (OUTDATED, see 201008)
This is not DDD you're looking for @ KanDDDinsky
Jug dynamic languages_in_jvm
Week 4 css recap and js
Coldfusion
 
How developers write documentation
Php melb cqrs-ddd-predaddy
Pragmatic DSL Design with Xtext, Xbase and Xtend 2
Glance rebol
Bdd and Behat
Domain Specific Languages
Language Engineering With Xtext
What is the best programming language for your web product?
Drupal coding standards and best practices
F# Sample and Resources
.Net language support
What if-your-application-could-speak
Taking PHP to the next level
Ad

Similar to What's DSL and what isn't (20)

PPTX
PPTX
Bdd and dsl как способ построения коммуникации на проекте
PDF
Agile DSL Development in Ruby
PDF
Defining DSL (Domain Specific Language) using Ruby
PDF
Domain Specific Languages in Ruby - Medellin.rb
PDF
Domain Specific Languages
PDF
Building DSLs: Marriage of High Essence and Groovy Metaprogramming
PDF
Log cat kotlindsl
PDF
Venkat Subramaniam Building DSLs In Groovy
PPTX
Building an Domain Specific Language for a Service
PPTX
Couch DB/PouchDB approach for hybrid mobile applications
PPTX
DSL Best Practices
PDF
Blue Ruby SDN Webinar
PPTX
sl slides-unit-1.pptx
PDF
Api and Fluency
PPTX
Domain Specific Language Design
PDF
Ekon23 (1) Kingdom-Driven-Design
PPTX
Xml & scripting
PDF
DSL Construction rith Ruby
PPTX
Download Microsoft Activation Scripts 3.0 Free Full Activated
Bdd and dsl как способ построения коммуникации на проекте
Agile DSL Development in Ruby
Defining DSL (Domain Specific Language) using Ruby
Domain Specific Languages in Ruby - Medellin.rb
Domain Specific Languages
Building DSLs: Marriage of High Essence and Groovy Metaprogramming
Log cat kotlindsl
Venkat Subramaniam Building DSLs In Groovy
Building an Domain Specific Language for a Service
Couch DB/PouchDB approach for hybrid mobile applications
DSL Best Practices
Blue Ruby SDN Webinar
sl slides-unit-1.pptx
Api and Fluency
Domain Specific Language Design
Ekon23 (1) Kingdom-Driven-Design
Xml & scripting
DSL Construction rith Ruby
Download Microsoft Activation Scripts 3.0 Free Full Activated
Ad

Recently uploaded (20)

PDF
Empathic Computing: Creating Shared Understanding
PDF
Mushroom cultivation and it's methods.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
August Patch Tuesday
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Heart disease approach using modified random forest and particle swarm optimi...
Empathic Computing: Creating Shared Understanding
Mushroom cultivation and it's methods.pdf
MIND Revenue Release Quarter 2 2025 Press Release
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
A comparative study of natural language inference in Swahili using monolingua...
Network Security Unit 5.pdf for BCA BBA.
OMC Textile Division Presentation 2021.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf
August Patch Tuesday
Advanced methodologies resolving dimensionality complications for autism neur...
Unlocking AI with Model Context Protocol (MCP)
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
cloud_computing_Infrastucture_as_cloud_p
A comparative analysis of optical character recognition models for extracting...
Assigned Numbers - 2025 - Bluetooth® Document
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Heart disease approach using modified random forest and particle swarm optimi...

What's DSL and what isn't

Editor's Notes

  • #3: Apresentação
  • #4: Apresentação
  • #5: DSL ou Domain Specific Language (linguagem específica de domínio) --x-- Quem sabe o que é uma DSL? Quem já trabalhou com DSL? Quem aqui já escreveu CSS (XML, SQL)? Então você já usaram uma DSL. --x-- O desenvolvimento de software se torna cada vez mais difícil quando uma aplicação começa a crescer exponencialmente, ganhando cada vez mais novas funcionalidades conforme a demanda. Com isso o código tende a crescer e ficar legitimamente bagunçado, sendo cada vez mais difícil de lidar com certas partes de uma aplicação relativamente grande. O uso de uma Linguagem Específica de Domínio (DSL – Domain Specific Language) surge para suprir toda essa confusão, focando em problemas específicos de um dado domínio. Dessa forma consegue-se especializar uma linguagem de sintaxe peculiar para atacar uma questão em particular, como armazenar um log de ações do usuário, ao tentar realizar um cadastro de fornecedores em um software.
  • #6: Uma Linguagem Específica de Domínio (DSL) é uma linguagem designada para ser usada na resolução de problemas pontuais, buscando abstrair os conceitos de domínio. Muitas das linguagens que se ouve falar são consideradas Linguagens de Propósito Geral (GPL), como é o caso do Java, C/C++ cujo o foco é criar programas que dêem o comportamento desejado para uma máquina, através de algoritmos precisos, sem se preocupar estritamente à um problema específico.
  • #7: Uma Linguagem Específica de Domínio (DSL) é uma linguagem designada para ser usada na resolução de problemas pontuais, buscando abstrair os conceitos de domínio. Muitas das linguagens que se ouve falar são consideradas Linguagens de Propósito Geral (GPL), como é o caso do Java, C/C++ cujo o foco é criar programas que dêem o comportamento desejado para uma máquina, através de algoritmos precisos, sem se preocupar estritamente à um problema específico.
  • #9: Rake::DSL is a module that provides #task, #desc, #namespace, etc.
  • #12: Elasticsearch provides a JSON-style domain-specific language that you can use to execute queries.
  • #14: Este é um exemplo do AR do Rails que permite a você queries bem próximo da DSL do SQL e permite encadear as chamadas de métodos.
  • #15: Ruby é muito bom para implementar DSL e Ruby trouxe DSL a tona A polemica do Hpricot usava uma dsl mas ele nao tinha um nome associado ao dominio especifico. Parser de arquivo XML
  • #16: Esta é uma DSL de definição de factory Porém para utilizar é necessário chamar através da classe `FactoryGirl`
  • #17: Para exportar a DSL, foi escrito SyntaxHelpers que são incluídos no framework de teste em questão, assim os métodos `create` e `build` podem ser chamados sem prefixar a classe `FactoryGirl` conforme slide anterior
  • #18: Esta é a DSL do fabrication gem, uma alternativa ao FactoryGirl (porém menos popular). Ela possui uma DSL tanto na definição de um fabricator quanto no momento de fabricar um objeto, pois foca no domínio, utilizando um método semântico.
  • #19: Para criar essa DSL eles fazem uso de um approach bem mais simples, que é definir um método no escopo dos testes capitalizado, dando a impressão que estamos instanciando um objeto com outra sintaxe.
  • #20: Como Ruby se destacou na implementação de DSLs, muitas discussões vieram à tona apesar de DSL não ser um assunto novo, como já discutido pelo pessoal do Smalltalk (uma das influências que Matz teve para criar o Ruby) A polêmica do Hpricot era que o autor considerava que a lib possuia uma DSL para utilizar a lib, porém o nome da lib não remetia ao domínio. Que estava ligado a parse de arquivos XHTML. Parser de arquivo XHTML
  • #21: Ruby é muito bom para implementar DSL e Ruby trouxe DSL a tona A polemica do Hpricot usava uma dsl mas ele nao tinha um nome associado ao dominio especifico. Parser de arquivo XML
  • #23: Ruby é muito bom para implementar DSL e Ruby trouxe DSL a tona A polemica do Hpricot usava uma dsl mas ele nao tinha um nome associado ao dominio especifico. Parser de arquivo XML