社会焦点

图灵奖得主Alan Kay谈面向对象和函数式编程(2)

字号+ 作者: 来源: 2017-03-24

使用前述的时态建模,可以松掉“求值-应用”的耦合,通过安全的消息传递来获得时间层之间的函数式关系。于是,由于我一直喜欢从系统模拟的视角看待计算,我便把“对象”和“函数”看作两种互补的思想,它们并不冲

  使用前述的时态建模,可以松掉“求值-应用”的耦合,通过安全的消息传递来获得时间层之间的函数式关系。于是,由于我一直喜欢从系统模拟的视角看待计算,我便把“对象”和“函数”看作两种互补的思想,它们并不冲突。

  术语一旦成为宗教或更加严格的选择与风格,便会失去它们的意义。这里说的自然是“面向对象”和“函数式编程”这两个术语。我不会将“函数式编程”的一般概念跟任何特定语言等同起来。我坚持认为“函数思想”是一种可靠的映射。类似的,我也不会把“面向对象”的一般概念同任何特定语言等同起来。如今这两个术语被“殖民”了,意思也变了。

  还有一个大问题是“对象”和“抽象数据类型”的混淆,以及对“数据”和“赋值语句”的固执。如果真正强化了封装,对象就可以根据需要处理设计参数(包括保存历史信息)。

  分布式环境中的对象

  有朋友问我现在如何理解分布式环境中的对象和系统模拟的,是否依然认为有可能构造一种系统,它既有互联网那样可以有机增长的规模,又有类似于虚拟时间的良好的、可预测的语义?

  好问题。这里面有好几组问题及其权衡关系。二十世纪70年代Dave Reed(编者注:美国计算机科学家,UDP协议设计者)最初思考的是面向整个互联网的操作系统应具有什么样子。在他提出的许多有趣想法中,其中之一是通过由虚拟时间(pseudo-time)组织起来的分布式克隆计算来处理长延时和海量潜在用户的问题,然后慢速的互联网仅用于输入和偏差同步。这就是我们本世纪00年代早期在Croquet中实现的东西,那时互联网上一次典型的、还算不错的ping来回大约80到100毫秒。这已经好到可以无需任何服务器而创建《魔兽世界》这样的大规模并行游戏(甚至飞行仿真游戏)了,只要有玩家正在用着的那些机器就够了(分布式)。后来的版本做得更多更全面。

  插一句,去掉实时图形和交互的Croquet便自动提供了一种分布式的面向对象数据库。虚拟时间是背后的大理念,保护着数据库中的分布式原子事务。

  而且多年来人们一直在讨论。它能否实现?需要在哪些领域做多少工作?等等。

  我们在Parc做过的与对象有关的工作就是ARPA/Parc社区中发生的网络思维的一部分,它最终产生了思考更高层网络实体的倾向。“网络层实体”的一个相当不错的、过渡性的实现是Gerry Popek在Parc花了一年时间思考“网终系统应有的样子”之后,和他在UCLA的团队一起完成的LOCUS系统。那是建立在异构机器类型之上的一种迁移式的负载平衡思想,与虚拟时间概念形成高度的互补。

  我希望看到富有才华的团队把第二个问题再过一篇。对可伸缩规模的适应性很难事先预测,最好实际去实现它。对于虚拟时间,如果你了解它却不使用它,任何情况下我都觉得有点疯狂,而如果不了解它,那就有点业余了。在这两者之间,则是以各种“不二法门”为特征的宗教(而这跟任何科学都背道而驰)。

  订阅2017年程序员(含iOS、Android及印刷版)请访问

转载请注明出处。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章