Context: Gradually-typed languages allow typed and untyped code to interoperate, but typically come with significant drawbacks. In some languages, the types are unreliable; in others, communication across type boundaries can be extremely expensive; and still others allow only limited forms of interoperability. The research community is actively seeking a sound, fast, and expressive approach to gradual typing. Inquiry: This paper describes Static Python, a language developed by engineers at Instagram that has proven itself sound, fast, and reasonably expressive in production. Static Python's approach to gradual types is essentially a programmer-tunable combination of the concrete and transient approaches from the literature. Concrete types provide full soundness and low performance overhead, but impose nonlocal constraints. Transient types are sound in a shallow sense and easier to use; they help to bridge the gap between untyped code and typed concrete code. Approach: We evaluate the language in its current state and develop a model that captures the essence of its approach to gradual types. We draw upon personal communication, bug reports, and the Static Python regression test suite to develop this model. Knowledge: Our main finding is that the gradual soundness that arises from a mix of concrete and transient types is an effective way to lower the maintenance cost of the concrete approach. We also find that method-based JIT technology can eliminate the costs of the transient approach. On a more technical level, this paper describes two contributions: a model of Static Python and a performance evaluation of Static Python. The process of formalization found several errors in the implementation, including fatal errors. Grounding: Our model of Static Python is implemented in PLT Redex and tested using property-based soundness tests and 265 tests from the Static Python regression suite. This paper includes a small core of the model to convey the main ideas of the Static Python approach and its soundness. Our performance claims are based on production experience in the Instagram web server. Migrations to Static Python in the server have caused a 3.7\% increase in requests handled per second at maximum CPU load. Importance: Static Python is the first sound gradual language whose piece-meal application to a realistic codebase has consistently improved performance. Other language designers may wish to replicate its approach, especially those who currently maintain unsound gradual languages and are seeking a path to soundness.
翻译:渐变式语言允许互换打印和非类型代码, 但通常会出现显著的偏差。 在有些语言中, 类型不可靠; 在另一些语言中, 类型间通信可能极其昂贵; 其它语言只允许有限形式的互操作性。 研究界正在积极寻找一种声音、 快速和表达方式来逐步打字。 调查 : 本文描述了 Static Python, 一种由Instagram工程师开发的语言, 它在制作中已经证明自己是健全的、 快速的、 并且有合理表达的。 静态 Python 语言对渐进式语言的处理方式基本上是一种不易变现的组合: 在文献中, 具体和易变异式的计算方法。 具体模式性能类型中, Stython 和变异式的处理方法中, 我们的当前状态评价语言, 并开发一种能捕捉到其渐进式方法的精髓。 我们从个人通信、 错误报告, 和静态 Python 变现式的计算方法在持续式测试模式中, 一种成本模式中, 将逐渐变现。