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
1. 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
21. 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”
23. 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
24. 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
32. 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
33. 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; }}}
57. 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
58. 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%
60. 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!
61. 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
63. 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
64. 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