Desenvolvendo DSLs Em Python

39
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

description

Palestra "relâmpago" (15 min) mostrando alguns detalhes de construção de DSLs em Python: decorators, sobrecarga de operadores, __getattr__, utilizando como exemplo a biblioteca de expectations e matchers Should-DSL (http://github.com/hugobr/should-dsl)

Transcript of Desenvolvendo DSLs Em Python

Page 1: Desenvolvendo DSLs Em Python

Desenvolvendo DSLs em Python

Rodrigo S. ManhãesNúcleo de Pesquisa em Sistemas de Informação/IFF

Laboratório de Ciências Matemáticas/UENFGerência de Recursos Computacionais/UENF

Page 2: Desenvolvendo DSLs Em Python

domain specific language

Page 3: Desenvolvendo DSLs Em Python

make

CSS

SQL

Django *

Ruby on Rails *

Page 4: Desenvolvendo DSLs Em Python
Page 5: Desenvolvendo DSLs Em Python

concisão

Page 6: Desenvolvendo DSLs Em Python
Page 7: Desenvolvendo DSLs Em Python

concisão

fluência

Page 8: Desenvolvendo DSLs Em Python

Django

Page 9: Desenvolvendo DSLs Em Python

concisão

fluência

expressividade

Page 10: Desenvolvendo DSLs Em Python

unittest

should-dsl

Page 11: Desenvolvendo DSLs Em Python

should-dsl

expectativas para testes e especificações automatizadas

http://github.com/hugobr/should-dsl

Page 12: Desenvolvendo DSLs Em Python
Page 13: Desenvolvendo DSLs Em Python

O que é isso? e isso?

Page 14: Desenvolvendo DSLs Em Python

sobrecarga de operadores

Page 15: Desenvolvendo DSLs Em Python

sobrecarga de operadores

Page 16: Desenvolvendo DSLs Em Python

...entre outros

Page 17: Desenvolvendo DSLs Em Python

ops!

Page 18: Desenvolvendo DSLs Em Python

...entre outros

operadores invertidos

Page 19: Desenvolvendo DSLs Em Python
Page 20: Desenvolvendo DSLs Em Python
Page 21: Desenvolvendo DSLs Em Python

__ror__

Page 22: Desenvolvendo DSLs Em Python

__or____ror__

Page 23: Desenvolvendo DSLs Em Python

objeto atributo

Page 24: Desenvolvendo DSLs Em Python
Page 25: Desenvolvendo DSLs Em Python

e se eu quiser outros matchers?

Page 26: Desenvolvendo DSLs Em Python

matchers customizados

Page 27: Desenvolvendo DSLs Em Python

concisão

fluência

expressividade

extensibilidade

Page 28: Desenvolvendo DSLs Em Python

atributo??

Page 29: Desenvolvendo DSLs Em Python

Python decorators

Page 30: Desenvolvendo DSLs Em Python
Page 31: Desenvolvendo DSLs Em Python

classe Should

Page 32: Desenvolvendo DSLs Em Python

respondendo a mensagens perdidas

Page 33: Desenvolvendo DSLs Em Python

classe Should

Page 34: Desenvolvendo DSLs Em Python

__or____ror__

Page 35: Desenvolvendo DSLs Em Python

E isso foi só o começo...

inspect e frame objectshttp://github.com/hugobr/pyhistorianhttp://github.com/nsigustavo/ludibrio

codecs e tokenizehttp://github.com/fmeyer/yeti

Page 36: Desenvolvendo DSLs Em Python
Page 37: Desenvolvendo DSLs Em Python
Page 38: Desenvolvendo DSLs Em Python

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/

Page 39: Desenvolvendo DSLs Em Python

Alguns exemplos extraídos de

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