各种编程语言的分类

总述

编程语言从最开始的机器语言到如今的百花齐放,已经经过了很长时间的发展。我们也在发展的过程中对拥有不同特性的语言进行了分类,但随着语言越来越多,越来越高级,许多语言拥有了不同的特性,甚至是颠覆以前的分类的。所以如今的很多语言需要用多种分类方式共同分类。这片文章仅仅讨论一些主流的语言。

分类方式

查询了网上的资料,如今的分类方式大概有以下几种:

  • 抽象等级
  • 用途
  • 程序设计方式
  • 程序执行方式
  • 变量是否需要声明类型
  • 运行时变量结构能否改变

抽象等级

即对人类而言,编程的难易程度。

  • 低级语言:顾名思义,对人类而言是一种低级的、难用的语言。但此处低级也可以理解为基础的、底层的意思,即计算机使用的语言。
    • 机器语言:二进制代码
      • 优点:直接执行,速度快,资源占用少。
      • 缺点:可读性、可移植性差,编程繁杂。
    • 汇编语言:面向机器的程序设计语言。汇编语言源程序必须经过汇编,生成目标文件,然后执行。
      • 优点:能够保持机器语言的一致性,直接、简捷,并能像机器指令一样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源,目标代码简短,占用内存少,执行速度快。
      • 缺点:不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性,难于从汇编语言代码上理解程序设计意图,可维护性差,即使是完成简单的工作也需要大量的汇编语言代码,很容易产生bug,难于调试,使用汇编语言必须对某种处理器非常了解,而且只能针对特定的体系结构和处理器进行优化,开发效率很低,周期长且单调。
  • 高级语言:目前来讲,基本上普通人能接触到的语言均属于高级语言

用途

即编程语言被设计出来的目的,一般来讲大多数语言被设计出来,虽然都有优点和缺点,但基本能被应用于各个场景,但专用语言则为某一个特定场景而开发出来的。

  • 通用语言:
    • 代表语言:几乎所有非专用语言
  • 领域专用语言:
    • 代表语言:SQL(数据库专用语言),CAD系统中的绘图语言

程序设计方式

  • 面向过程:Procedure-Oriented Language,即以过程和函数为基础的语言,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
    • 代表语言:C,Pascal
  • 面向对象:Object-Oriented Language,即对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。语言中提供了类、继承等成分。主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。
    • 三大特点:封装,继承,多态
    • 基于对象:与面向对象不同,基于对象是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。
    • 代表语言:Java,Python,C#,C++,Visual Basic,.NET,PHP,JavaScript,R

程序执行方式

  • 解释型语言:
    • 执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。
    • 代表语言:Python,JavaScript,VBScript,Perl,Ruby,Erlang
  • 编译型语言:
    • 编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。如今大多数的编程语言都是编译型的,例如VisualBasic、VisualC++、VisualFoxpro、Delphi等。
    • 代表语言:C,C++,Pascal,Object-C,swift
  • 混合性语言:即同时拥有以上两种特性。混合性语言,又称之为半编译型语言,在编译的过程中,不过直接编译成机器码,而是中间码,中间码不可执行,随后在执行过程中,通过解释器/翻译器,再把中间码翻译成机器码进行执行。
    • 代表语言:Java,C#,.NET

变量是否需要声明类型

  • 强类型:即是程序中表达的任何对象所从属的类型都必须能在编译时刻确定,通俗来讲就是如果最开始定义a = 'hello',那么此时的变量a就被定义为了String,即字符串,当变量a与另一个变量b = 1相加时,就会报错,因为字符串无法与Integer,即整数想加
    • 代表语言:Java,Python,C#,Object-C,Ruby
  • 弱类型:与上面相反,即数据类型可以被忽略,同样用之前的例子,在弱类型语言中,当ab相加时,会把b自动转换成字符串String,所以能得到结果hello1
    • 代表语言:JavaScript,PHP,C,C++(C和C++有争议,在此不做讨论)

运行时变量结构能否改变

主要区别为运行时是否能够改变代码结构。动态类型语言和静态类型语言主要针对数据类型检查的时间问题。

  • 动态结构语言:是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。动态语言是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
    • 代表语言:Python,Ruby,Erlang,JavaScript,swift,PHP,SQL,Perl,Object-C,C#
  • 静态结构语言:与动态语言相对应的,运行时结构不可变的语言就是静态语言。静态语言是在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。
    • 代表语言:C、C++、C#、Java、Object-C

注:

通常情况下解释型语言是动态类型语言,编译型语言是静态类型语言。但也不全是,swift是编译型语言但是它也是动态类型语言。C#和Java是解释型语言也是静态类型语言。

引用

  1. https://blog.csdn.net/weixin_46421161/article/details/104893886/
  2. https://baike.baidu.com/item/面向过程/9957246?fr=aladdin
  3. https://baike.baidu.com/item/强类型/5074514
posted @ 2022-10-29 17:53  重生之开局就学写代码  阅读(431)  评论(0编辑  收藏  举报