简述编程语言

喜你入骨 提交于 2020-08-05 18:15:32

编程语言可以分为三种:机器语言、汇编语言、高级语言

最开始随着1946年第一台计算机出现的是机器语言(也称二进制语言),在学习什么是机器语言之前,我们需要大致了解一下计算机的原理。具体的原理太深奥我也不懂,就拿一个三体中的比喻来简单讲一讲我的理解吧。

在刘慈欣的科幻巨著《三体》中,用士兵比喻组成计算机的简单电子元器件,通过让一个士兵举黑旗白旗代表一个电子元件的导通和关闭状态。比如说有三个士兵,第三个士兵只要看到前两个士兵中有人举了白旗,那么他就举白旗,这样子就构成了一个最简单的两输入或门;只要看到前两个士兵中有人举了黑旗,那么他就举黑旗,这就构成了一个最简单的两输入与门。通过与门、或门、非门、异或门这四种最基本的门电路,就能够组和成无限多的形式,完成非常复杂的运算。《三体》中就是靠三千万个士兵组成的计算机,花了几个月的时间计算出了天体问题。

抛开能否实现不说,这个例子能够十分形象地解释计算机的内部原理。一个士兵就是计算机内部的一个最简单的电子元件,他有稳定的0态和1态,且切换速度很快。通过几个士兵组成的系统就是最基本的门电路,有着稳定的输出。再通过大量的士兵,最终组成一个复杂的计算机,完成复杂且高效的运算。

当时看《三体》看到这一段的时候,我有一种茅塞顿开的感觉,不仅让我理解了计算机的内部简单机理,还解决了我曾经的一些疑惑。比如说,为什么计算机处理的数据得是二进制的,而不是我们经常使用的十进制,而且这样存储的数据不是变少了吗?
结合上面的例子,二进制的乘法器就相当于是一个与门,对士兵的要求只是看见黑旗就举黑旗,十分的简单;假如是十进制的乘法计算,那对士兵的要求可就大大增加了,且稳定性会非常差。体现在电子元件上,如果采用十进制,那就意味着需要一个有十种稳定且能够快速准确切换状态的电子元件,这一点也和对士兵的要求一样变得十分困难,更不用说效率和存储问题了。

不知不觉已经说了这么多了,接下来回到正题。
机器语言就是机器能够直接识别的指令代码。但是不同的计算机有各自不同的机器语言(指令系统)。就像下图所示,一串二进制数据就代表了计算机中的一些操作,正如它的名字,这种语言是给计算机看的,而不是给人看的,最早的程序员是通过打孔的方式来表示0和1,对照着手册敲出这些只由0和1组成的代码,再输入到计算机中完成编程,不仅十分麻烦,还很难找出程序中的错误。

面对这些数字串谁受得了呀,所以后来的程序员们就发明了一种给人看的语言:汇编语言。汇编语言也称符号语言,是一种低级语言,其特点是用助记符(帮助记忆的符号 比如ADD)代替原来的二进制指令,再通过编译成相应的二进制指令,被计算机执行。通过汇编语言,极大地提升了开发人员的效率,而且相较于之后的高级语言更接近硬件,可以对硬件进行操作,扩展性高。但是汇编语言还是有很多缺点,比如说由于不同的计算机有自己的指令系统,即同一段二进制指令可能在不同的计算机中代表不一样的指令,导致汇编语言兼容性和迁移性较差。还有很多别的缺点我就不一一赘述了(其实是不懂)。

再之后出现的是高级语言。高级语言的特点是独立于机器,与计算机的硬件结构及指令系统无关,而是面向过程或对象,十分近似于我们的日常语言,比如 let sum = a + b,基本上一眼就能看出大概意思,高级语言的出现极大地提高了开发的效率,但是高级语言需要通过更复杂的编译,执行所需的时间更长,而且难以对底层的硬件进行操作。

世界上第一个高级语言是我们十分熟悉的C语言的前身:B语言,是在上世纪六十年代肯·汤普森发明的,当时他用自己创造的编程语言编写了一个游戏Space Travel,十分贪玩的他为了玩游戏,又开发出了第一个操作系统——Unix。之后更是和好友里奇改进了B语言,改名为C语言(取自【基本计算机编程语言(Basic Computer Programming Language)】),这可能就是大神的游戏吧。经历了将近六十年的C语言,不仅没有衰退,反而在当今主流编程语言中仍然有着一席之地。

这里写图片描述

高级语言可按照类型的强弱分为强类型语言(静态语言)和弱类型语言(动态语言)
强类型语言就是像C、Java等需要声明类型的语言,提升程序可靠性,便于调试
弱类型语言就是像python、JS等不需要声明类型的语言,代码更简洁易读

还可以按照类型分为标记语言、脚本语言、编译语言、解释语言
标记语言(Markup Language)如HTML(HyperText ML超文本标记语言)、XML(Extensible ML可扩展标记语言),他们的特点就是将文本和其他信息结合起来展示。比如说<h1>hello</h1>,不仅能够表示"hello"的文本信息,还能表示其文本的格式信息。但是标记语言的毕竟是高级语言,是不能够直接被计算机执行的,所以需要解释器——浏览器的渲染引擎,对其进行解析、渲染,然后才能呈现出我们所看到的内容。

脚本语言的特点是解释执行而非编译,目的是提升开发效率,如JavaScript、VBScript、Python、PHP等等。其特点是不需要编译,可以直接用,由解释器来负责解释。比如我们最常用的JS,就可以直接在他的解释器:浏览器中直接运行。

接下来是编译语言和解释语言。
编译性语言就是只需编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以;因此其执行的效率比较高。比如我们最常见的C语言,在Linux下只需要先运行 gcc hello hello.c,即用gcc这个编译器套件将一个C语言程序编译为一个可执行文件,再运行./hello 直接执行就可以了。
而解释性语言是先翻译成中间代码,再由解释器对中间代码进行解释运行,像python,和编译性语言不同的就是可以直接通过解释器运行
还有我们常见的Java比较特殊,既有编译特性,又有解释特性。运行一个Java程序,首先要将文件编译成 .class 的字节码文件,再通过JVM(Java虚拟机)解释执行


现如今的编程语言可谓是数不胜数,每个语言都有其独特的性质和适合的领域,当然还是有许多大佬不满足于别人开发的语言,自己动手开发新的编程语言。关于编程语言,就简单讲到这里吧!

另外,如果你有兴趣,或者是有问题想要与我探讨,欢迎来访问我的博客:https:mu-mu.cn/blog
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!