Table of Contents
前言
所有的工程师在接触编程有一段时间了之后,必然都会接触和学习不少的语言,博主个人目前接触的语言就有:C,java,python,javascript,c#。大学时的课本知识里对计算机的各个部分都是有所涉猎的,但是由于自身水平不够,在大学学习时也尚未有一个深刻的认识。编程语言在计算机的整个体系里面的地位是十分重要的,但是读完大学下来发现自己并没有对所有编程语言有一个总体的印象,只知道后端我们常常用java,c++,python,前端我们常常用javascript。事实上,不同的语言类型有他们不同的目标,了解各种语言的分类是一件非常有意义且助于我们理解的事情。
最为广泛的编程语言分类如下
机器语言
机器语言是指直接在硬件当中解释的语言。是一些非常低级的机器指令,例如add,sub,div,sqrt。
下面是一个机器语言的例子:
89 F8 A9 01 00 00 00 75 06 6B C0 03 FF C0 C3 C1 E0 02 83 E8 03 C3
汇编语言
汇编语言是将机器代码编为更易读的东西。 它将人类可读的标签(或名称)分配给存储位置,跳转目标和子程序起始地址,但实际上并没有超出机器语言的范围。
下面是使用GAS汇编语言,在Intel 64架构上面实现的功能:
.global f
f:
andcc %o0, 1, %g0
bne .L1
sll %o0, 2, %g2
sll %o0, 1, %g2
add %g2, %o0, %g2
b .L2
add %g2, 1, %o0
.L1:
add %g2, -3, %o0
.L2:
retl
nop
高级语言
高级语言脱离了特定机器的所有约束。并向编程人员提供了如下的功能:
- 为几乎所有的东西提供命名,如:变量,类型,子例程,常量,模块
- 复杂表达式(例如2 *(y ^ 5)> = 88 && sqrt(4.8)/ 2%3 == 9)
- 控制结构(条件,开关,循环)
- 复合类型(数组,结构)
- 类型声明
- 类型检查
- 管理全局,本地和堆存储的简单,通常是隐式的方法
- 子程序有自己的私有范围
- 抽象数据类型,模块,包,类
- 异常
我们所接触的所有编程语言几乎全是高级语言,包括C,C++,java,C#,Scala,Kotlin,JavaScript,Erlang,Perl,Python,Ruby,Go,Swift,
高级语言有很多优点,例如:程序员更容易记住。逻辑和结构更容易理解。与其他语言相比,调试更容易。编写新程序所需的时间更少。