计算之智与哲学之慧分享 http://blog.sciencenet.cn/u/huangfuqiang

博文

对【“计算机语言”一词及这篇文章的表述】你怎么看?

已有 4454 次阅读 2013-5-22 21:26 |个人分类:计算机软件理论与工程|系统分类:观点评述| 计算机语言

信息来源:计算机学会门户网站“学会动态”。

 

慎用“计算机语言”一词

彭民德: 中南大学信息工程学院 教授,中国计算机学会高级会员 联系方式:mdpeng40@126.com;

“计算机语言”一词,有时出现在书店的书架分类命名上,那可能是泛指计算机方面的书,区别于社科和其它理工科书籍。在这样的场合不严格定义计算机语言,一般不会产生误会。

但是计算机语言一词也常常出现在计算机专业术语之中,包括出现在网络和一些词典中。到国家图书馆电子图书库对工具书作“计算机语言”词条检索,也有许多匹配项。对于计算机语言一词的内容,多指包括机器语言、汇编语言和高级语言在内的程序设计语言,但并不作为同义词对待。他们定义的计算机语言一词把程序语言的功能从程序设计延伸到控制计算机。下面就影响较广的百度网站和一本词典中该词条做些分析。

一、就“百度”网站关于“计算机语言”的百科名片和简介(2013-5-22下载)的讨论

百科名片

计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受的语言。

1. 什么是计算机的基本特征?是存储并自动地逐条指令执行程序,不是“指令通过一种语言传达给机器”。指令及指令序列最初就是由传送指令送入计算机的,在当代计算机上,一个程序究竟驻留在何处,是由操作系统决定调入的,可能还做虚拟存储,不“通过一种语言传达”。

2. 人与计算机之间的通信通过执行某个程序进行,不是所定义的“计算机语言”。比如在人机交互环境下输入一条命令或触摸一个屏幕按钮,启动某个应用,都是在执行程序。

3. 在计算机领域,指令一词是有特定含义的,计算机指令是计算机能够执行的最基本的操作,每条指令都是0与1的位串,每条指令执行时都是不可被分割的,怎么能够说由“字符和语法规则组成计算机各种指令”呢?

4. 从时间顺序上说,计算机上指令的概念先于字符概念。早期计算机就有了指令的概念,但是当时的计算机没有字符概念,无法处理字符。没有理由讲由“字符和语法规则组成计算机各种指令”

计算机语言的种类非常的多,总的来说可以分成机器语言 ,汇编语言,高级语言三大类。

5.由此说明,计算机语言实际上就是指机器语言、汇编语言、高级语言这些程序设计语言,现在它们还要充当计算机语言的新角色。难道原有身份还不够,或者不恰当吗?这些都已经被计算机界统称作程序设计语言了,而且这样称呼很准确,因为它们都是写给程序员编制程序用的。相比之下,“计算机语言”一词,反而掩盖了这些语言用于编写程序的基本特征,含义变得模糊了。

电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。

6.在每秒运行百亿条指令的现代计算机上,什么是电脑每做的一次动作,一个步骤?某个存储地址的值增1也许就需要多个元器件的状态翻转,每条指令的执行更需要多个步骤,多个动作。电脑运行的微观世界怎么样划分为其每一个步骤,人们所编写的程序怎么可以控制电脑的每个动作?

我们自己编写的程序只能从功能上获得期待的结果,这也就够了。比如把一批数据排序,求解一个方程组,甚至可以让电脑执行程序控制某个工业过程。但我们写程序无法控制电脑的每个动作,也不必如此期待。比如屏幕上光标在闪烁,表征硬盘在工作的指示灯在闪烁等等,都是电脑的动作,它们不是我们写的程序所能控制的。

7.作者写道“所以人们要控制计算机一定要通过计算机语言向计算机发出命令”,以及前面“为了使计算机…工作,就需要有一套用以编写计算机程序的…计算机…语言”。这大概就是提出“计算机语言”者的核心观点。在他们看来,既然计算机只能执行程序,而所有程序都是根据某种程序语言规则编写出来的,那么逻辑推理,编程语言就是控制计算机工作的命令了。以为编程序让计算机执行可以简单地把计算机比作小狗狗,叫它跑到前面去把小球给捡回来那样。其实计算机没有意识,没有情感,没有智能,这些方面远不及小狗狗。

