Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

149 views

Published on

Slides de la charla dada en la PyConAr

Published in: Software
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download Full EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download Full doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download PDF EBOOK here { https://soo.gd/irt2 } ......................................................................................................................... Download EPUB Ebook here { https://soo.gd/irt2 } ......................................................................................................................... Download doc Ebook here { https://soo.gd/irt2 } ......................................................................................................................... ......................................................................................................................... ................................................................................................................................... eBook is an electronic version of a traditional print book THIS can be read by using a personal computer or by using an eBook reader. (An eBook reader can be a software application for use on a computer such as Microsoft's free Reader application, or a book-sized computer THIS is used solely as a reading device such as Nuvomedia's Rocket eBook.) Users can purchase an eBook on diskette or CD, but the most popular method of getting an eBook is to purchase a downloadable file of the eBook (or other reading material) from a Web site (such as Barnes and Noble) to be read from the user's computer or reading device. Generally, an eBook can be downloaded in five minutes or less ......................................................................................................................... .............. Browse by Genre Available eBooks .............................................................................................................................. Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, ......................................................................................................................... ......................................................................................................................... .....BEST SELLER FOR EBOOK RECOMMEND............................................................. ......................................................................................................................... Blowout: Corrupted Democracy, Rogue State Russia, and the Richest, Most Destructive Industry on Earth,-- The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company,-- Call Sign Chaos: Learning to Lead,-- StrengthsFinder 2.0,-- Stillness Is the Key,-- She Said: Breaking the Sexual Harassment Story THIS Helped Ignite a Movement,-- Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones,-- Everything Is Figureoutable,-- What It Takes: Lessons in the Pursuit of Excellence,-- Rich Dad Poor Dad: What the Rich Teach Their Kids About Money THIS the Poor and Middle Class Do Not!,-- The Total Money Makeover: Classic Edition: A Proven Plan for Financial Fitness,-- Shut Up and Listen!: Hard Business Truths THIS Will Help You Succeed, ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

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

  1. 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
  2. 2. ¿Por qué les gusta Python?
  3. 3. (entre otras características) Es Dinámicamente Tipado ¡lo cual tiene muchas ventajas!
  4. 4. Pero también sabemos que … tiene algunas desventajas
  5. 5. Hay “información que falta”, que no es explícita
  6. 6. Esa información que falta es Información de Tipos
  7. 7. Como programadores, temenos que recordar e inferir esa información Eso nos saca tiempo & energía
  8. 8. ¿Por qué no tomamos ese tiempo & energía de la computadora?
  9. 9. Dicho de Bret Victor – Inventing on a Principle ‘estamos acostumbrados a jugar a ser computadoras’ http://worrydream.com/#!/InventingOnPrinciple
  10. 10. Dicho de programador de lenguajes dinámicos: ‘estamos acostumbrados a jugar juegos de memoria de tipos’
  11. 11. Soluciones
  12. 12. Inferencia de Tipos
  13. 13. Inferencia de Tipos 1980 1981
  14. 14. Desventajas •Lento •Incompleto •Información Incorrecta en algunos casos
  15. 15. Anotación Manual de Tipos 1982!!
  16. 16. Anotación Manual de Tipos Strongtalk 1994
  17. 17. Anotación Manual de Tipos TypeScript ~ 2012/2014
  18. 18. Anotación Manual de Tipos Python 2.7 - Type Comments ~ 2014
  19. 19. Anotación Manual de Tipos Python 3.5 - Type Hints
  20. 20. Anotación Manual de Tipos Ruby with Sorbet ~ 2018
  21. 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”
  22. 22. ¿Qué es LiveTyping?
  23. 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. 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
  25. 25. No es una nueva idea…
  26. 26. Since 1981! 1970!!
  27. 27. No es una nueva idea pero… Es un idea particular con una implementación que funciona
  28. 28. LiveTyping no tiene como objetivo principal realizar chequeo de tipos
  29. 29. LiveTyping tiene como objetivo facilitar el desarrollo con lenguajes dinámicos
  30. 30. ¿Cómo funciona?
  31. 31. 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
  32. 32. 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; }}}
  33. 33. Ejemplos
  34. 34. Cuis Smalltalk & CuisUniversity
  35. 35. TaTeTi (TicTacToe)
  36. 36. Mostrando y Administrando Types
  37. 37. Muy útil para “legacy code” o mal escrito (Morph)
  38. 38. Autocompletion
  39. 39. DynamicType (SelfType, ClassType, InstanceType)
  40. 40. Actual Implementors (“a much better use of the human brain”-Tudor et al )
  41. 41. Actual Senders Sure and Possible (Per Message Send analysis)
  42. 42. Refactorings con Actual Scope
  43. 43. Type Checker (we know for sure when nil is assigned!)
  44. 44. Morph & Behavior
  45. 45. Conclusión
  46. 46. Sin un gran esfuerzo, nos deshicimos de la mayoría de las desventajas
  47. 47. No temenos que mantener lo tipos de la variables, lo hace automáticamente
  48. 48. No temenos que recordar or inferir los tipos nunca más!
  49. 49. Los tipos no molestan en la lectura del Código
  50. 50. Es una técnica muy simple que mejora drásticamente la experiencia del programador
  51. 51. Creo humildemente que respeta y honra el espíritu de los lenguajes dinámicos
  52. 52. ¿Cuál es mi objetivo?
  53. 53. Con Smalltalk, dejar de decir que es ‘Dynamically Typed’ y empezar a decir que es, ‘Lively Typed’
  54. 54. Que los otros lenguajes dinámicamente tipados se suban al tren
  55. 55. Estadísticas
  56. 56. 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
  57. 57. 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%
  58. 58. Trabajo Futuro
  59. 59. 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!
  60. 60. 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
  61. 61. ¿Cómo obtenerlo?  One Click - CuisUniversity: http://www.cuisuniversity.org/  Repo: https://github.com/hernanwilkinson/LiveTyping
  62. 62. 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
  63. 63. 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
  64. 64. ¿Preguntas?
  65. 65. ¡Gracias! @HernanWilkinson – hernan.wilkinson@10pines.com – www.10pines.com

×