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)