際際滷

際際滷Share a Scribd company logo
Whats
DSL
and what isnt
hosted by supported by
@parazito
What is
Examples
Types
Why
What isnt
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 isnt
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

What's DSL and what isn't

Editor's Notes

  • #3: 粥沿姻艶壊艶稼岳温巽達看
  • #4: 粥沿姻艶壊艶稼岳温巽達看
  • #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