编程语言分类及区别

一、按历代分类

编程语言分为三大类:机器语言、汇编语言、高级语言
  • 第一代语言(1GL):机器语言 特征:面向机器的指令,机器可以直接执行。
  • 第二代语言(2GL):汇编语言 特征:使用助记符代替机器指令。
  • 第三代语言(3GL):高级语言 特征:是设计更容易被人们所理解的程序语言,告诉计算机执行什么任务和执行任务的步骤,是过程化的,最重要的作用是此时已经脱离了机器硬件系统,具有代码可移植性
  • 第四代语言(4GL):应用语言 特征:只需要告诉计算机要执行什么任务,而不需要指定执行步骤,是非过程化的,最典型的代表就是数据库语言SQL

注意:

1、机器语言
  计算机能识别的唯一语言,机器语言是用二进制代码(由0和1组成,每个0/1与高低电频对应)表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同型号的计算机其机器语言是不相通的,按着一种计算机的机器指令编制的程序,不能在另一种计算机上执行。
2、汇编语言
  为了解决机器语言难以记忆、阅读、修改等问题,汇编语言对机器语言的指令用字符代替,通过汇编编译器可以把汇编代码编译成机器语言指令。
  汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
3、高级语言
  为了使代码更通用,具有不同硬件平台的可移植性,更加方便人类理解和使用。可以通过高级语言对应的编译器把代码编译成汇编语言(一般不会直接把高级语言编译成机器语言,因为机器有汇编编译器可以把汇编代码转换成机器代码,并且汇编代码更易调试和优化)。
  高级语言是一种指令集的体系,在这种语言下,其语法和结构更类似汉字或者普通英文,且由于远离对硬件的直接操作,使得一般人经过学习之后都可以编程。高级语言通常按其基本类型、代系、实现方式、应用范围等分类。
代表:java,c,c++,C#等
4、应用语言
   这种是高度封装型语言,大多数情况下,是一些应用级软件自定义的使用规则/语法标准,例如:数据库编程语言,如各种数据库的SQL语言,使用者只需要传输SQL语句给数据库服务器,数据库服务器内部负责解析执行。
代表:SQL

二、按编译及运行方式分类

编译型和解释型
一、编译型
  编译型语言是将代码一次性全部编译成二进制码,然后运行。
代表语言:C/C++/go
二、解释型
  解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。(编译  	一行,运行一行)
  代表语言:Java、Python、Perl、JavaScript、VBScript

注意

编译型和解释型的定义是对立存在的,但也可以在一个语言中同时存在。比如 java 语言同时兼有编译型和解释型特点。整个流程如下:
  将源代码(.java 文件)编译生成字节码(.class 文件),再通过 JVM(java 虚拟机)运行生成机器指令,由机器运行机器码。注意,此处生成机器语言前的操作是解释型,每次运行都要重新解释。因此,此处表明 java 是解释型。
  但是,部分 JVM(java 虚拟机)有一种 JIT(Just in time)机制,能够将部分已经解释翻译的常用机器指令保存。下次不需要解释,直接运行即可。此时 java 是编译型。

编译性语言不如解释性语言跨平台性好
  编译性语言例如c语言:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件)。

三、按数据类型的确认时间段分类

动态语言和静态语言
  • 一、动态类型语言

    • 动态类型语言,是指在代码运行阶段对数据类型进行确认。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。
    • 动态类型语言的优点是不需要写多种数据类型的代码,代码相对简洁一些,方便代码阅读。缺点是不方便调试,代码命名也容易混淆;
        代表:JavaScript、Python、Perfl
  • 二、静态类型语言

    • 静态类型语言,是指在代码编译阶段对数据类型进行确认
    • 静态类型语言的优点是方便调试,代码相对规范。缺点是需要写很多数据类型相关的代码,代码不够简洁。
        代表:Java、C/C++

四、编程语言、脚本语言、标记语言

  • 一、编程语言

    • 是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动
    • 代表语言:C/C++,Java,Perl等
  • 二、脚本语言

    • 是为了缩短编程语言的“编写、编译、链接、运行”等过程而创建的计算机编程语言。是一种用来解释某些东西的语言,又被称为扩建的语言,或者动态语言,用来控制软件应用程序,脚本通常以文本保存,只在被调用时进行解释或编译。
    • 代表语言:php,js,asp,Python,ruby等
  • 三、标记语言

    • 是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记进行标识。标记语言不仅仅是一种语言,就像许多语言一样,它需要一个运行时环境,使其有用。
    • 代表语言:xml, html, xhtml ( xml 和 html 的合体 )等,(可以看出它们都是以 “ml”尾的)

五、按照数据类型的定义方式分类

  • 一、强类型语言

      强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java、.net 、Python、C++等语言。
    
      举个例子:定义了一个整数,如果不进行强制的类型转换,则不可以将该整数转化为字符串。
    
  • 二、弱类型语言

      弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb 、PHP、javascript等语言。
    

综上所述,Python 是 动态 解释型强类型定义脚本 语言