让我们来分析一下这种观点的毛病。一是控制计算机的提法欠妥,我们不期待整个地控制计算机。一般地,只是利用它,买计算机都是以应用驱动的,用来上网,处理照片,玩游戏等。二是用电脑不一定要编程序,可以只使用别人写的已有程序。虽然也可以自己编写程序,但那不是必须的,近几年有的平板电脑,比如ipad2,甚至不提供编程环境了。三是要写程序,光有程序文本还不行,不能忽视程序员的作用。他们得依据某一种高级编程语言(姑且不讲用机器语言和汇编语言)的规范,写正确的源程序。编程语言只是指导人们写程序的环境和工具。每种程序语言的规范文本至少有几十页,那都是写给人看的。这里并没有像自然语言那样供人们直接取用就可以控制计算机的程序,也没有指令。既然编程语言是一套规范,它也不约束程序员的行动,而是给程序员很大的发挥空间。运用编程语言,各人都可以写出很不相同的程序。一种高级编程语言就像篮球比赛规则,它规范编程人员的行动,同时给编程人员很大的发挥余地。编程语言主要是面向程序员而不是面向计算机的。

8. 编程语言不能等同于程序,仅有编程语言还写不出程序。写程序还得组织数据结构,选择合理的算法,即便写一个简单程序也得这样。比如求1,2,3,…,100这100个数相加,数据结构至少得开辟一个求和单元S,一个控制循环次数的变量I,都用整型变量。还要分别赋初值1。用循环结构算法,每次做S与I的值相加再回送到S中,I中的值增1,对I的值进行判断,其值超过100时结束程序,此时的S中就是所求的结果。解决复杂问题需要组织更复杂的数据结构,设计更复杂的算法。每种程序设计语言只是提供程序员把算法适当地表示出来,让后续的编译程序能够理解和进一步加工。语言本身并不包含算法。即使把某个编译程序也算做语言环境的组成部分,它也只是把源程序转换成机器可以接受的二进制代码。这些代码以文件信息的形式存储于磁盘上,它并不考虑程序驻留何处与何时运行,不能就说编程语言(你的计算机语言)控制了计算机。

所以讲“要控制计算机”,以及“通过计算机语言向计算机发出命令”并不恰当。

在计算机语言不断的演化过程中,每一种语言都有一些共性是不变的.。这些共性可概括为以下三点:
  其一是:内存电位的设置.(置1或0)
  其二是:条件判断(if,else)该功能可通过逻辑门实现.
  其三是:循环,也就是程序下一条指令地址可设置。[8]

9. 不知道词条编写者根据什么罗列上面三条。徐家福主编的中国大百科全书是这样讲编程语言共性的:
语言的种类千差万别。但是,一般说来,基本成分不外四种。①数据成分:用以描述程序中所涉及的数据;②运算成分:用以描述程序中所包含的运算;③控制成分:用以表达程序中的控制构造;④传输成分:用以表达程序中数据的传输。

二、就王济昌编《现代科学技术词典》中关于“计算机语言”解释的讨论。

引入了计算机语言一词的书籍不止一本两本,这本作为词典的工具书是国家图书馆工具书库中目前比较显眼的一本。且看它怎么定义。

【计算机语言】( computer  language)能完整、准确和规则地表达人们的意图并用以指挥或控制计算机工作的符号系统。用于人与计算机之间的通信,是人与计算机之间传递信息的媒介。其发展经历了从机器语言、汇编语言到高级语言的历程。机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能,具有灵活、直接执行和速度快等特点。汇编语言是一种用助记符表示的仍然面向机器的计算机语言。其特点是:不仅用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。高级语言是指与自然语言相近并为计算机所接受和执行的计算机语言。

上述定义值得商榷。

1. 这里定义的计算机语言一词所包含的内容是从机器语言、汇编语言发展到高级语言,因此它就是指高级语言。计算机业界多年来已经准确地称之为高级程序设计语言、算法语言,要赋予新的称谓和新的内涵,就得指出原有解释的不足。而该书既认可原有称谓和解释,保留了程序设计语言的词条,承认它们是“一组用来定义的语法规则”,现在又把同一个对象赋予新称谓新含义,让人无所适从。

2. 这里把计算机语言定义为“能完整、准确和规则地”指挥控制计算机工作的符号系统。靠一套符号系统就能够完整、准确和规则地表达人们的意图吗?聪明的人用几千年传承发展的自然语言尚且难以做到。试读一读网上流传的关于“意思”与“方便”的两段汉语的语言笑料就知道,这两个单词在不同场合有很多种不同的词义。可见用自然语言想完整、准确地表达人们的意图尚且不容易。在计算机面前,怎么可以用一套符号就能完整、准确地表达人们的意图?而且人们的意图在计算机环境下表达又还必定受到软硬件发展水平的制约。比如在计算机早期没有字符概念,你就不能写高级语言程序,不能写诗写文章。后来可以写文档了,但没有图形终端,就不能画表格线,做图表处理。只有机器发展到多媒体阶段,才能处理图形图像。到了网络时代才能看电视。计算机的发展虽然很喜人,但是目前还“不听话”。任何人都不可能超越计算机发展水平推出一种万能地表达人的意愿的符号语言,“计算机语言”也不具备这种功能。而程序设计语言的称谓,功能却简单明了,它就是帮助人们编制程序的。

