作者:西北孤狼2502911947 | 来源:互联网 | 2024-09-30 11:12
Hello,我是Alex007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫Alex的人太多了,再加上每天007的生活,Alex007就诞生了。聊一聊编程到底是啥,怎
Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了。
聊一聊编程到底是啥,怎么发展起来的呢?
编程语言是从哪蹦出来的?
一、什么是编程?
看过《黑客帝国》这部电影的人们应该会对一个场景印象深刻,黑色的屏幕落下一行行的代码,屏幕前的程序员十指飞舞干脆利落,十分炫酷。
这个画面让很多人以为这就是编程,坐在电脑前飞快的敲键盘,其实也没错,编程确实等价于敲代码,但是可没有电影中表现的那么精彩。
编程其实就是程序员通过键盘输入代码与计算机做沟通,既然是沟通,那就必须是双方的,程序员通过代码向计算机发出指令,计算机执行指令之后将结果反馈到屏幕或文件上显示给程序员。
计算机的反馈,可以是文字,可以是图片,也可以是视频,这是以我们能理解的方式显示,所以编程也是必须以计算机能理解的方式发布指令。
我们都知道,计算机底层所有的工作都是以二进制的形式进行的,也就是说它只认识0和1,当初最早的程序员也确实是靠二进制写程序。
由二进制代码0和1表达的指令称为机器指令,所有的机器指令的集合构成计算机的机器语言。
慢慢的,程序越来越多,逻辑也越来越复杂,特别容易出错,代码维护极其困难,单独的0和1已经不能够满足需求了,为了让编程变得更加直观,程序员就把二进制的01进行分组,四位二进制数表示一位十六进制数,程序员输入十六进制的数,然后有一个专门的程序将十六进制数转换为二进制数之后再交给计算机执行。
但是,这种由十个数字和六个字母组成的语言还是不够直观,只有专业人员能看懂,普通人想要理解太过困难,这就导致编程的学习门槛高,最好是能够让计算机直接认识单词,这样的程序看起来也比较直观。
程序员又把二进制的机器语言重新分组,让固定长度的由01字符组成的机器码直接对应英文单词,这样程序员就可以直接输入单词进行编程,于是汇编语言就此诞生。
我们来看一段汇编语言的代码:
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov edx, len ;message length
mov ecx, msg ;message to write
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
这段代码的功能其实就是输出“Hello World!”而已,这么一个简单的功能,却需要那么多行的代码,那我每次要想输出字符的时候都要把上边的代码再敲一遍。
因此,又有程序员将固定功能的汇编语言代码封装起来,用一个简洁的单词代表,比如上述汇编语言的代码是向屏幕输入一个字符串,那么我把这个功能用一个单词print代表,这样就只需要输入print(“Hello World!”),就可以在屏幕上打印字符串,这就是高级语言。
高级语言简化了编程的过程,具有如下优点:
1.不需要再使用繁琐的二进制或十六进制的机器码
2.更加平易近人,让编程是以程序员的思路进行,而不是思考计算机底层应该怎么做
编程语言经过层层优化,从最开始的机器语言,到汇编语言,再到高级语言,风格越来越优雅,现在通过高级语言编程只需要输入美丽的英文语句就可以向计算机发布指令。
二、高级语言的分类
在屏幕上打印字符串,使用高级语言可以写成:
print("Hello World!")
对我们而言,一看这行代码就知道我们是给计算机发布了一个打印字符串的命令,而在计算机内部会把这条语句转换成用机器语言编写的等价指令,一大堆以01机器码形式表现的指令,看起来非常麻烦。
但是对于计算机来说恰恰相反,高级语言编写的指令就是一堆火星文,毫无用处,计算机本质上还是只能识别二进制的机器码,要想执行我们给它发布的指令,就必须把指程序翻译成机器语言。
我们知道,翻译有两种方式,假如我用中文写了一本书,然后想让一个只懂英语的外国人看,第一种方案是我找一个翻译把整本书翻译成英文版本,把译本直接给外国人,他就可以直接阅读,第二种方案是把翻译人员和外国人都叫过来,我把内容读给翻译人员听,翻译人员理解了之后再翻译成英文说给外国人听。
这两种方案其实就是编程语言的两种分类,一种是将程序代码全部翻译成机器语言之后交给计算机执行,这叫编译型语言,承接翻译工作的是编译器;另一种是将程序代码一行一行的翻译成机器语言然后计算机一行一行的执行,这叫解释型语言,承接翻译工作的是解释器。
统一来讲,编译器或解释器就是将我们能够理解的高级语言程序转换成计算机能够理解的机器语言程序。
程序员负责进行思维活动编写代码,编译器或解释器负责代码的翻译工作。
编译型
我们说编译就类似于将一本书全部翻译成机器语言程序,那么编译的过程肯定要消耗一定的时间,而计算机拿到“这本书”之后可以很快的阅读,不仅如此,编译之后的译本还可以给很多能看懂的计算机执行,相比与此编译所使用的时间就不足为虑了。
编译型语言的优点:
1.执行速度快。
对于同一个任务采用不同的语言实现,一般编译型语言的执行速度是解释型语言执行速度的2~10倍。
2.调试方便。
编译型语言的代码编写要求比较严谨,在调试时比较方便。
3.源码不依赖。
编译型语言执行时不需要源代码。
编译型语言的缺点:
1.代码量大。
完成同一个任务一般编译型语言的代码量是解释型语言代码量的10~50倍。
2.平台依赖性。
编译型语言是要基于不同平台底层实现的,因此对平台的依赖性比较大。
3.更新代价大。
每次修改完源代码之后都要重新编译。
常见的编译型语言:C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Ada。
解释型
解释型语言的优点:
1.代码简洁。
解释型语言的代码相对编译型语言的代码更为简洁,方便阅读。
2.平台独立性和安全性。
解释器内部已经实现了对不同平台的交互处理,这使得解释型语言适合互联网和WEB应用的开发。
解释型语言的缺点:
1.执行速度慢。
相比于编译型语言,解释型语言的执行速度较慢。
2.内存占用大。
必须先运行相关的解释器才能执行解释型语言,而解释器会大量消耗资源,占用CPU周期和内存。
常见的解释型语言:Python、Tcl、Perl、Ruby、Vbscript、 Javascript。