Swift, an increasingly-popular programming language, advocates the use of protocols, which define a set of required methods and properties for conforming types. Protocols are commonly used in Swift programs for abstracting away implementation details; e.g., in an industrial app, they are heavily used to enable mock objects for unit testing. Unfortunately, heavy use of protocols can result in significant performance overhead. Beyond the dynamic dispatch often associated with such a feature, Swift allows for both value and reference types to conform to a protocol, leading to significant boxing and unboxing overheads.
In this paper, we describe three new optimizations and transformations to reduce the overhead of Swift protocols. Within a procedure, we define LocalVar, a dataflow analysis and transformation to remove both dynamic dispatch and boxing overheads. We also describe Param, which optimizes the case of protocol-typed method parameters using specialization. Finally, we describe SoleType, a transformation that injects casts when a global analysis (like type-hierarchy analysis) discovers some protocol variable must have some concrete type. We also describe how these optimizations work fruitfully together and with existing Swift optimizations to deliver further speedups.
We perform elaborate experimentation and demonstrate that our optimizations deliver on average 1.56x speedup on a suite of Swift benchmarks. Further, we applied the optimizations to a production iOS Swift application used by millions of customers daily. For a set of performance spans defined by the developers of the application (none from the author list), the optimized version showed speedups ranging from 6.9% to 55.49%. A version of our optimizations has been accepted as part of the official Swift compiler distribution.
Thu 24 Oct
|16:00 - 16:22|
Ulf AdamsGoogleLink to publication DOI
|16:22 - 16:45|
|16:45 - 17:07|
Hashim SharifUniversity of Illinois at Urbana-Champaign, Prakalp SrivastavaUniversity of Illinois at Urbana-Champaign, Muhammad HuzaifaUniversity of Illinois at Urbana-Champaign, Maria KotsifakouUniversity of Illinois at Urbana-Champaign, Keyur JoshiUniversity of Illinois at Urbana-Champaign, Yasmin SaritaCornell University, Nathan ZhaoUniversity of Illinois at Urbana-Champaign, Vikram AdveUniversity of Illinois at Urbana-Champaign, Sasa MisailovicUniversity of Illinois at Urbana-Champaign, Sarita AdveUniversity of Illinois at Urbana-Champaign
|17:07 - 17:30|