少就是指数多-围棋背后的哲学

2020-05-12 22:01:05

以下是我在2012年6月Go SF会议上的演讲文本。这是私人谈话。在这里,我不代表围棋团队中的其他任何人发言,尽管我想在前面承认,这支团队是创造并继续推动围棋发生的人。我也要感谢围棋SF组织者给我这个机会与你们交谈。几周前有人问我,你在推出围棋时遇到的最大的惊喜是什么?我立刻就知道了答案:虽然我们希望C++程序员把围棋作为一种选择,但实际上大多数围棋程序员都来自Python和Ruby等语言。来自C++的很少。当我们设计一种新的语言来解决我们编写的软件需要解决的问题时,我们--肯、罗伯特和我--都是C++程序员。其他C++程序员似乎并不在意,这几乎是自相矛盾的。今天我想谈谈是什么促使我们创建围棋,以及为什么结果不应该让我们这样惊讶。我保证这将更多的是关于围棋,而不是关于C++,如果你不懂C++,你将能够跟上。答案可以概括为:你认为少就是多,还是少就是少?这是一个比喻,以真实故事的形式出现。贝尔实验室中心最初被分配了三个字母的数字:111用于物理研究,127用于计算科学研究,依此类推。20世纪80年代初,一份备忘录宣布,随着我们对研究的理解不断加深,有必要再增加一个数字,这样我们就可以更好地描述我们的工作。所以我们的中心变成了1127。罗恩·哈丁(Ron Hardin)半认真地开玩笑说,如果我们真正更好地了解我们的世界,我们可以下降一个数字,从127降到只有27。当然,管理层没有听懂这个笑话,也没有料到他们会听懂,但我认为其中蕴含着智慧。少就是多。你理解得越好,你就会变得越简朴。把这个想法牢记在心。回到2007年9月左右,我正在为一个庞大的Google C++程序做一些次要但核心的工作,这是一个你们都曾与之交互过的程序,我的编译工作在我们庞大的分布式编译集群上花费了大约45分钟。一则消息传来,C++标准委员会的几名谷歌员工将发表演讲。他们打算告诉我们在C++0x中将会出现什么,因为它当时被称为C++0x。(它现在被称为C++11)。在那次演讲的一个小时内,我们听到了大约35项计划中的新功能。事实上,还有更多,但在演讲中只描述了35个。当然,其中一些功能是次要的,但演讲中的那些功能至少足够重要,足以让人大吃一惊。有些非常微妙且难以理解,如右值引用,而另一些特别类似于C++,如可变模板,而另一些则是疯狂的,如用户定义的文字。在这一点上,我问了自己一个问题:C++委员会真的认为C++有问题吗?是它没有足够的功能吗?当然,在罗恩·哈丁(Ron Hardin)的笑话的变体中,简化而不是增加语言将是一项更大的成就。当然,这是荒谬的,但请记住这一点。就在那次C++演讲的前几个月,我自己做了一次演讲,你可以在YouTube上看到,关于我早在20世纪80年代构建的一种玩具并发语言。这种语言被称为Newsqueak,当然它是一个前奏。我之所以做这个演讲,是因为我在谷歌的工作中错过了Newsqueak中的一些想法,我一直在想这些想法。我相信它们会让编写服务器代码变得更容易,谷歌真的可以从中受益。我实际上试图找到一种方法将这些想法带到C++中,但失败了。将并发操作与C++的控制结构结合起来太难了,这反过来又让人很难看到真正的优势。再加上C++,这一切看起来都太麻烦了,尽管我承认我在这门语言上从来没有真正流畅过。所以我放弃了这个想法。但是C++0x的演讲让我重新思考。有一件事真的让我很困扰-我想Ken和Robert也是-是新的带有原子类型的C++内存模型。将这样一组微观定义的细节放入一个已经负担过重的类型系统中,感觉是错误的。这似乎也是目光短浅的,因为硬件很可能在未来十年内发生重大变化,将语言与今天的硬件过于紧密地结合在一起是不明智的。谈话结束后,我们回到了办公室。我又开始了一次编辑,把椅子转过来面对罗伯特,开始问一些尖锐的问题。在汇编完成之前,我们用绳子把肯拉了进来,并决定做点什么。我们不想永远用C++编写,我们--尤其是我--希望在编写Google代码时拥有指尖上的并发性。我们还想解决p