大家好,我是煎鱼。 在 Go1.17 发布后,我们惊喜的发现 Go 语言他又又又优化了,编译器改进后产生了约 5% 的性能提升,也没有什么破坏性修改,保证了向前兼容。 他做了些什么呢,好像没怎么看到有人提起。为此今天煎鱼带大家来解读两新提案: 《Proposal: Register-based Go calling convention》 《Proposal: Create an undefined internal calling convention》 本文会基于提案讲解和拆解,毕竟分享新知识肯定要从官方资料作为事实基准出发。 背景 在以往的 Go 版本中,Go 的调用约定简单且几乎跨平台通用,其原因在于选用了基于 Plan9 ABI 的堆栈调用约定,也就是函数的参数和返回值都是通过堆栈上来进行传递。