||
[敬请读者注意] 本人保留本文的全部著作权利。如果哪位读者使用本文所描述内容,请务必如实引用并明白注明本文出处。如果本人发现任何人擅自使用本文任何部分内容而不明白注明出处,恕本人在网上广泛公布侵权者姓名。敬请各位读者注意,谢谢!
何谓“计算机”?
程京德
[最近又在网上看到一些关于计算机的胡说八道,于是将十年前发表在科学网博客上的旧文[1]大幅度修改增补,科普一下现代通用程序内存可编程电子数字计算机究竟是怎样的一种自动计算机器。]
首先,我们要介绍说明的“计算机”,亦即从上个世纪50年代起在我们人类社会中被广泛地应用,俗称“电脑”的计算机,准确完整的名称应该为“通用程序内存可编程电子数字计算机(general-purpose stored-program programmable electronic digital computer)”。其次,本文的目的是科普“计算机”,有关“可计算性理论”,请参阅笔者其它相关科普文章[2]。
本文为读者解惑如下问题:符合什么必要条件的计算装置可以被称之为“通用程序内存可编程电子数字计算机”?世界上第一台“计算机”,是在哪里,由谁创造的,什么样子的计算装置?“计算机”能够做些什么?不能够做什么?
何谓“通用程序内存可编程电子数字计算机”?
我国历史上最常用的计算工具,算盘,算不算“计算机”?早年工程技术人员用的计算尺,算不算“计算机”?现代电子数字计算机被发明制造出来之前的手摇计算机,算不算“计算机”?人们常用的电子计算器为什么被称为是“计算器”而不被称为“计算机”?
现代中文名词“计算机”应该是来源于英语“computer”一词(而并非像许多现代汉语词汇那样来源于日语,因为在日语中“计算机”一词是用片假名来表示的)。根据牛津英语词典 [OED,2nd Edition,1989],“computer”的第一意的解释是“One who computes; a calculator, reckoner”(1646-1855);第二意的解释才是“A calculating-machine”(1897-1964)。如今,当我们说到“计算机(computer)”的时候,大概谁也不会把算盘当作“计算机”了。但是,如果就简单地把“计算机”解释为“计算机械”,那么,算盘当然是可以被称之为“计算机”的。显然,当我们从科学及技术的角度来谈及“计算机”以及从其延伸出来的概念时,对所谓“计算机”需要一个比较清晰、严格的定义。
牛津大学出版的计算辞典把“computer”定义为:“A device or system that is capable of carrying out a sequence of operations in a distinctly and explicitly defined manner. The operations are frequently numerical computations or data manipulations but also include input/output; the operations within the sequence may depend on particular data values. The definition of the sequence is called the program. A computer can have either a stored program or wired program. A stored program may exist in an alterable memory or in a nonalterable memory. Today, the term “computer” without qualification is a synonym for “stored-program digital computer.”[3]
IEEE的行业标准辞典把“computer system”定义为:“A system containing one or more computers and associated software.”[4] 但是却没有对“computer”自身的定义!
让我们从“通用程序内存可编程电子数字计算机”这个名称来逐步展开现代“计算机”的定义。
“电子数字计算机”的意思是指,相对于模拟技术和机械技术,“计算机”是用数字技术及电子技术来实现的。此处不论电子技术是真空电子管(第一代计算机)、晶体管(第二代计算机)、集成电路(第三代计算机)、大规模及超大规模集成电路(当代计算机)来实现的。“数字技术”是指,“计算机”中的计算以及为了进行计算所需的数据存储全部是通过数字(实际上就是由0和1两个数字构成的字符串)来完成的。
“可编程计算机”的意思是指,“计算机”的计算是根据事先编写好计算程序并且把计算程序交给“计算机”后由其自动完成的,亦即,“计算机”是由计算程序控制的。
“程序内存计算机”的意思是指,“计算机”的计算程序是和计算用数据一样,存放在“计算机”的内部存储器当中的。
“通用计算机”的意思是指,“计算机”可以用来解决任何可计算问题(请参阅[2]),亦即,只要任何一个问题类可以有计算方法(算法)可以编制出计算程序,那么这个问题类的任何实例都可以用“计算机”计算出结果。
为了能够准确地把现代“通用程序内存可编程电子数字计算机”和其它各种计算机械区分开来,以计算机系统结构,亦即,不论实现技术仅以“计算机”赖以工作的组织(逻辑)结构来定义“计算机”是必要的。从计算机系统结构的观点来看,能够被称之为现代通用“计算机”的计算机械必须同时满足下面的必要条件:
(1) “程序控制/可编程”:让“计算机”的通用演算装置按照指定顺序来执行演算指令的控制程序是独立于该演算装置而从其外部提供给它的,演算用的数据也是独立于该演算装置而从其外部提供给它的,从而可以使得“计算机”演算装置自身能够独立于控制程序和数据进行演算而具备通用性。
(2) “程序内存/程序存储”:规定演算顺序的控制程序以及计算所需数据在“计算机”实际进行演算之前就已经放置在“计算机”内部存储器上,从而可以使得“计算机”的演算装置和内部存储装置分离来开设计成为两个独立单元,在实际进行演算时能够以和演算速度相当的速度来取出控制程序对演算顺序实施控制,并且对于参数化的同类计算可以不必逐次输入控制程序。
(3) “程序可改”:规定演算顺序的控制程序的执行结果,可以修改存放在内部存储器中的控制程序本身,亦即,控制程序和演算所需要/产生的数据,在内部存储器中都是同样地可修改的,从而可以使得“计算机”在实际进行演算时能够如同处理数据一样地处理控制程序本身。
粗略地说,现代“计算机”自身的通用性,来源于程序控制;现代“计算机”的高速性,来源于程序内存;现代“计算机”所能完成计算任务之多样性,来源于程序可改。
笔者在上面说明的,都是计算机系统结构的技术实现问题,而“通用程序内存可编程电子数字计算机”在理论上的可能性及局限性,则在于可计算性理论[2]。
所谓“量子计算机”是“通用程序内存可编程量子计算机”吗?
目前世界各国正在研发的所谓“量子计算机”,当然可以说是一种“计算装置”,但是绝非“通用程序内存可编程量子计算机”。
所以,“量子计算机”中的“计算机”,与“电子数字计算机”中的“计算机”,实现原理当然另论,在功能上是还有极大差异的,深入讨论超出本文范围了。
世界上第一台“计算机”
从现代通用计算机的最基本特征之一“可编程”的观点来看,人类历史上对实现可编程通用计算机械的首次尝试,应该追朔到19世纪英国数学家巴贝奇(Charles Babbage, 1791-1871)设计制造的机械式“解析机”(没有最终全部完成)了。巴贝奇的“解析机” 的确可以称为是世界上第一台可编程通用计算机(为解析机编程的是英国诗人拜伦(G.G. Byron)的女儿、法国 Lovelace伯爵夫人 Ada(Augusta Ada King, Countess of Lovelace, 1815-1852),世界上第一位程序员;由美国国防部主导设计的通用程序设计语言 Ada 就是为了纪念她而命名),但它既不是程序内存的,当然也不是程序可改的。
德国⼯程师楚泽(Konrad Ernst Otto Zuse,1910-1995)于1938年前后设计、1941年制造完成、用继电器实现的 Z3 机电计算机,是世界上第一台可编程数字计算机(但是没有设计条件分支指令因而计算能力不完全),但是 Z3 不是程序内存的,当然也不是程序可改的。
美国爱荷华州立大学的阿塔纳索夫(John Vincent Atanasoff, 1903-1995)在其研究生助手贝瑞(Clifford Edward Berry, 1918-1963)的帮助下于1937年前后设计、1942年成功测试、用电子真空管实现的 ABC(Atanasoff-Berry Computer) 计算机,是世界上第一台电子数字计算机(并未完全完成),但是不可编程、不是程序控制的、并非通用(仅设计用于解线性方程组)。一个非常重要的事实是,设计 ENIAC 的埃克特和莫奇利(详见下文)访问过阿塔纳索夫因而知晓 ABC;1973年,美国联邦法院得出结论:ENIAC 的发明者从阿塔纳索夫那⾥继承了电⼦数字计算机的主要构件思想,因此注销了埃克特和莫奇利申请的 ENIAC 的专利。
由美国陆军主导,在美国宾夕法尼亚大学由埃克特(John Presper Eckert, 1919-1995)和莫奇利(John William Mauchly, 1907-1980)主持于1943年开始研制、1946年完成、用电子真空管实现的 ENIAC (Electronic Numerical Integrator and Computer),是世界上第一台程序控制/可编程电子数字计算机,但不是程序内存的,当然也不是程序可改的(1948年以后经过数次改良升级的 ENIAC 是程序(固定)内存的)[7]。
由威尔克斯(Maurice Vincent Wilkes, 1913-2010)领导的剑桥大学数学研究所小组(参考冯诺依曼报告草稿,详见下文)设计实现的 EDSAC (Electronic Delay Storage Automatic Calculator) 是世界上第一台“通用程序内存可编程电子数字计算机”,于1949年5月6日成功地实施了程序控制的计算。威尔克斯因此成就而获得第二次(1967年)图灵奖[5,6]。现今世界上所有的通用电子数字计算机,从系统结构的观点来看,全都与 EDSAC 没有什么本质上的不同。
EDSAC 是世界上第一台“通用程序内存可编程电子数字计算机”这个历史事实是世界公认的,但是,关于“程序内存”概念究竟是谁提出的,由于冯诺依曼个人行为,却在当年有过一段“公案”,致使直到今天,“通用程序内存可编程电子数字计算机”的系统结构还不恰当地被称为“冯诺依曼系统结构”[5-14]。
“程序内存”概念是埃克特和莫奇利在考案设计 ENIAC 的后继机 EDVAC 时提出的[5-14]。但是,冯诺依曼却以其个人名义撰写了一个报告草稿总结了 EDVAC 的设计思想,而这份报告草稿却又被某些人在并未通知团队其他成员及获得许可的情况下私自流传了出去[5-14]。
威尔克斯在其图灵奖讲演中说道:“埃克特和莫奇利意识到主要问题在于存储,他们建议未来的机器使用超声波延迟线。指令和数字将混合在同一内存中。… 冯·诺依曼当时以顾问的身份与摩尔学院小组合作。… 对于计算领域来说冯·诺依曼功不可没。他立刻意识到 … 存储程序原理所蕴含的潜力。冯·诺依曼发挥了他巨大的威望和影响力,这一点很重要,因为新的想法对某些人来说太具有革命性,而且有强烈的声音说超声波内存不够可靠,在同一内存中混合指令和数字违背了自然规律。 … 后续发展为由埃克特和莫奇利所教示的原理提供了决定性的证明。(Eckert and Mauchly appreciated that the main problem was one of storage, and they proposed for future machines the use of ultrasonic delay lines. Instructions and numbers would be mixed in the same memory. … von Neumann was, at that time, associated with the Moore School group in a consultative capacity. ... The computing field owes a very great debt to von Neumann. He appreciated at once ... the potentialities implicit in the stored program principle. That von Neumann should bring his great prestige and influence to bear was important, since the new ideas were too revolutionary for some, and powerful voices were being raised to say that the ultrasonic memory would not be reliable enough, and that to mix instructions and numbers in the same memory was going against nature. ... Subsequent developments have provided a decisive vindication of the principles taught by Eckert and Mauchly.)”[5,6]
威尔克斯还曾说过:“据我所知,冯·诺依曼从未声称自己是程序内存方式的唯一发明者。出于这个原因,我不喜欢冯·诺依曼计算机这个术语作为存储程序计算机的通用术语。”[7]
“存储程序概念的出现早于冯·诺依曼参与 EDVAC 设计。冯·诺依曼经常因这一基本概念而受到赞誉,这可能是因为他撰写了一份初步报告,总结了 EDVAC 设计的早期工作,包括存储程序概念。冯·诺依曼对这一概念的发展做出了重大贡献,但将其发明归功于他是一个历史错误。 (The stored-program concept predates von Neumann’s participation in the EDVAC design. That von Neumann is often given credit for this fundamental concept is likely due to the fact that he wrote a preliminary report which summarized the earlier work on the EDVAC design, including the stored-program concept. Von Neumann contributed significantly to the development of this concept, but to credit him with its invention is an historical error.)”[10]
“冯·诺依曼是一位享有盛誉的人物,他通过自己的著作和公开演讲,让高速存储程序数字计算机的概念广为人知。由于他在该领域的高知名度,人们习惯将电子存储程序数字计算机称为“冯·诺依曼机器”,尽管这在历史上并不恰当。(Von Neumann was a prestigious figure and he made the concept of a high-speed stored-program digital computer widely known through his writings and public addresses. As a result of his high profile in the field, it became customary, although historically inappropriate, to refer to electronic stored-program digital computers as ‘von Neumann machines’.)” [13,14]
“ENIAC 是世界上第一台计算机”,“ENIAC 是 John von Neumann 发明的”,“程序内藏方式是 John von Neumann 发明的”,“传统的计算机系统结构是 John von Neumann 发明的,所以被称为 von Neumann 结构”,“John von Neumann 是现代计算机之父”,等等类似的说法还有一些,所有这些在中文媒体甚至中文专业书籍甚至某些“专家”讲演中,时常能见到听到的说法,都是早就已经被世界计算机科学技术界完全否定了的误传。这种状况从笔者读大学的时代就是如此,几十年来居然还没有什么改变,不得不说是我们中国计算机科学技术工作者的失责。
“计算机”能够做些什么?不能够做什么?
严谨地说,因为“计算机”的工作原理是“程序控制/可编程”,所以问题应该为:“计算机”在人类指导下能够做些什么?不能够做什么?
让我们先来定义两个概念:封闭独立计算和开放交互计算。
封闭独立计算:如果对于某个可计算问题,由人类科学家/工程师设计好算法,编制好计算程序,并且输入给计算机后,启动计算直到计算机给出计算结果,那么我们称此类计算为“封闭独立计算”,亦即,在计算过程中,没有人类的进一步参与。
开放交互计算:如果对于某个计算问题或计算过程,由人类科学家/工程师设计好算法,编制好计算程序,并且输入给计算机,启动计算后,仍然需要在计算过程中根据进展由人类在适当时候提供必须的输入数据或判断,那么我们称此类计算或计算过程为“开放交互计算”,亦即,在计算过程中,必须有人类的进一步参与。
显然,“封闭独立计算”,是“计算机”在人类指导下能够做些什么?不能够做什么?而“开放交互计算”,是“计算机”在人类指导下和随时帮助下与人类共同合作能够做些什么?不能够做什么?
熟知计算理论的读者当然立刻就明白笔者区分“封闭独立计算”与“开放交互计算”在可计算性和计算复杂性上的意义。但是,笔者刻意区分“封闭独立计算”与“开放交互计算”的本意是要解决人工智能应用中的行为主体问题[15-17],此处不再深入讨论。
回到本节的问题,我们可以说:“计算机”在人类指导下,在原理上能够做到解决所有可计算问题,在实践上能够做到解决所有具有合理计算复杂性的可计算问题,在原理上不能够解决任何不可计算问题,在实践上不能够解决非合理计算复杂性的可计算问题。
然而,对于“计算机”在人类指导下和随时帮助下与人类共同合作能够做些什么?不能够做什么?的问题,因为不仅与“计算机”的计算能力,更与人类的“参与能力”有关,就是一个哲学问题,超出本科普文章的讨论范围了。
参考文献
[1] 程京德,“计算机与计算模式(1) 何谓计算机?”,科学网博客, 2015年1月29日。
[2] 程京德,“何谓‘计算’? - 可计算性理论简介”, 微信公众号“数理逻辑与哲学逻辑”,科学网博客,2023年4月11日。
[3] A Dictionary of Computing, 6th Edition, Oxford University Press, 2008.
[4] IEEE Standard Computer Dictionary: A Compilation of IEEE Standard Computer Glossaries: 610, IEEE, 1991.
[5] M. V. Wilkes, “Computers Then and Now, 1967 Turing Award Lecture,” Journal of the ACM, Vol. 15, No. 1, pp. 1-7, 1968.
[6] 程京德,“ACM 图灵奖历届获奖者 -- 1966-1970”, 微信公众号“数理逻辑与哲学逻辑”,科学网博客,2023年2月26日。
[7] 星野 力,“誰がどうやってコンピュータを創ったのか?(是谁,如何创造了计算机?)” 共立出版社, 1995 (日文).
[8] J. P. Eckert, “The ENIAC,” 1944; in N. Metropolis, et al. (Eds.), “History of Computing in the Twentieth Century,” Academic Press, 1980.
[9] J. W. Mauchly, “Preparation of Problems for EDVAC-type Machines,” Electronic Control Company, Jan. 1947.
[10] N. Metropolis and J. Worlton, “Trilogy of Errors in the History of Computing,” First USA-Japan Computer Conference Proceedings, pp. 683-691, 1972.
[11] J. P. Eckert, “Thoughts on History of Computing,” IEEE Computer, Vol. 9, No. 12, pp. 58-65, 1976.
[12] N. Metropolis, et al. (Eds.), “History of Computing in the Twentieth Century,” Academic Press, 1980.
[13] J. Copeland, “A Brief History of Computing,” 2000.
[14] J. Copeland, “The Modern History of Computing,” The Stanford Encyclopedia of Philosophy, Center for the Study of Language and Information (CSLI), Stanford University, 2000-2006.
[15] 程京德,“人工智能应用主体问题实例 -- 究竟是谁预测了蛋白质结构?”,微信公众号“数理逻辑与哲学逻辑”,科学网博客,2023年10月28日; 人工智能应用主体问题实例 -- 究竟是谁预测了蛋白质结构?(修订增补版)”,微信公众号“数理逻辑与哲学逻辑”,科学网博客,2023年10月29日。
[16] 程京德,“人工智能应用行为主体问题实例 -- Google DeepMind 关于AGI模型分类框架中的问题”,微信公众号“数理逻辑与哲学逻辑”,科学网博客,2023年11月17日。
[17] 程京德,“人工智能应用行为主体问题实例 -- Geoffrey Hinton 对人工智能技术发展之担心与恐惧的哲学根据在哪里?”,微信公众号“数理逻辑与哲学逻辑”,科学网博客,2023年12月10日。
微信公众号“数理逻辑与哲学逻辑”
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-21 20:28
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社