3. 一条条机器指令都是0与1的字位序列,都板着脸孔呆板得很。“机器语言的灵活性”表现在哪里?

4. 计算机就是那么一个场所,通电后机器启动了,以操作系统为代表的多个程序并发地运行起来了。可以玩游戏,看电视电影,整个计算机,包括接通了的外设,都忙起来了。也可以依据编程语言规范再写新的程序,让计算机实现你的程序功能,帮你做事。说计算机语言是人与计算机之间传递信息的媒介,人与计算机间传递什么信息?传递信息的媒介又是什么?凭符号系统的计算机语言,想指挥与控制计算机工作,做得到吗?

三、计算机业界一些知名学者不用“计算机语言”一词

比如,由计算机与电子信息领域两院院士王大珩主编,有中科院计算所史忠植、陈虎等一批研究员参编词条的《高技术词典》(清华大学出版社,科学出版社2000.1),收录了业内流行的种种词条,但是没有“计算机语言”。

又如,由徐家福主编,杨芙清、孙钟秀副主编的《中国大百科全书》电子学与计算机卷(中国大百科全书出版社 北京 上海1986.9),洋洋两大卷,也没有词条“计算机语言”。

分析与结论

计算机语言一词的提出及其词义涉及对计算机本质特征的认识,把编程运用引伸到控制计算机,难以成立。可以从不同层面去观察计算机。从微观上看,当代每秒百万亿次运行的计算机中,其存储和运算的瞬时状态都可能处在高速变化之中,对微观状态的测试和控制都无法准确地进行,当然所谓的计算机语言也无能为力。从更高层次的任务实体层面看,计算机中可能存在大量线程和进程,它们并发地走走停停地运行着。它们是由操作系统这个运行调度管理者造出来的,同样具有随机性,也不是所谓的计算机语言能够控制的。再高层面的任务实体,也许是程序编制者运用某种算法,包括复杂的并行算法或者带有智能的算法设计的,也不归所谓的计算机语言控制。计算机内部还会有种种来自外部和内部的“事件”,事件的出现和处理也将导致大量的、随机的并发活动,也是不可预期和不可控的。计算机瞬时在做什么,执行什么指令,甚至执行哪个程序都不得而知。要想对计算机每个动作进行微观控制,不是所定义的计算机语言能够做到的。

机器语言,汇编语言和高级语言,是指导人们编写程序的工具,已经习惯并准确地被专业人士称为计算机程序设计语言或者编程语言。计算机语言一词的提出者们却认为,既然计算机总是在执行程序,而每个程序都是用某种语言工具编写的,便误认为有了程序语言就有了所有程序,他们过分强调了语言环境对于程序的重要性,而忽略了人的因素、数据组织与算法对于程序的重要性。他们还误认为编程序就是控制计算机,因而编程语言就是人们向计算机传递控制命令的媒介,用计算机语言一词更能本质地表达人们通过编程实现对计算机的控制。但是他们不了解,编写程序实现某种可预期的、实用的功能是一回事,对计算机微观控制又是另一回事。只能做到前者,编写程序让计算机运行程序以帮助我们做事,而不能企求控制计算机的动作。故用程序设计语言称谓是准确的,后一目标无法达到。

既然如此,以控制计算机动作为目标的计算机语言就不存在,因此对计算机语言一词的解释,无法做到严密和科学。在计算机的专业领域应该慎用。

 

参考文献
  1. 百度词条“计算机语言”,http://www.baidu.com
  2. 王济昌:《现代科学技术知识词典》中国科学技术出版社 2011.1
  3. 王大珩等《高技术词典》清华大学出版社,科学出版社2000.1
  4. 徐家福、杨芙清、孙钟秀主编《中国大百科全书》电子学与计算机卷 中国大百科全书出版社 北京 上海 1986.9

 



https://blog.sciencenet.cn/blog-89075-692522.html

上一篇:信息与电子工程学部[工程院 院士候选人]
下一篇:ACM Grace Murray Hopper Award 2012---SDN and XCP
收藏 IP: 121.250.208.*| 热度|

2 刘钢 rosejump

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-10 17:44

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部