编程语言的分类(配有详细说明与相应拓展点)

2021/12/17 1:10:44

本文主要是介绍编程语言的分类(配有详细说明与相应拓展点),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.低级语言(面向机器)

A.机器语言

由二进制代码0和1组成的序列,不同的组合代表不同的指令控制,让计算机执行不同的功能。需熟记计算机所有的指令代码及含义,还要手动处理每条指令和数据对应的存储空间和输入输出,记得每个工作单元处于何种状态。


例:暂存器控制

0000     代表暂存器A
0001     代表暂存器B


注:计算机只能识别机器语言,若用别的语言编写源码,都需要转换为机器语言才可以识别执行


B.汇编语言

由不同的字母组合代表原先的二进制代码指示令,可以理解为机器语言的助记符,只是相对于机器语言而言编写和维护起来方便了点,但仍要懂得内部的运行原理,对于程序员来说依旧繁琐复杂,并无实质上的改变。


例:通用数据传送指令

MOV        传送字或字节。
MOVSX       先符号扩展,再传送。
MOVZX       先零扩展,再传送。
PUSH        把字压入堆栈。
POP        把字弹出堆栈。


注:执行速度略低于机器语言,因为汇编语言无法被计算机直接识别,需要经过(汇编语言—>机器语言)的转换,这一过程叫做“汇编”(与编译是俩种不同的方式


二者的优缺点


优点:都是直接控制计算机内部硬件,如:CPU、磁盘、存储器、I/o端口等,能根据特定应用对相应代码进行优化,使其性能达到最高,最大限度的发挥硬件的功能,故占用内存少,执行快,效率高。


缺点:不同计算机的机器语言和汇编语言有所不同,将相同代码移植到另一个计算机中可能会无法运行,因此可移植性差,又因为要记住大量繁琐复杂的组合形式,故开发效率也十分低下,不好维护。



2.高级语言(面向过程或对象)

A.编译型语言

编译型语言在运行程序之前要经历一个编译过程,将源代码编译成机器语言。编译型语言包括 C、C++、Fortran、Pascal、Delphi 等。


给大家细致说明一下编译过程,以C语言为例(图片取自《深入理解计算机系统》,被誉为“计算机科学的圣经”):
在这里插入图片描述


①预处理器:将头文件#后面的内容添加到源码中,如#include<stdio.h>将stdio.h插入到源代码中(生成.i文件)

②编译器:在.i文件中插入一个汇编语言程序,该程序包含main函数的定义(生成.s文件)

main:
	subq	$8, %rsp
	movl	$.LCO, %edi
	call	puts
	movl 	$O, %eax
	addq	$8, %rsp
	ret

③汇编器:将.s文件翻译为机器语言,并把这些机器指令打包成“可重定位目标程序”的格式(上面提到的“汇编”过程,生成.o文件)

④链接器:将其他编译好的目标程序中的函数调用过来,如printf是存在于printf.o文件中的函数,通过链接器将二者合并成可执行的文件(.exe文件)


注意点
1.A区域内的都是文本文件可以用文本编辑器查看,B区域都为二进制文件,当用文本编辑器查看时为一堆乱码
2.生成好的可执行文件将会以二进制磁盘文件的形式存放于内存中,需要运行时可直接调用


拓展点

GNU项目:GCC是GNU项目开发出来的众多有用工具之一。GNU项目已经开发出了一个包含Unix操作系统的所有主要部件的环境,但内核除外,内核是由Linux项目独立发展而来的.GCC编译器已经发展到支持许多不同的语言,如:C、C++、Java、Pascal、Fortran、Ada(更加详细内容可自行了解)


优缺点

优点:一次编译,终身享受。之后再想运行此程序,直接运行目标代码即可,无需再经历编译过程。运行效率高,可以脱离编译器(生成后的目标代码)


缺点:若想修改程序,则必须从源码处下手,再经过编译过程生成新的可执行文件,若只有目标代码则无法修改源码。(基于此特点,许多软件产品都是将编译好的目标代码发给用户,防止内部源码泄露,所以优缺点也是分对象来说的(●ˇ∀ˇ●),其次,跨平台性差(为啥?后续会有说明)


B.解释型语言

解释型语言是一条一条的翻译代码,每执行一个语句便将其翻译成一条中间代码,再用解释器解释成可执行的机器指令。解释型语言包括Python、Ruby、PHP、java等。


优缺点

优点:每条语句只有执行时才会被翻译,若出现语法错误,可以立即引起程序员注意,跨平台性好


缺点:每次运行程序,都要重复之前的翻译,效率低下。


拓展点

A.网上既有说Java是编译型也有说是解释型的,因为Java有着编译的这一过程,但只是生成了字节码文件,后续还需在JVM(Java虚拟机)上解释才可以在各个平台上运行,所以这也是个相对的观念,无需纠结


B.思考ing:当时bz学的时候就在跨平台性这方面思考了下,为啥解释型语言跨平台性会比编译型好呢?解释型在别的平台上有对应的解释器就可以执行,那编译型有对应的编译器不就好了吗?查了相关资料后才明白原因。

先给大家普及一些小知识点:
①先来解释下啥叫跨平台性吧,简单来说就是跨操作系统,如Windows到Linux。
②所有的操作系统都是由编译型语言写的,如主流的Windows、Linux、Unix(第一个版本是纯粹的汇编语言编写)的内核都是由大量的C和小部分C++、汇编所写.
③C语言为什么高效且作为底层代码使用:C语言几乎可以直接翻译成汇编语言,而汇编语言可直接翻译成机器语言,又因为C语言有指针,可以直接操作内存地址,所以用C语言开发操作系统是非常适用的,在少量与硬件直接交互地方是用汇编语言编写(如底层接口都是汇编写的),它能将硬件的性能提升到最大。


基于以上三点,我们能明白虽然编译型语言是高级语言,但他与平台联系十分紧密,你在Windows上写一个调用Windows系统的程序,移植到Linux上使用肯定会发生错误,因为他们的编写规则不同,若避免这些特殊程序的使用,则在一定程度上当另一个平台有相应的编译器跨平台也能实现,不过相较于解释型语言来说就较麻烦,因为解释型语言本身就与平台联系很少,几乎可以忽略不计,所以只要在不同平台上有对应解释器就可以运行。(发现很多理念都是相对而言的有木有(●’◡’●))


最后为了方便理解,举一个不太恰当的例子:俩种语言都是像是准备考试,老师给你发了对应的题库,编译型语言是先将所有知识点全部看完了后再一次性把题库做完,而解释型语言是每做一个题去看对应的知识点。这也能解释”相对而言“的问题



虽然还有很多东西想补充,但我想把这些东西做成一个模块化的内容来说,所以这次的知识点先梳理到这里吧,希望能对大家有所帮助( ̄︶ ̄)↗



这篇关于编程语言的分类(配有详细说明与相应拓展点)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程