SlideShare une entreprise Scribd logo
1  sur  66
Live Typing
Anotación automática de tipos para lenguajes
dinámicos
Hernán A. Wilkinson - @hernanwilkinson
Fundador de 10Pines, FAST y Profesor@FCENyN, UBA
agile software development & services
¿Por qué les gusta Python?
(entre otras características)
Es Dinámicamente Tipado
¡lo cual tiene muchas ventajas!
Pero también sabemos que …
tiene algunas desventajas
Hay “información que falta”,
que no es explícita
Esa información que falta es
Información de Tipos
Como programadores, temenos que
recordar e inferir esa información
Eso nos saca tiempo & energía
¿Por qué no tomamos ese
tiempo & energía
de la computadora?
Dicho de Bret Victor – Inventing on a Principle
‘estamos acostumbrados a jugar a ser
computadoras’
http://worrydream.com/#!/InventingOnPrinciple
Dicho de programador de lenguajes dinámicos:
‘estamos acostumbrados a jugar
juegos de memoria de tipos’
Soluciones
Inferencia de Tipos
Inferencia de Tipos
1980 1981
Desventajas
•Lento
•Incompleto
•Información Incorrecta en algunos casos
Anotación Manual de Tipos
1982!!
Anotación Manual de Tipos
Strongtalk
1994
Anotación Manual de Tipos
TypeScript
~ 2012/2014
Anotación Manual de Tipos
Python 2.7 -
Type Comments
~ 2014
Anotación Manual de Tipos
Python 3.5 - Type Hints
Anotación Manual de Tipos
Ruby with Sorbet ~ 2018
Desventajas
•Modifican la sintaxis del lenguaje
•Dificulta la lectura del Código
• Ya no es como antes …
•Hay que hacerlo a mano
•Hay que mantenerlo!
•Se centran en chequeo de tipos aunque de manera
gradual y no se llevan bien con “Duck Typing”
¿Qué es LiveTyping?
Anotación automática de tipos (hecho por la VM)
+
Herramientas que mejoran la experiencia del
programador
(La anotación sucede mientras el Sistema ejecuta)
LiveTyping
Características
•No cambia la sintaxis
•Los tipos no están en el código fuente
•No dificulta la lectura del código
•No te impide compilar o ejecutar
•No te fuerza a usarlo
No es una nueva idea…
Since 1981!
1970!!
No es una nueva idea pero…
Es un idea particular con una
implementación que
funciona
LiveTyping no tiene como
objetivo principal realizar
chequeo de tipos
LiveTyping tiene como objetivo
facilitar el desarrollo con
lenguajes dinámicos
¿Cómo funciona?
TypesArray
• TypesArray: Array con los tipos (clases) de una variable
• Cada variable/parámetro/retorno de método es asociado
con un TypesArray
• Cada vez que un objeto es asignado a una variable, la VM
agrega la clase del objeto al TypesArray de esa variable
• Size de TypesArray puede variar por variable. Default es 10
• Si TypesArray es nil significa que no se anotan tipos para
esa variable
VM: Agregar un Tipo al TypesArray
(pseudo C)
keepTypeInformation(typesArray, assignedObject) {
if (typesArray==nil) return;
assignedObjectClass = objectMemory.classOf(assignedObject);
typesArraySize = objectMemory.lengthOf(typesArray);
for (index=0;index++;index<typesArraySize) {
if (typesArray[index]==assignedObjectClass) return;
if (typesArray[index]==nil) {
typesArray[index] = assginedObjectClass;
return; }}}
Ejemplos
Cuis Smalltalk &
CuisUniversity
TaTeTi
(TicTacToe)
Mostrando y Administrando
Types
Muy útil para “legacy code” o mal escrito
(Morph)
Autocompletion
DynamicType
(SelfType, ClassType, InstanceType)
Actual Implementors
(“a much better use of the human brain”-Tudor et al )
Actual Senders
Sure and Possible
(Per Message Send analysis)
Refactorings con Actual Scope
Type Checker
(we know for sure when nil is assigned!)
Morph & Behavior
Conclusión
Sin un gran esfuerzo,
nos deshicimos de la mayoría de
las desventajas
No temenos que mantener
lo tipos de la variables,
lo hace automáticamente
No temenos que recordar or inferir
los tipos nunca más!
Los tipos no molestan en la lectura
del Código
Es una técnica muy simple que
mejora drásticamente la
experiencia del programador
Creo humildemente que
respeta y honra
el espíritu de los lenguajes
dinámicos
¿Cuál es mi objetivo?
Con Smalltalk, dejar de decir que es
‘Dynamically Typed’
y empezar a decir que es,
‘Lively Typed’
Que los otros lenguajes
dinámicamente tipados se suban al
tren
Estadísticas
Performance
Typed VM Stack VM Difference
Aconcagua Tests 37 ms 22 ms 1.6 x
Chalten Tests 2400 ms 2204 ms 1.08 x
Refactoring Tests 56382 ms 39650 ms 1.42 x
TicTacToe Tests 3 ms 2 ms 1.5 x
Some Kernel Tests 220 ms 151 ms 1.45 x
Average 1.41 x
No se nota un impacto cuando se está
programando
Memoria
Live Typing Image* Common Image Difference
22 MB 10 MB 2.2 x
(*) Configuración Default:
• Size de type arrays: 10
• Uso de variables de instancia: 8.8%
• Uso de variables de métodos: 8.4%
• Uso de tipos de retorno: 8.02%
Trabajo Futuro
En Desarrollo/Investigación
� Anotar tipos en variables de closures (Ines Sosa)
� Soporte de tipos parametrizados (Generics) (Ana Felisatti & Mariano
De Sousa)
� Implementarlo para la VM con JIT (Federico Grosso)
� Mejoras en el chequeo de tipos (Julián Mauro Luini)
Si les interesa el tema, para hacer investigación/ampliarlo
comuniquense conmigo!
Más ideas
 Agregar mas “type casts” al Type Checker
 Chequear tipos en parámetros (Freeze annotated types)
 Usar la infrastructura del TypeChecker para mejorar el autocomplete
 Importar información de tipos recolectada en producción al ambiente de
