Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Embedded DSLs em Python - PythonRio 28/05/2016

Embedded DSLs em Python - PythonRio 28/05/2016

Linguagens específicas de domínio, ou DSLs, são linguagens criadas para propósitos bem específicos: HTML para organizar conteudo, VimL para configurar (o melhor) editor de texto etc. Quando uma DSL é implementada como uma "extensão" da sintaxe de uma linguagem de propósito geral, chamamos ela de DSL Embarcada. Na palestra serão abordadas quais as vantagens de EDSLs e como criá-las em Python.

Elias Tandel

May 28, 2016
Tweet

More Decks by Elias Tandel

Other Decks in Programming

Transcript

  1. DSL? • Línguagem formal • Não necessariamente de programação •

    Geralmente não turing-completa • Focada em um tipo de problema (domínio)
  2. DSL? • Línguagem formal • Não necessariamente de programação •

    Geralmente não turing-completa • Focada em um tipo de problema (domínio) • Simples?
  3. Pros vs Cons • Validação a nível de domínio •

    Abstração otimizada para o problema • Custo de aprendizado • Custo de manutenção
  4. Embedded vs External • Se utiliza da sintaxe de uma

    linguagem de propósito geral (host) • Criada do zero: parser, compiler / interpreter etc.
  5. Embedded vs External • Se utiliza da sintaxe de uma

    linguagem de propósito geral (host) • Preso à sintaxe do host • Criada do zero: parser, compiler / interpreter etc. • Extremamente flexível
  6. Embedded vs External • Se utiliza da sintaxe de uma

    linguagem de propósito geral (host) • Preso à sintaxe do host • Reutiliza ferramental do host • Criada do zero: parser, compiler / interpreter etc. • Extremamente flexível • Ferramentas também devem ser criadas do zero
  7. Embedded • Rápido de prototipar • Você já usou pelo

    menos uma: ORM • Diferença para lib / framework não é clara
  8. Embedded • Rápido de prototipar • Você já usou pelo

    menos uma: ORM • Diferença para lib / framework não é clara • “Torce” a sintaxe
  9. Python? • Sintaxe pouco flexível: – Chamadas sempre com ()

    vs Ruby – Operadores fixos vs Haskell
  10. Python? • Sintaxe pouco flexível: – Chamadas sempre com ()

    vs Ruby – Operadores fixos vs Haskell • Objetos muito flexíveis: – Metaclasses – Meta-object protocol