引言
毕竟西邮编程气氛浓厚,加上大神学长学姐的支持和学弟学妹对编程的兴趣,上一篇简书文章《浅谈C语言历史》的分享效果还可以,自己在校内建立的编程讨论群短短几天就有了两百多的成员,并开始以内部推荐的形式邀请新成员一同加入学习编程的氛围。好的分享内容才能引发持续交流,这一期,我们来简单了解下三种程序设计语言 -- 机器语言、汇编语言和高级语言的区别与联系,做好充足的准备迎接编程成长之路。
语言只是工具,不要过早的去想着如何编写代码。
要让自己的第一个 “Hello World” 敲得振振有力。
第一台通用计算机 -- ENIAC
由于第二次世界大战的需要,历经4年的科研与实践,世界上第一台通用计算机、第二台电子计算机 ENIAC(Electronic Numerical Integrator And Calculator)于 1946 年 2 月 14 日在美国宾夕法尼亚大学宣告诞生,标志着计算机时代的到来。
ENIAC 是基于真空管技术研发的第一代计算机,无操作系统,采用机器指令或汇编语言编程,下图便是编程语言的层次结构,具体概念将一一道来。
机器语言
机器语言(机器码)是用二进制代码(只包含“0”和“1”的代码)表示的、计算机能直接识别和执行的一种机器指令的集合。最早的计算机直接靠机器语言运行,输入方法是靠打孔带(一个条带上面有实心空心的小点,对应1和0)。后来出现了磁带,但指令输入的本质没有改变。
通俗来讲,那时需要靠科研人员给计算机一段对应 0 和 1 的打孔带,计算机才能执行相应的操作并返回预期的结果。
这些包含 “0”、“1” 的二进制机器码具有灵活、直接执行和速度快的特点,可以根据计算机设计者的实际需要直接操作计算机的硬件结构。但由于机器语言与硬件构造密切相关,每个计算机的硬件也不尽相同,因此不同型号的计算机其机器语言是不相通的,按照一种计算机的机器指令编制的程序,不能在另一种计算机上执行。
二进制的机器语言也是有规则的,每一串相应的01映射着一条特定的指令。
计算机发展至今,除了计算机生产厂家的专业人员外,绝大多数的程序员已经不用再去学习机器语言了。
汇编语言
汇编语言(符号语言)是将二进制的机器码通过助记符的方式让人可以更方便地编写并检查的低级语言。汇编语言接近机器语言,可以看做是机器语言的另一种形式,计算机在运行时也需要将汇编语言变为机器语言的二进制形式才可运行,这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。
汇编语言的特点:
- 面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
- 保持了机器语言的优点,具有直接和简捷的特点。
- 可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
- 目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
- 经常与高级语言配合使用,应用十分广泛。
汇编语言在编程发展史中承前启后,它第一次摆脱了机器语言的束缚,进入到以接近人类语言为发展目标的时代。
高级语言
高级语言是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序,但机器是无法直接执行的,需要最终编译链接成二进制的机器代码才可被计算机直接执行。
高级语言并不特指某一种具体编程语言,而是包括很多编程语言在内。如目前流行的 JAVA 、 C 、 C++ 、 C# 、 Pascal 、 Python 、 PHP 、VC 语言等等,这些语言的语法、命令格式不尽相同。
因此将程序设计语言从机器语言抽象到高级语言,带来的主要好处是:
- 高级语言接近算法语言,易学、易掌握,一般工程技术人员只要几周时间的培训就可以胜任程序员的工作;
- 高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;
- 高级语言远离机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可移植性好,重用率高;
- 由于把繁杂琐碎的事务交给了编译程序去做,所以自动化程度高,开发周期短,且程序员得到解脱,可以集中时间和精力去从事对于他们来说更为重要的创造性劳动,以提高程序的质量。
编译型语言和解释型语言
高级语言又分编译型语言(C、C++等)和解释型语言(JAVA、JavaScript、PHP等),虽然最终都需要编译成机器语言才能被计算机识别和执行但是——
- 编译型语言需要将源码一并地转换成机器语言的程序之后再执行,针对不同计算机结构编译后的机器语言无法跨平台运行;
- 解释型语言是在运行的时候将程序先编译成字节码(可以理解为一个中间语言),再在运行的时候由运载解释型语言的环境将字节码翻译成机器语言。但这个过程中可以依靠运载环境根据不同的计算机硬件结构生成相应的机器语言,从而具有跨平台的特性。
- Hello,我是韩亦乐,现任本科软工男一枚。软件工程专业的一路学习中,我有很多感悟,也享受持续分享的过程。如果想了解更多或能及时收到我的最新文章,欢迎订阅我的个人微信号:韩亦乐。我的简书个人主页中,有我的订阅号二维码和 Github 主页地址;我的知乎主页 中也会坚持产出,欢迎关注。
- 本文内部编号经由我的 Github 相关仓库统一管理;本文可能发布在多个平台但仅在上述仓库中长期维护;本文同时采用【知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议】进行许可。