计算机语言概述

计算机语言概述
在计算机技术发展过程中,出现过各种各样的程序设计语言。从程序设计语言发展过程来看,可分为机器语言、汇编程序设计语言、高级程序设计语言(如basic、fortran、pascal、c、c++、prolog、java、c#等)、数据库管理语言(sql)、网络数据交换语言(xml)等。高级程序设计语言分为面向过程的语言和面向对象的语言。面向过程的语言适合描述问题解决的过程:复杂问题分解成相对简单的问题,从上而下或从下而上分析构建系统。面向对象的语言使用面向对象分析、设计同样的概念(类、对象、消息)具有独到的优点。
1.1 机器语言与汇编语言 仅由硬件组成的计算机只能接受由“0”和“1”组成的二进制信息。要计算机执行一定的操作,就要编写一系列的二进制代码。这种不需翻译即由计算机直接执行的指令叫做机器指令。这些指令的集合叫做机器语言。每一条机器指令都是一个二进制代码,因此,要记住每一指令及其含义是十分困难的,编写出来的程序难以阅读,而且由于它完全依赖于硬件系统,不同的机器有不同的指令系统,因此,它不具有兼容性。一台机器上编制的程序在另一台机器上根本无法运行,一个问题要在多个机器上求解,就必须重复地编写多个应用程序。这种程序直观性差,难以编写、调试、修改、移植和维护,由于这一问题的存在,人们期待用更接近于自然语言与数学语言的语言代替机器语言,汇编语言应运而生。
汇编语言是一种面向机器的程序设计语言,它用符号表示机器指令,例如用add代替机器语言中的加法运算。这种语言编写的程序不能直接运行,要经过汇编程序翻译成机器语言才能运行,一般来说汇编语言指令与机器语言指令之间是一一对应的。由于汇编语言一般都是为特定计算机或计算机系统设计的,因此,它虽然比机器语言好学、便于记忆,比用机器码编写程序省事了一点,但语言仍然没有解决对硬件的依赖关系。
1.2 高级程序设计语言 40多年以来,计算机高级程序设计语言与计算机硬件、计算机应用、计算机网络相依存,一同得到了空前的发展。历史上、甚至当今仍然比较流行的高级语言有以下数种。
1. fortran语言
fortran语言是世界上最早出现的高级高级语言,它所支持的数据类型比较丰富,特别适合于科学和工程中的数值计算。
一个fortran程序由一个主程序与若干个子程序组成。主程序与每一个子程序都是一个独立的程序单位,称为一个程序模块。在fortran语言中,子程序是实现模块化的有效途径。
2. algol语言
algol语言是另一个早期研制出来的高级语言。它有严格的文法规则。algol是一个分程序结构的语言。分程序的结构可以是嵌套的,也就是说,分程序内可以含有别的分程序。过程也可以看成是一个分程序,这个分程序可以在别的分程序中被调用。
3. cobol语言
cobol语言是专门为处理商业事务而设计的一种通用语言,使用于商业和管理领域。特点是针对商务和管理过程中要处理大量记录形式的数据的特殊需要,侧重于数据项的输入、输出记录的处理。
cobol语言把数据描述引入语言,数据描述与具体计算机无关,这一点后来又对数据库管理系统的发展产生重大影响。至今仍在商务处理领域得到一定的应用。
4.pascal语言
pascal语言是最早出现的结构化程序设计语言,在pascal语言中分程序和过程这两个概念合二为一,统一为过程,pascal过程可以嵌套和递归。用它编写出来的程序结构性好,程序易读。这种语言广泛用于一些计算机课程的教学,也用于科学计算。
5.c语言
c语言是20世纪70年代发展起来的一种通用的结构化程序设计语言,特别是在系统软件开发上应用很广,它具有高级语言的诸多特点,也具有汇编语言控制硬件的能力,还可以比较方便地定义其他语言编写的程序。
字符、整数和浮点数是c语言的基本数据对象,用户可以构造指针、数组、和联合等复杂的数据类型。c语言是一种较低级的语言,它提供了指针和地址操作的能力。c语言提供书写结构良好的程序所需的控制结构。c语言与unix操作系统紧密相关,unix操作系统及其上的许多软件都是用c语言编写程序的。
上述语言主要擅长描述计算机问题的解决过程,所以叫它们是面向过程的语言,也称为第3代语言(3gl)。
6.面向对象程序语言c++
c++语言是在c语言的基础上发展起来的,与c语言兼容,但大大扩充改善了c语言的性能。在c++语言中,最主要的是增加了类功能,使它成为面向对象的程序设计语言。一般认为,面向对象程序语言至少包含下面一些概念:
(1)对象 对象是世界上客观存在的事物,它具有特征和方法两方面属性。对象是相互关联的,通过这种关联来相互影响(改变对象的属性)。面向对象语言把对象属性和方法封装在一起,对象内部才能对对象的“私有数据”进行操作,对象外部只能按提供的公开的方法,才能查询和修改对象的属性。这样,对象属性的具体表示和方法的具体实现都是隐蔽的。
(2)类 类是对象共同特征和行为的描述。对象是类的实例。
(3)继承 对象有自己的属性,但是对象更有共性,共性存在于特性之中。继承反映了上述对象共性与自己的属性的关系。子类继承父类的意思是子类具有父类的属性和行为。子类又可以对父类的特征和行为重定义或部分修改达到代码重用的目的。
(4)消息 一个对象利用自己或其他对象的方法改变自己或其他对象的属性,这些方法的引用叫对象间消息的交互。
7.纯面向对象的程序设计语言java
java是一种跨平台的、适合于分布式计算机环境的面向对象的编程语言。它具有可移植、稳定、简单、高性能、动态执行等特性。
(1)java语言完全面向对象 c++等面向对象的程序设计语言是由原来面向过程的语言改造而来。
(2)移植性 程序的可移植性指的是程序不经修改而在不同硬件或软件平台上运行的特性。而java是纯面向对象的程序设计语言。
(3)稳定性 java不支持指针数据类型,它提供了字节码的检查机制,java还提供了自动的“内存垃圾”收集功能,这些机制大大提高了java的稳定性和安全性。
(4)简单性 java的避免了使用c++等语言的操作符重载、多继承和数据类型自动转换等,这些都有利于语言简单化。
(5)高性能 java通过支持多线程、高效的字节码来提高语言性能。
(6)动态特性 java的动态特性是其面向对象设计的延伸。这种特性使得java程序能够适应不断变化的执行环境。java通过“滞后联编”,支持类库升级之后,相应的应用程序不必重新编译,也一样可以利用升级后类库的新增功能。java的动态特性还体现在其对动态数据类型和动态协议的支持上。利用一种特殊的applet,编程人员可很方便地支持新的数据类型。java的动态性的价值是使程序员真正拥有“即插即用”(plug-and-play)的软件模块功能。
(7)分布式 java支持数据分布和操作分布。
8.函数式语言
函数式程序是由一些原始函数、定义函数和函数型组成的函数表达式。传统程序设计语言中的赋值等概念,在函数式程序设计语言中消失。函数式程序的一个最本质的特性,就是函数值唯一地由其参数值所确定。只要使用相同的参数值,对此程序的不同的调用总是得到相同的结果。这种性质称为引用透明性,有助于程序的模块化。
一般认为表处理语言(lisp)是最早的函数式程序设计语言。但是,lisp的重点是将函数应用于对象,以产生新的对象,必要时再上升为函数。巴克斯所提出的函数式程序设计,则是引用函数型产生新函数,程序设计时从一般的对象空间上升到函数空间,因而具有优越的数学性质,有助于程序的理解、推理和验证。
由于函数式程序设计语言的简明性和独特的表达能力,可用它来研究传统程序设计语言的语义。一种方法是用于确定一个解释程序的定义,作为被研究的语言的语义;另一种方法是将被研究的语言写成的程序转换成与之等价的函数式程序。在人工智能领域中,需要用复杂的算法去处理一些复杂的(通常是符号的)数据结构。lisp语言成功地应用于这一领域,说明了函数式程序设计的独特优越性。巴克斯分析了传统程序设计语言的缺陷,认为这些缺陷主要是由于诺伊曼式系统结构所造成的。他所提出的函数式程序设计(简称fp),摆脱了传统的诺伊曼计算机结构,需要一种新的非诺伊曼式的系统结构为后援。一些具有新概念的计算机,如归约机、数据流机,以及专为某种函数式语言(如fp)设计的计算机正在研究和发展中。现代既需要研究在诺伊曼式计算机上如何更有效地实现函数式程序设计语言的问题,也需要研究适应这种语言的新型计算机结构。
函数式程序设计受到重视的原因是:首先由于产生了“软件危机”,人们企图探讨一种摆脱这种困境的新型程序设计方式,而函数式程序设计具有不少独特之处。其次,超大规模集成电路技术的发展,为发挥函数式程序设计语言的潜在并行性提供了物质基础。可以预期,一些具有诸如高度并行性等特点的非诺伊曼式计算机将会出现。随着硬件技术的发展、软件方法的研究,以及应用范围的不断扩大,函数式程序设计将得到发展,并在新一代计算机系统中起重要作用。
9.脚本语言
脚本语言是web的普及与发展的产品。脚本语言一般指html语言、vbscript、javascript、java applet等,xml是定义html的元语言,它也可属于脚本语言范围。脚本语言程序由客户代理(浏览器)解释、运行。脚本语言的标准化主要为了网页独立于网页浏览器,使客户与浏览器更友好地交互,动态控制网页元素。
10.描述性语言
软件人员都希望有朝一日,只要描述系统的需求、设计、使用平台,就可以生成系统代码,不要编程。许多研究机构、大的公司在这方面研究已迈开了非常重要的一步。模型驱动的结构mda的工作是这一领域的研究成果的体现。mda以模型的观念研究软件系统,其中uml(通用建模语言)已成为人们描述软件系统开发不同阶段使用的语言。
传统的程序设计过程是抽象思维过程,只有程序设计完成后,通过上机调试,方知程序的正确与错误。可视化程序开发环境,使程序一边开发,一边看到程序运行的结果,大大提高了软件的开发效率。可视化程序开发是以面向对象程序设计为基础的。可视化面向对象的程序设计方法得到普遍的认可。许多传统的非面向对象语言都经过扩充、改造成为支持可视化的面向对象的程序设计语言。pascal演化为delphi ,basic演化为vb,c语言演化为vc++、c++builder等。这些可视化集成开发环境成为当前软件开发环境的主流。
1.3 语言翻译程序 计算机只能识别、运行本身的机器语言(0、1构成的指令系统),另一方面,人们又希望使用高级程序设计语言描述要计算机解决的问题。因此,如何使高级程序设计语言程序映射成等价的机器语言程序成为关键,语言翻译程序就是起这种作用(见图1-1)。
按语言程序的翻译方式不同,语言翻译程序分为解释型翻译程序和编译型翻译程序。
解释型翻译程序在语言程序翻译时,它读入源程序一句,翻译一句,执行一句,这样反复操作直到最终完成。basic语言是典型的解释型语言。
编译型翻译程序也叫编译程序,它在翻译语言程序时,加工整个源程序,最终翻译成机器语言,然后交给计算机执行。编译程序有利于目标程序的优化,有利于提高目标程序的运行速度。fortran语言、c语言、pascal语言都是编译型语言。
有时人们形象地把解释型翻译程序比作“口译”,把编译程序比作“笔译”。由此可见,由于计算机有了一种语言的翻译程序,使计算机能“明白”这种语言的编写的程序。因此,配置了某种语言的翻译程序的计算机又被人们称为这种语言的虚拟机。不言而喻,语言翻译程序与操作系统和计算机硬件有关,由翻译程序产生的目标程序也与操作系统和计算机硬件有关。不同操作系统下的同一种语言的语言翻译程序是不一样的,同一操作系统下(如windows环境)硬件不一样(如x86和powerpc),同一种语言的翻译程序也是不一样的(如图1-2所示)。
虚拟机、java虚拟机与java运行环境
由上可见,编译程序与操作系统和计算机硬件有关,为了提高编译程序的可移植性,人们提出了虚拟机的理论。虚拟机好似通用的计算机,有自己的指令系统,但本身没有实际的硬件。为了虚拟机代码可以执行,必须有虚拟机实时运行支持系统把虚拟机代码转换成相应
硬件机器的代码(如图1-3所示),然后加以执行。有了虚拟机,编译程序首先把语言程序翻译成虚拟机代码,这样的编译程序可移植性就大大提高了。虚拟机代码与机器无关,虚拟机代码不仅可以在本机上执行,也可以通过网络流通到其他配制了相应的虚拟机实时运行支持系统的网点上执行。这一特征,显示了虚拟机在网络时代的无限生机。
计算机网络的发展对计算机语言不断提出新的要求,特别是要求语言具有可移植性、安全性,这正是java成为网络开发的主流语言的原因。
jvm(java virtual machine)是一种java虚拟机,从结构上看它与实际的计算机相似,它的作用是使得一台实际的机器能够运行java字节码程序。java字节码是java源程序编译后的程序,它不能被计算机直接执行,但它可以被所有的java虚拟机执行。这就是java字节码程序可以在网络上移植的原因。
java程序必须有自己的运行环境(java平台)。一个java运行环境包括实际计算机、适配器、java虚拟机、java基本软件和java应用程序接口,如图1-4所示。jvm是java运行环境的核心,jvm的下层是和实际计算机的接口,被称为适配器,不同类型的计算机其适配器是不同的。java的基本软件也称为基本类,而java api(application program interface,应用程序接口)是已编译好的程序代码库,可以直接使用它们,以节约编程的时间。事实上,java的基本类和api的规模并不固定,许多java平台对这两部分内容进行了补充,即除了基本类外,还有扩展类。
由此可见, java虚拟机与操作系统和计算机硬件无关。java经过编译后的字节码程序可以在网络上传输到任意支持java虚拟机的网点机上运行。
利用java语言可以开发两种形式的应用程序:java应用程序(java application)和java小应用程序(java applet)。java小应用程序是借助浏览器运行的程序。
1.5 java程序的运行 java程序是半编译半解释型语言,其程序的运行过程与编译型和解释型语言都不同。
首先,编译程序将java源程序编译成与实际计算机无关的字节码,然后java运行系统解释并执行字节码。图1-5描述java编译系统和运行系统的功能。图中,运行系统解释java应用程序的执行过程分三步进行
第一步由类装载器完成字节码的装载,装载时运行系统确定程序的内存分配。
第二步“字节码检验器”对字节码进行安全性检查,这种检查可以排除字节码可能存在的违法访问权限、不规范数据类型和非法调用等问题。
第三步完成字节码的翻译和执行。这里有两种途径:一种是走运行系统左边的路径,通过“解释器”将一个个字节码翻译成机器码,然后由“实时运行部件”立即将机器码送硬件执行,这是一种解释工作方式,边翻译边执行,java系统一般采用这种方式;另一种是走右边运行系统的路径,通过“代码生成器”先将所有字节码翻译成适用于本系统的机器码,然后送硬件执行,这是一种编译型工作方式。当对软件的运行速度要求较高时使用编译型工作方式。
1.6 java程序的开发、执行流程 简单的java程序可以用任何编辑程序(如记事本)进行编辑,然后以纯文本方式存储在文件中,文件必须以java作为后缀。java源程序由java编译器编译成字节码,存储在以class为后缀的文件中,最后由运行系统解释和执行,如图1-6所示。
图1-6 java程序的开发、执行流程
目前流行的java 开发环境(即工具)有多种。越来越多的高校计算机专业、非计算机专业选择java作第一计算机语言。如果java作学生第一编程语言,建议选择bluej作教学环境,bluej突出面向对象技术的核心概念,利于学生理解面向对象的编程思想;它简洁、易学,国内与之配套的教材正在计划出版。目前,我国多数高校把java语言作第二计算机语言讲授,建议直接利用jdk、eclipse或jbuilder做教学环境。eclipse、jbuilder环境方便开发大程序,是软件开发者的好工具。但是,对初学面向对象语言的来说,它们不是很好的体现面向对象思想的教学环境。

LTE-M物联网连接套件和模块解决方案
移动办公的崛起,推进企业办公模式的进化发展
如何用interrupt停止线程
基于AMD器件的EtherCAT从站方案
音圈马达助力的苹果iPhone 15 Pro Max
计算机语言概述
有容乃大,化繁为简——夜神发布全新一代安卓模拟器
三星Galaxy S21 Ultra参数全曝光:售价成唯一悬念
如何快速学会PLC编程
炬光科技收购SUSS MicroOptics扩大其激光光学产品组合
灵动微新推电机驱动及控制专用的MM32SPIN2x系列
LinkSwitch-TN2现已通过汽车级标准认证
AI能否成功引领智能家居中的智慧生活?
本源量子计算全栈式解决方案亮相2022全国“双创”活动周
分析智能马桶盖的电子组件和电路图
引领AI未来 | 软通动力携手华为云联合成立泰国AI云智社区
基于软件的优化手势识别解决方案
各大厂商的活体检测服务,哪款更适合应用开发者
轩逸·纯电的到来仅是个开始而已,后边的故事将更为精彩
小米回应经销商维权一事:专营店模式谢幕,小米之家下沉