0
点赞
收藏
分享

微信扫一扫

【通用知识 一】编程语言的分类及各种语言的差异

Raow1 2022-04-13 阅读 65

题目中的几种语言其实是从不同维度来对语言进行分类,但是它们都是计算机语言,在介绍这些语言之前,我们先介绍一下计算机语言。

计算机语言 Computer Language

计算机语言,顾名思义,就是用来和计算机通信的一种语言。计算机语言有很多分类,具体包括:

  • 构造语言 Construction Language。人类通知计算机一个具体问题解决方案的通知形式就是构造语言。
    通知形式有很多种,所以构造语言又可以划分为以下几种:
    • 命令语言 Command Language。一种用来控制计算机自身任务的语言,通常以命令行的方式被使用。常见的例子有 shell。
    • 配置语言 Configuration Language。一种用来编辑配置文件的语言,配置文件是用来配置计算机程序的参数和初始设置,比如操作系统配置。
    • 编程语言 Programming Language。一种为计算机传递指令而设计的正式语言。大部分的编程语言是由计算机指令构成的,通过向计算机发出指令来完成逻辑计算。通过编程语言可以编写源代码,最终形成系统。编程语言具有完整的语义和语法规范。这也是本文重点介绍的语言。
    • 查询语言 Query Language。一种用于在数据库和信息系统进行查询的语言,常见的例子就是 SQL。
    • 转换语言 Transformation Language。转换语言是用来将某种语言的输入文本转换成满足特定需求的经过修改的输出文本,输入文本和输出文本的内容大部分情况下是不一致的。比如宏语言就是一种转换语言,可以将元语言转换成某种高级编程语言。
  • 数据交换语言 [Data Change Language](https://en.wikipedia.org/wiki/Data_exchange#Data_exchange_languages)。数据交换是将源模式下的结构化数据转换为目标模式的过程,并且源数据和目标数据内容一致,一般用于不同计算机程序间进行数据交换。完成数据交换这一过程使用的语言就是数据交换语言,常见的有 XML、JSON。
    要注意,在数据交换时目标数据实际上是重建的,可能存在数据丢失或者重建失败的情况,也就是反序列化失败。
  • 标记语言 Markup Language。标记语言是为展现数据所设计的语言,可以为数据设计展现形式,是一种表示语言,不包含任何逻辑和算法。比如 HTML 就是用来在浏览器中组织数据,它告诉了浏览器如何在页面中组织数据,是通过表格还是列表。常见的例子有 HTML、XML。
  • 模型预言 Modeling Language。一种用来表达信息的人工语言,通常用来设计计算机系统。又可以分为:
    • 体系结构描述语言 Architecture Description Language。用于系统体系结构建模
    • 硬件描述语言 Hardware Description Language。用于集成电路建模
  • 页面描述语言 Page Description Language。一种用来描述被打印页面的外观的语言,比如 PDF。
  • 模拟语言 Simulation Language。一种在计算机中进行模拟操作的语言。
  • 规范语言 Specification Language。一种用来描述一个系统应该做什么的语言,是比编程语言更高级别的来描述系统的一种方式。规范语言不会被执行,它应该描述的“是什么”,而不是“如何”,这是编程语言做的事。
  • 样式表语言 Style Sheet Language。样式规则的集合就是样式表,而用来生成样式表的语言就是样式表语言。样式表语言一般用来给标记语言生成的文档设置样式,比如标题是红色还是黑色,大小是10号还是20号。常见例子 CSS。

编程语言 Programming Language

本文重点是介绍编程语言,在编程语言发展过程中,一个明显的趋势就是使用更高层次的抽象来提高解决问题的能力或者提高开发效率。早期的编程语言与计算机底层硬件密切相关,适用范围有限,往往代码不可移植,被称为低级编程语言;随着抽象层次的增加,编程语言与硬件无关,适用范围更广,代码可移植性增强,被称为高级编程语言。

1. 低级编程语言 Low-level Programming Language

低级编程语言几乎不或很少提供对计算机指令集的抽象。

1.1 机器语言 Machine Language

机器语言是唯一一种不需要事先处理就可以直接被计算机执行的语言,被认为是计算机语言的最低级别表示。机器语言由一系列指令构成,每个指令都代表一个加载、存储、跳转或算术逻辑单元操作。
真正的机器语言由 0 和 1 组成的二进制数据,但通常程序员会采用更易读的形式来编码指令和数据,比如十进制、十六进制。有机器语言编写的叫做机器码。以下就是用 16 进制编写的一段机器码。

8B542408 83FA0077 06B80000 0000C383
FA027706 B8010000 00C353BB 01000000
B9010000 008D0419 83FA0376 078BD989
C14AEBF1 5BC3

1.2 汇编语言 Assembly Language

大概是机器语言实在太难以记忆、容易出错,在机器语言之上进行了一层抽象,形成了更易读的汇编语言。汇编语言几乎没有语义和规范,只是机器指令到汇编指令的映射,只是相比机器语言更易读。
由于汇编语言依赖于机器码指令,所以汇编语言也是与硬件密切相关的。以下是一段使用汇编语言编写的代码:

_fib:
        movl $1, %eax
        xorl %ebx, %ebx
.fib_loop:
        cmpl $1, %edi
        jbe .fib_done
        movl %eax, %ecx
        addl %ebx, %eax
        movl %ecx, %ebx
        subl $1, %edi
        jmp .fib_loop
.fib_done:
        ret

低级编程语言更接近机器语言,虽然可以直接编写程序,但指令记忆和地址计算既乏味又容易出错。目前,开发企业应用很少使用低级编程语言,而是采用对于人类更易读的高级编程语言。

2. 高级编程语言 High-level Programming Language

高级编程语言不处理寄存器、内存地址,而是处理变量、数组、循环、线程和其他抽象的概念,更专注于可用性。常见的编程语言有 Java、C、C++、C#。

2.1 脚本语言 Scripting Language

在高级编程语言中,有一类特殊的编程语言,它就是脚本语言。脚本语言是通过脚本来执行特定的任务,一般用于连接不同的程序或语言,不会独立工作。常见的例子有 JavaScript、PHP、Python。

在这里插入图片描述

编程语言处理器 Processor

计算机只能理解机器语言,所以在机器语言之上抽象的编程语言都不能直接被计算机执行,必须先转换成机器语言。而将抽象的编程语言翻译成机器语言或目标代码的中介就是语言处理器。

高级编程语言处理器

对于高级编程语言而言,将高级编程语言转换成机器语言的过程,是通过编译器或解释器完成的。
大部分高级编程语言只用到编译器或者解释器之一,而 Java 比较特殊,Java 源代码先被编译器编译成中间形式,然后被解释器解释执行,所以经常能看到一种争论:Java 到底是编译型语言还是解释型语言。这里我把它归类为编译型语言,大家有不同的观点也可以提出探讨。

1. 编译器 Compiler

编译器主要针对非脚本语言的高级编程语言,它可以一次性扫描所有源代码,将源代码编译成目标代码或机器码。如果编译过程发现错误,会在编译完成后报告所有可能的错误。
源代码被编译一次后,源代码就可以不再使用了,后续执行只需要使用编译后的结果即可。
在这里插入图片描述

2. 解释器 Interpreter

解释器主要针对脚本语言,不同于编译器一次扫描所有源代码,解释器会逐行扫描代码并解释,然后执行,一旦发现错误,就会在错误处停止。由于解释器是逐行扫描代码并解释执行,解释器并不会将源代码转换成机器码,也就是没有解释后的产物。所以脚本语言每次执行都需要重新解释执行。
由于编译程序只需要编译一次,就可以到处执行,而解释程序每次都需要重新解释,所以一般编译程序运行的比解释程序要快。
在这里插入图片描述

低级编程语言处理器

3. 汇编器 Assembler

低级编辑语言由于抽象层次较低,不需要编译器或解释器,只需要针对非机器语言的低级编程语言—汇编代码使用一种简单的处理器—汇编器,转换成可执行的机器码。
在这里插入图片描述

用低级编程语言编写的程序由于不需要编译或解释,不需要生成对象,运行速度快、占用内存少;
相反,用高级编程语言编写的等效程序可能效率更低、占用内存更多。

参考资料:

  • Difference Between Programming, Scripting, and Markup Languages
  • What’s the difference between Scripting and Programming Languages?
  • Compiler vs Interpreter
  • Language Processors: Assembler, Compiler and Interpreter
举报

相关推荐

0 条评论