Desarrollo
 Mejorar el Type Checker para avisar de código muerto
 Que el Compilador, genere e inicialice PICs en tiempo de compilación!
 Mejorar análisis de dependencia
¿Cómo obtenerlo?
 One Click - CuisUniversity: http://www.cuisuniversity.org/
 Repo: https://github.com/hernanwilkinson/LiveTyping
Soluciones Similares en Python
 pyannotate: https://github.com/dropbox/pyannotate
Colecta tipos ejecutando tests, solo para parámetros y tipos de retorno
Los guarda en un archivo
Modifica Código Fuente con la información guardada en el punto anterior
 MonkeyType: https://github.com/Instagram/MonkeyType
Solución parecida a LiveTyping pero con mayor impacto de performance (5x) y solo
para parámetros y tipos de retorno
Guarda tipos recolectados en base de datos
Modifica el Código Fuente con la información guardada
Herramientas de uso de tipos en Python
 Type Checkers
mypy: http://mypy-lang.org/
pytype: https://github.com/google/pytype
pyre: https://github.com/facebook/pyre-check
Evaluadores de conformidad de tipos en runtime
pytypes: https://github.com/Stewori/pytypes
pydantic: https://github.com/samuelcolvin/pydantic
enforce: https://github.com/RussBaz/enforce
Presentación interesante: https://www.youtube.com/watch?v=pMgmKJyWKn8
¿Preguntas?
¡Gracias!
@HernanWilkinson – hernan.wilkinson@10pines.com – www.10pines.com

Contenu connexe

Similaire à LiveTyping - Anotación automática de tipos para lenguajes dinámicos

Similaire à LiveTyping - Anotación automática de tipos para lenguajes dinámicos (20)

Introducción a PSeInt.pdf
Introducción a PSeInt.pdfIntroducción a PSeInt.pdf
Introducción a PSeInt.pdf
 
El poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácilEl poder de los reptiles: Hacer herramientas de hacking es fácil
El poder de los reptiles: Hacer herramientas de hacking es fácil
 
Machine learning for dummies - Azuges November 2016
Machine learning for dummies - Azuges November 2016Machine learning for dummies - Azuges November 2016
Machine learning for dummies - Azuges November 2016
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientes
 
La prueba del software y los special purpose languages
La prueba del software y los special purpose languagesLa prueba del software y los special purpose languages
La prueba del software y los special purpose languages
 
Query Store en SQL 2016
Query Store en SQL 2016Query Store en SQL 2016
Query Store en SQL 2016
 
Machine Learning.pptx
Machine Learning.pptxMachine Learning.pptx
Machine Learning.pptx
 
