Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Embedded DSLs em Python - Python Sudeste 02/092016
Search
Elias Tandel
September 02, 2016
Programming
0
47
Embedded DSLs em Python - Python Sudeste 02/092016
Elias Tandel
September 02, 2016
Tweet
Share
More Decks by Elias Tandel
See All by Elias Tandel
Intensivão de Encoding
etandel
0
29
Medindo distâncias astronômicas
etandel
0
31
Embedded DSLs em Python - PythonRio 28/05/2016
etandel
0
81
Software Livre
etandel
0
26
Other Decks in Programming
See All in Programming
教えて!スクラムコーチ品質とスピードのバランスはどうすりゃいいの?
pinboro
0
110
Implementing Design Systems in Swift
seyfoyun
2
530
Try creating your own orderedmap
kazamori
1
280
ペパボOpenTelemetry革命
pyama86
2
1.1k
酒飲んでたらテックリードになった話
spbaya0141
0
210
TypeScript Custom GitHub Action Development Tips
peaceiris
1
140
Balkan Ruby 2024 — How and why to run SQLite on Rails in production
fractaledmind
0
110
The Cutting Edge Of Versioning (LambdaConf 2024)
chriskrycho
0
250
TypeScriptコードの漸進的改善 / Progressive Improvement of TypeScript Code
medley
1
440
Powerfully Typed TypeScript
euxn23
3
1.7k
JS RPCを理解する
yusukebe
5
270
RustでAWS Lambda functionをいい感じに書く
taiki45
2
150
Featured
See All Featured
Scaling GitHub
holman
457
140k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
47k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
10 Git Anti Patterns You Should be Aware of
lemiorhan
649
58k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
9
1.3k
Ruby is Unlike a Banana
tanoku
96
10k
Transcript
EDSLs em Python Elias Tandel (@etandel) Python Sudeste 02/09/2016
DSL?
DSL? • Linguagem formal
DSL? • Linguagem formal • Não necessariamente de programação
DSL? • Linguagem formal • Não necessariamente de programação •
Geralmente não turing-completa
DSL? • Linguagem formal • Não necessariamente de programação •
Geralmente não turing-completa • Focada em um tipo de problema (domínio)
DSL? • Linguagem formal • Não necessariamente de programação •
Geralmente não turing-completa • Focada em um tipo de problema (domínio) • Simples?
Exemplos
Pros vs Cons • Validação a nível de domínio •
Abstração otimizada para o problema • Custo de aprendizado • Custo de manutenção
Embedded vs External
Embedded vs External • Se utiliza da sintaxe de uma
linguagem de propósito geral (host) • Criada do zero: parser, compiler / interpreter etc.
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
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
Embedded • Rápido de prototipar
Embedded • Rápido de prototipar • Você provavelmente já usou
pelo menos uma: ORM
Embedded • Rápido de prototipar • Você provavelmente já usou
pelo menos uma: ORM • Diferença para lib / framework não é clara
Embedded • Rápido de prototipar • Você provavelmente já usou
pelo menos uma: ORM • Diferença para lib / framework não é clara • “Torce” a sintaxe
Python? • Sintaxe pouco flexível: – Chamadas sempre com ()
vs Ruby – Operadores fixos vs Haskell
Python? • Sintaxe pouco flexível: – Chamadas sempre com ()
vs Ruby – Operadores fixos vs Haskell • Objetos muito flexíveis: – Metaclasses – Meta-object protocol
DEMO • Patterns - https://github.com/etandel/pattern- matching-dsl • JSONBender - https://github.com/Onyo/jsonbender
Resumo • EDSLs podem ajudar muito • Não tenha medo
de usar o que python te oferece – Sobrecarga de operadores – Decorators – Metaclasses – Descriptors – Context managers
Obrigado https://etandel.xyz
[email protected]
[email protected]