This document discusses domain-specific languages (DSLs). It defines a DSL as a computer language specialized for a particular application domain, in contrast to a general-purpose language. The document notes that an internal DSL is just a particular idiom for writing code in a host language, like Ruby, while an external DSL is a separate language parsed into data the host language understands. Examples of DSLs given include SQL, CSS, Rake, and ActiveRecord migrations. Reasons for using DSLs include improved developer productivity, understandability by non-programmers, and that code reads like a conversation. The document clarifies that while tools like FactoryGirl and Fabrication provide syntax helpers, they are not
6. 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?
7. 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
12. - 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?
21. 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
#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