Breaking Type Safety in Go: An Empirical Study on the Usage of the unsafe Package
Thu 12 May 2022 11:10 - 11:15 at ICSE room 2-odd hours - Mining Software Repositories 5 Chair(s): Sonia Haiduc
A decade after its first release, the Go programming language has become a major programming language in the development landscape. While praised for its clean syntax and C-like performance, Go also contains a strong static type system that prevents arbitrary type casting and arbitrary memory access, making the language type-safe by design. However, to give developers the possibility of implementing low-level code, Go ships with a special package called unsafe that offers developers a way around the type-safety of Go programs. The package gives greater flexibility to developers but comes at a higher risk of runtime errors, chances of non-portability, and the loss of compatibility guarantees for future versions of Go.
In this paper, we present the first large-scale study on the usage of the unsafe package in 2,438 popular Go projects. Our investigation shows that unsafe is used in 24% of Go projects, motivated primarily by communicating with operating systems and C code but is also commonly used as a source of performance optimization. Developers are willing to use unsafe to break language specifications (e.g., string immutability) for better performance and 6% of analyzed projects that use unsafe perform risky pointer conversions that can lead to program crashes and unexpected behavior. Furthermore, we report a series of real issues faced by projects that use unsafe, from crashing errors and non-deterministic behavior to having their deployment restricted from certain popular environments. Our findings can be used to understand how and why developers break type-safety in Go and help motivate further tools and language development that could make the usage of unsafe in Go even safer.
Tue 10 MayDisplayed time zone: Eastern Time (US & Canada) change
Thu 12 MayDisplayed time zone: Eastern Time (US & Canada) change
11:00 - 12:00 | Mining Software Repositories 5Journal-First Papers / Technical Track / SEIP - Software Engineering in Practice at ICSE room 2-odd hours Chair(s): Sonia Haiduc | ||
11:00 5mTalk | Assisting Example-based API Misuse Detection via Complementary Artificial Examples Journal-First Papers Maxime Lamothe Polytechnique Montréal, Heng Li Polytechnique Montréal, Weiyi Shang Concordia University Link to publication DOI Pre-print Media Attached | ||
11:05 5mTalk | What happens in my code reviews? An investigation on automatically classifying review changes Journal-First Papers Enrico Fregnan University of Zurich, Switzerland, Fernando Petrulio University of Zurich, Linda Di Geronimo University of Zurich, Switzerland, Alberto Bacchelli University of Zurich Link to publication Pre-print Media Attached | ||
11:10 5mTalk | Breaking Type Safety in Go: An Empirical Study on the Usage of the unsafe Package Journal-First Papers Diego Costa Concordia University, Canada, Suhaib Mujahid Concordia University, Rabe Abdalkareem Carleton University, Emad Shihab Concordia University Link to publication Pre-print Media Attached | ||
11:15 5mTalk | An Empirical Study of Release Note Production and Usage in Practice Journal-First Papers Tingting Bi Monash Univerity, Xin Xia Huawei Software Engineering Application Technology Lab, David Lo Singapore Management University, John Grundy Monash University, Thomas Zimmermann Microsoft Research | ||
11:20 5mTalk | Bus Factor In Practice SEIP - Software Engineering in Practice Elgun Jabrayilzade Bilkent University, Mikhail Evtikhiev JetBrains Research, Eray Tüzün Bilkent University, Vladimir Kovalenko JetBrains Research Pre-print Media Attached | ||
11:25 5mTalk | BugListener: Identifying and Synthesizing Bug Reports from Collaborative Live Chats Technical Track Lin Shi ISCAS, Fangwen Mu Institute of Software Chinese Academy of Sciences, YuMin Zhang Institute of Software, Chinese Academy of Sciences, Ye Yang Stevens Institute of Technology, Junjie Chen Tianjin University, Xiao Chen Monash University, Hanzhi Jiang Institute of Software at Chinese Academy of Sciences, Ziyou Jiang Institute of Software at Chinese Academy of Sciences, Qing Wang Institute of Software at Chinese Academy of Sciences Pre-print Media Attached |