Documentación útil
Documentación útilDocumentación útil
Documentación útil
 
tic
tictic
tic
 
Optimizacion de software
Optimizacion de softwareOptimizacion de software
Optimizacion de software
 
Desarrollo desoftware
Desarrollo desoftwareDesarrollo desoftware
Desarrollo desoftware
 
Fp sesion 1 ppt
Fp sesion 1 pptFp sesion 1 ppt
Fp sesion 1 ppt
 
CTF una visión de equipo
CTF una visión de equipoCTF una visión de equipo
CTF una visión de equipo
 
Capítulo 2 todo se vuelve programable v1
Capítulo 2 todo se vuelve programable v1Capítulo 2 todo se vuelve programable v1
Capítulo 2 todo se vuelve programable v1
 
Clase 11
Clase 11Clase 11
Clase 11
 
Que es Azure Machine Learning 2015
Que es Azure Machine Learning 2015Que es Azure Machine Learning 2015
Que es Azure Machine Learning 2015
 
visual studio
visual studiovisual studio
visual studio
 
visual studio
visual studiovisual studio
visual studio
 
ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.ITSCH Taller Python by Uriel C.H.
ITSCH Taller Python by Uriel C.H.
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 

Plus de Hernan Wilkinson

Hacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHernan Wilkinson
 
Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California SmalltalkersHernan Wilkinson
 
LiveTyping: Update and What is next
LiveTyping: Update and What is nextLiveTyping: Update and What is next
LiveTyping: Update and What is nextHernan Wilkinson
 
Cuis smalltalk past present and future
Cuis smalltalk past present and futureCuis smalltalk past present and future
Cuis smalltalk past present and futureHernan Wilkinson
 
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
Live Typing- Automatic Type Annotation that improves the Programming eXperie...Live Typing- Automatic Type Annotation that improves the Programming eXperie...
Live Typing - Automatic Type Annotation that improves the Programming eXperie...Hernan Wilkinson
 
El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018Hernan Wilkinson
 
Lessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsLessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsHernan Wilkinson
 
El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018Hernan Wilkinson
 
El Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerEl Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerHernan Wilkinson
 
Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Hernan Wilkinson
 
Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Hernan Wilkinson
 
Augmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxAugmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxHernan Wilkinson
 
Growing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyGrowing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyHernan Wilkinson
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDHernan Wilkinson
 
Desarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesDesarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesHernan Wilkinson
 
Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Hernan Wilkinson
 

Plus de Hernan Wilkinson (20)

Hacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con softwareHacia una síntesis de diseño a partir de entender qué es modelar con software
Hacia una síntesis de diseño a partir de entender qué es modelar con software
 
Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California Smalltalkers
 
LiveTyping: Update and What is next
LiveTyping: Update and What is nextLiveTyping: Update and What is next
LiveTyping: Update and What is next
 
Cuis smalltalk past present and future
Cuis smalltalk past present and futureCuis smalltalk past present and future
Cuis smalltalk past present and future
 
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
Live Typing- Automatic Type Annotation that improves the Programming eXperie...Live Typing- Automatic Type Annotation that improves the Programming eXperie...
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
 
El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018El Desarrollo de Software como debería Ser - PyConAr 2018
El Desarrollo de Software como debería Ser - PyConAr 2018
 
Lessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsLessons Learned Implementing Refactorings
Lessons Learned Implementing Refactorings
 
Dynamic Type Information
Dynamic Type InformationDynamic Type Information
Dynamic Type Information
 
El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser - Nerdear.la 2018
 
El Desarrollo de Software como debería Ser
El Desarrollo de Software como debería SerEl Desarrollo de Software como debería Ser
El Desarrollo de Software como debería Ser
 
TDD & Refactoring
TDD & RefactoringTDD & Refactoring
TDD & Refactoring
 
Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?
 
Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!
 
CuisUniversity
CuisUniversityCuisUniversity
CuisUniversity
 
Oop is not Dead
Oop is not DeadOop is not Dead
Oop is not Dead
 
Augmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxAugmenting Smalltalk Syntax
Augmenting Smalltalk Syntax
 
Growing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust companyGrowing an open participative horizontal and based on trust company
Growing an open participative horizontal and based on trust company
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDD
 
Desarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agilesDesarrollando sistemas con metodologías y técnicas agiles
Desarrollando sistemas con metodologías y técnicas agiles
 
Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...
 

LiveTyping - Anotación automática de tipos para lenguajes dinámicos