Martin Fowler e seu livro sobre DSLs
As férias de final/inicio de ano são sempre boas para leituras pendentes, não é?
Este ano, dos livros que li, um dos mais interessantes para comentar e recomendar é o “Domain-Specific Languages” do Martin Fowler. Neste livro o bem conhecido autor distila um conjunto de padrões e técnicas para implementar linguagens específicas de domínios (DSL), ao estilo do seu também bem conhecido livro “Patterns for Enterprise Application Architecture”. É um livro de referência.
Se você, como eu, já estudou ou trabalhou com compiladores e/ou está interessado no uso destas técnicas para criar DSL´s, bem... este não é o livro – existem melhores.
Se você quer criar o que o autor chama de DSL´s internas, então este livro é uma excelente referência.
O que é uma DSL interna? Simples. É uma DSL escrita com a linguagem genérica e nativa que o programador já costuma usar (C#, VB, etc.).
Vamos a um exemplo do próprio livro – uma linguagem para descrever configurações de máquinas.
Uma API para descrever configurações seria:
Processor p = new Processor(2, 2500, Processor.Type.i386 );
Disk d1 = new Disk(150, Disk.UNKNOWN_SPEED, null );
Disk d2 = new Disk(75, 7200, Disk.Interface.SATA );
return new Computer( p, d1, d1 );
Uma DSL Interna para descrever esta configuração poderia ser escrita, por exemplo, segundo o padrão Method Chaining
computer()
.processor()
.cores(2)
.speed(2500)
.i386()
.disk()
.size(150)
.disk()
.size(75)
.speed(7200)
.sata()
.end()
ou, por exemplo, segundo o padrão Function Sequence:
computer();
processor();
cores(2);
speed(2500);
i386();
disk();
size(150);
disk();
size(75);
speed(7200);
sata();
Os dois tipos de descrição usam DSLs declarativas simples e legíveis, que podem ser escritas por um analista de negócio. Dois valores que fazem DSLs atrativas.
Se você quiser entender como implementar estes e outros tipos de DSLs internas, este é um bom livro.
Ele vai falar também dos benefícios e limitações das DSLs, da importância do Modelo Semântico para projetar e implementar uma DSL, e muitos outros assuntos correlatos e interessantes. Se você escreve bibliotecas e frameworks, o conhecimento de DSLs pode aumentar muito seu repertório.
Fica a dica.
(Outra dica: leia no blog do Rafael Godinho sobre a semana especial de Windows Azure nos Webcasts do MSDN que vai acontecer na semana de 14 a 18 de fevereiro. Será uma boa oportunidade para saber o que há de novo no Azure e como usá-lo bem)