这是RussCox的系列论文的第三篇,也是最后一篇:UpdatingtheGoMemoryModel。
文章对官方的Go内存模型做了一些补充和思考。
当前的Go语言内存模型是在年编写的,从那以后略有更新。很明显,至少有一些细节我们应该添加到当前的内存这个内存模型中,其中包括对竞态检测器的明确认可,以及关于sync/atomic中的API是如何同步程序的清晰声明。
这篇文章重申了Go的总体哲学和当前的内存模型,然后概述了我认为我们应该对Go内存模型进行的相对较小的调整。假定你已经了解了前两篇文章“硬件内存模型”和“编程语言内存模型”中的背景知识。
我已经开启了一个GitHub讨论项目来收集对反馈。根据这些反馈,我打算在本月晚些时候准备一份正式的Go提案。使用GitHub讨论本身就是一个实验,我还会继续尝试找到一个合理的方法来扩大这些重要变化的讨论。
Go设计哲学Go旨在成为构建实用、高效系统的编程环境。它的目标是为小型项目的轻量级开发语言,但也可以优雅地扩展到大型项目和大型工程团队。
Go鼓励在高层次上处理并发,特别是通过通信。第一句Go箴言(Goproverb)就是“不要通过共享内存来通信,而是通过通信共享内存。”另一个流行的谚语是“清晰胜于聪明。”换句话说,Go鼓励通过避免使用巧妙的代码来避免狡猾的bug。
Go的目标不仅仅是可以理解的程序,还包括可以理解的语言和可以理解的packageAPI。复杂或巧妙的语言特征或API与这一目标相矛盾。正如TonyHoare在年图灵奖演讲中所说:
Iconcludethattherearetwowaysofconstructingasoftwaredesign:Onewayistomakeitsosimplethatthereareobviouslynodeficienciesandtheotherwayistomakeitso