Exemplo de uso de metaprogramação de tempo de compilação que economiza tempo?

5

A página da Web de Converge afirma que:

Converge has a macro-like facility that can embed domain specific languages with arbitrary syntaxes into source files.

Estou mais intrigado com a possibilidade de criar idiomas específicos do domínio. Meu entendimento do propósito dessas linguagens é que elas permitem que o desenvolvedor se torne muito mais eficiente ao resolver problemas específicos de domínio.

Então, continuei lendo a seção "sobre" . Há dois exemplos de uso aqui, mas nenhum deles descreve como o desenvolvedor pode economizar tempo de desenvolvimento utilizando o Converge. Alguém pode me dar um exemplo ou me encaminhar para um exemplo? Fico feliz em ler exemplos em outros idiomas além do Converge.

    
por David 13.01.2012 / 11:03
fonte

2 respostas

2

Eu não posso falar especificamente do Converge, mas eu uso regularmente a linguagem de programação D, que tem recursos muito strongs de meta-programação.

Veja um exemplo da biblioteca D para unidades de medida . O programador pode escrever:

auto dist1 = Meters(5.2);
auto velocity = dist1 / Seconds(2.1);
auto kmPerSecond = cast(Kilometers)velocity;

Usando o sistema de tipos para criar uma DSL, o programador fica livre de fazer malabarismos com as conversões de unidades e de garantir que as operações façam sentido (por exemplo, tempo + distância seria um erro).

Outro exemplo (antigo) D é a biblioteca Blade . Esta biblioteca é capaz de analisar expressões algébricas em tempo de compilação e gerar uma montagem rápida e precisa. Para uma programação que precisa da velocidade, esse tipo de coisa é um verdadeiro salva-vidas.

Por fim, confira o Ruby on Rails se você ainda não o fez. A coisa toda é uma DSL gigante, embora não seja de tempo de compilação.

    
por 13.01.2012 / 19:46
fonte
4

Existem dois exemplos canônicos de idiomas específicos de domínio:

  1. Expressões regulares. Eles são uma linguagem simples, mas a linguagem, no entanto, e eles são compilados para o autômato de busca, então definitivamente se beneficiam do compilador que os manipula. Outras linguagens de análise, como a BNF, são casos semelhantes.
  2. SQL. Embora isso seja normalmente compilado no servidor de banco de dados e, portanto, não se beneficie do processamento no compilador dessa forma, há um enorme benefício no suporte a ele da linguagem se ele puder vincular variáveis automaticamente a parâmetros e resultados.
por 13.01.2012 / 12:17
fonte