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.


翻译:在首次发布十年后,Go编程语言已成为发展格局中的主要编程语言。Go虽然因其清洁的语法和C类性能而受到赞扬,但也包含一个强大的静态类型系统,防止任意的投版和任意的记忆访问,使语言类型通过设计而变得安全。然而,为了使开发者有可能实施低级别代码,Go编程语言在首次发布之后十年后成为了开发者的主要编程语言语言。Go编程语言为开发者提供了更大的灵活性,但是在运行时间错误、不可移动的可能性以及未来版本Go的兼容性保障的丧失方面风险更大。在本文中,我们介绍了关于2,438个流行的Go项目中使用不安全组合的首个大规模研究,使语言类型安全。我们的调查显示,24 %的Go项目使用不安全,主要是与操作系统和C类代码的沟通,但也被普遍用作绩效优化的来源。 开发者愿意使用不安全的方法打破语言的规格(例如,串联不易移动性)来改进业绩,而6%的分析项目使用不安全的点转换方法,甚至导致不可靠地进行危险地点转换。在不精确的Go-rodition-room-rodudududududududududududududer-rodududududududududu,我们使用了不使用了某种行为, roducism roducismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismismmismismismismismismismismismismism

0
下载
关闭预览

相关内容

专知会员服务
51+阅读 · 2021年2月10日
专知会员服务
123+阅读 · 2020年9月8日
专知会员服务
17+阅读 · 2020年9月6日
Linux导论,Introduction to Linux,96页ppt
专知会员服务
78+阅读 · 2020年7月26日
[综述]深度学习下的场景文本检测与识别
专知会员服务
77+阅读 · 2019年10月10日
【SIGGRAPH2019】TensorFlow 2.0深度学习计算机图形学应用
专知会员服务
39+阅读 · 2019年10月9日
Hierarchically Structured Meta-learning
CreateAMind
26+阅读 · 2019年5月22日
CCF A类 | 顶级会议RTSS 2019诚邀稿件
Call4Papers
10+阅读 · 2019年4月17日
Call for Participation: Shared Tasks in NLPCC 2019
中国计算机学会
5+阅读 · 2019年3月22日
IEEE | DSC 2019诚邀稿件 (EI检索)
Call4Papers
10+阅读 · 2019年2月25日
Ray RLlib: Scalable 降龙十八掌
CreateAMind
9+阅读 · 2018年12月28日
A Technical Overview of AI & ML in 2018 & Trends for 2019
待字闺中
16+阅读 · 2018年12月24日
【推荐】用Python/OpenCV实现增强现实
机器学习研究会
15+阅读 · 2017年11月16日
已删除
将门创投
5+阅读 · 2017年8月15日
Auto-Encoding GAN
CreateAMind
7+阅读 · 2017年8月4日
Arxiv
0+阅读 · 2021年3月29日
Arxiv
0+阅读 · 2021年3月28日
Revealing the Dark Secrets of BERT
Arxiv
4+阅读 · 2019年9月11日
VIP会员
相关VIP内容
专知会员服务
51+阅读 · 2021年2月10日
专知会员服务
123+阅读 · 2020年9月8日
专知会员服务
17+阅读 · 2020年9月6日
Linux导论,Introduction to Linux,96页ppt
专知会员服务
78+阅读 · 2020年7月26日
[综述]深度学习下的场景文本检测与识别
专知会员服务
77+阅读 · 2019年10月10日
【SIGGRAPH2019】TensorFlow 2.0深度学习计算机图形学应用
专知会员服务
39+阅读 · 2019年10月9日
相关资讯
Hierarchically Structured Meta-learning
CreateAMind
26+阅读 · 2019年5月22日
CCF A类 | 顶级会议RTSS 2019诚邀稿件
Call4Papers
10+阅读 · 2019年4月17日
Call for Participation: Shared Tasks in NLPCC 2019
中国计算机学会
5+阅读 · 2019年3月22日
IEEE | DSC 2019诚邀稿件 (EI检索)
Call4Papers
10+阅读 · 2019年2月25日
Ray RLlib: Scalable 降龙十八掌
CreateAMind
9+阅读 · 2018年12月28日
A Technical Overview of AI & ML in 2018 & Trends for 2019
待字闺中
16+阅读 · 2018年12月24日
【推荐】用Python/OpenCV实现增强现实
机器学习研究会
15+阅读 · 2017年11月16日
已删除
将门创投
5+阅读 · 2017年8月15日
Auto-Encoding GAN
CreateAMind
7+阅读 · 2017年8月4日
Top
微信扫码咨询专知VIP会员