Summary
One of the draws of Python is how dynamic and flexible the language can be. Sometimes, that flexibility can be problematic if the format of variables at various parts of your program is unclear or the descriptions are inaccurate. The growing middle ground is to use type annotations as a way of providing some verification of the format of data as it flows through your application and enforcing gradual typing. To make it simpler to get started with type hinting, Carl Meyer and Matt Page, along with other engineers at Instagram, created MonkeyType to analyze your code as it runs and generate the type annotations. In this episode they explain how that process works, how it has helped them reduce bugs in their code, and how you can start using it today.
Preface
- Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
- I would like to thank everyone who supports us on Patreon. Your contributions help to make the show sustainable.
- When you’re ready to launch your next project you’ll need somewhere to deploy it. Check out Linode at podastinit.com/linode and get a $20 credit to try out their fast and reliable Linux virtual servers for running your awesome app. And now you can deliver your work to your users even faster with the newly upgraded 200 GBit network in all of their datacenters.
- If you’re tired of cobbling together your deployment pipeline then it’s time to try out GoCD, the open source continuous delivery platform built by the people at ThoughtWorks who wrote the book about it. With GoCD you get complete visibility into the life-cycle of your software from one location. To download it now go to podcatinit.com/gocd. Professional support and enterprise plugins are available for added piece of mind.
- Visit the site to subscribe to the show, sign up for the newsletter, and read the show notes. And if you have any questions, comments, or suggestions I would love to hear them. You can reach me on Twitter at @Podcast__init__ or email [email protected])
- To help other people find the show please leave a review on iTunes, or Google Play Music, tell your friends and co-workers, and share it on social media.
- A few announcements before we start the show:
- There’s still time to get your tickets for PyCon Colombia, happening February 9th and 10th. Go to pycon.co to learn more and register.
- There is also still time to register for the O’Reilly Software Architecture Conference in New York Feb 25-28. Use the link podcastinit.com/sacon-new-york to register and save 20%
- If you work with data or want to learn more about how the projects you have heard about on the show get used in the real world then join me at the Open Data Science Conference in Boston from May 1st through the 4th. It has become one of the largest events for data scientists, data engineers, and data driven businesses to get together and learn how to be more effective. To save 60% off your tickets go to podcastinit.com/odsc-east-2018 and register.
- Your host as usual is Tobias Macey and today I’m interviewing Carl Meyer and Matt Page about MonkeyType, a system to collect type information at runtime for your Python 3 code
Interview
- Introductions
- How did you get introduced to Python?
- What is MonkeyType and how did the project get started?
- How much overhead does the MonkeyType tracing add to the running system, and what techniques have you used to minimize the impact on production systems?
- Given that the type information is collected from call traces at runtime, and some functions may accept multiple different types for the same arguments (e.g.
add
), do you have any logic that will allow for combining that information into a higher-order type that gets set as the annotation? - How does MonkeyType function internally and how has the implementation evolved over the time that you have been working on it?
- Once the type annotations are present in your code base, what other tooling are you using to take advantage of that information?
- It seems as though using MonkeyType to trace your running production systems could be a way to inadvertantly identify dead sections of code that aren’t being executed. Have you investigated ways to use the collected type information perform that analysis?
- What have been some of the most challenging aspects of building, using, and maintaining MonkeyType?
- What have been some of the most interesting or noteworthy things that you have learned in the process of working on and with MonkeyType?
- What have you found to be the most useful and most problematic aspects of the typing capabilities provided in recent versions of Python?
- For someone who wants to start using MonkeyType today, what is involved in getting it set up and using it in a new or existing codebase?
- What features or improvements do you have planned for future releases of MonkeyType?
Keep In Touch
- Carl
- Matt
- @void_star on Twitter
Picks
- Tobias
- Carl
- Matt
Links
- MonkeyType
- Dive Into Python
- Python 3 Typing Module
- MyPy
- Mike Krieger
- PyAnnotate
- Type Annotations
- Type Stubs
- PEP 523 frame evaluation api
- Scuba
- Haskell
- Rust
- PEP 563 Postponed Evaluation of Annotations
- Gary Bernhardt – Ideology
- coverage.py
The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA