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

Embedded DSLs em Python - Python Sudeste 02/092016

Elias Tandel
September 02, 2016

Embedded DSLs em Python - Python Sudeste 02/092016

Elias Tandel

September 02, 2016
Tweet

More Decks by Elias Tandel

Other Decks in Programming

Transcript

  1. DSL? • Linguagem formal • Não necessariamente de programação •

    Geralmente não turing-completa • Focada em um tipo de problema (domínio)
  2. DSL? • Linguagem 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ê provavelmente já usou

    pelo menos uma: ORM • Diferença para lib / framework não é clara
  8. Embedded • Rápido de prototipar • Você provavelmente 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
  11. Resumo • EDSLs podem ajudar muito • Não tenha medo

    de usar o que python te oferece – Sobrecarga de operadores – Decorators – Metaclasses – Descriptors – Context managers