SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
Desenvolvendo DSLs em
                 Python


          Rodrigo S. Manhães
  Núcleo de Pesquisa em Sistemas de Informação/IFF
      Laboratório de Ciências Matemáticas/UENF
      Gerência de Recursos Computacionais/UENF
domain specific language
make


     CSS


     SQL


   Django *


Ruby on Rails *
concisão
concisão




fluência
Django
concisão




   fluência




expressividade
unittest




should-dsl
should-dsl



   expectativas para testes e
  especificações automatizadas



http://github.com/hugobr/should-dsl
O que
é isso?   e isso?
sobrecarga de operadores
sobrecarga de operadores
...entre outros
ops!
operadores invertidos




  ...entre outros
__ror__
__ror__   __or__
objeto   atributo
e se eu quiser outros matchers?
matchers customizados
concisão


    fluência


 expressividade


extensibilidade
atributo??
Python decorators
classe Should
respondendo a mensagens perdidas
classe Should
__ror__   __or__
E isso foi só o começo...



  inspect e frame objects
  http://github.com/hugobr/pyhistorian
  http://github.com/nsigustavo/ludibrio




      codecs e tokenize
     http://github.com/fmeyer/yeti
De onde vêm as imagens
(4) http://www.flickr.com/photos/clover_1/176047283/

(5) http://www.flickr.com/photos/ysc/2179798100/

(25) http://www.flickr.com/photos/jasperdeboer/15346117/

(37) http://www.flickr.com/photos/waldopepper/3424717308/

(38) http://www.flickr.com/photos/lwr/12364944/
Alguns exemplos extraídos de



http://media.brianbeck.com/files/Python_DSLs_I.pdf

Mais conteúdo relacionado

Mais procurados

Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasVitor Mattos
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
Engenharia Reversa de Trojan-Banker_Hack'nRio
Engenharia Reversa de Trojan-Banker_Hack'nRioEngenharia Reversa de Trojan-Banker_Hack'nRio
Engenharia Reversa de Trojan-Banker_Hack'nRiocrimesciberneticos
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em ElixirAdolfo Neto
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonOsvaldo Santana Neto
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação PythonCarlos Schults
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosFlávio Lisboa
 
Pensando fora da caixa
Pensando fora da caixaPensando fora da caixa
Pensando fora da caixaWilliam "Kina"
 
Apresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da InformaçãoApresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da InformaçãoJunior Grossi
 
Criando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasCriando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasNorton Guimarães
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13William Colen
 
BDD + PHP = behat!
BDD + PHP = behat!BDD + PHP = behat!
BDD + PHP = behat!Vitor Mattos
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 

Mais procurados (20)

Python 3k
Python 3kPython 3k
Python 3k
 
Minicurso do Terminal ao Python
Minicurso do Terminal ao PythonMinicurso do Terminal ao Python
Minicurso do Terminal ao Python
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Engenharia Reversa de Trojan-Banker_Hack'nRio
Engenharia Reversa de Trojan-Banker_Hack'nRioEngenharia Reversa de Trojan-Banker_Hack'nRio
Engenharia Reversa de Trojan-Banker_Hack'nRio
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação Python
 
Criação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dadosCriação de robôs em PHP para raspagem de dados
Criação de robôs em PHP para raspagem de dados
 
Pensando fora da caixa
Pensando fora da caixaPensando fora da caixa
Pensando fora da caixa
 
Apresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da InformaçãoApresentação da Qualificação - Mestrado UFMG Ciência da Informação
Apresentação da Qualificação - Mestrado UFMG Ciência da Informação
 
Criando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasCriando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e Dicas
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13
 
BDD + PHP = behat!
BDD + PHP = behat!BDD + PHP = behat!
BDD + PHP = behat!
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
#Dojo1 - GIT no TCDF
#Dojo1 - GIT no TCDF#Dojo1 - GIT no TCDF
#Dojo1 - GIT no TCDF
 

Destaque

Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonMarcel Caraciolo
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 
Pip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para PythonPip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para Pythonpugpe
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Como Python pode ajudar na automação do seu laboratório
Como Python pode ajudar na automação do  seu laboratórioComo Python pode ajudar na automação do  seu laboratório
Como Python pode ajudar na automação do seu laboratórioMarcel Caraciolo
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantesrichardsonlima
 

Destaque (10)

Twittando Com Python
Twittando Com PythonTwittando Com Python
Twittando Com Python
 
Construindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com PythonConstruindo Sistemas de Recomendação com Python
Construindo Sistemas de Recomendação com Python
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
Pip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para PythonPip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para Python
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Python Interface Gráfica Tkinter
Python Interface Gráfica TkinterPython Interface Gráfica Tkinter
Python Interface Gráfica Tkinter
 
Como Python pode ajudar na automação do seu laboratório
Como Python pode ajudar na automação do  seu laboratórioComo Python pode ajudar na automação do  seu laboratório
Como Python pode ajudar na automação do seu laboratório
 
Hackeando Dados públicos com python
Hackeando Dados públicos com pythonHackeando Dados públicos com python
Hackeando Dados públicos com python
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 

Semelhante a Desenvolvendo DSLs em Python

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYLucas Furtado de Oliveira
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangElaine Naomi
 
Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On RailsAlberto Leal
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Adam Victor Brandizzi
 

Semelhante a Desenvolvendo DSLs em Python (20)

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBYUM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
UM ESTUDO SOBRE METAPROGRAMAÇÃO: AS LINGUAGENS DE PROGRAMAÇÃO PYTHON E RUBY
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Py dojo
Py dojoPy dojo
Py dojo
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On Rails
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
PHP, Mercado e Certificações
PHP, Mercado e CertificaçõesPHP, Mercado e Certificações
PHP, Mercado e Certificações
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
PyDojo
PyDojoPyDojo
PyDojo
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Aula python
Aula pythonAula python
Aula python
 

Desenvolvendo DSLs em Python