关于三组计算机语言的分析与思考

关于三组计算机语言的分析与思考

编译型语言与解释型语言。

我们编程是一般用的都是高级计算机语言,但是机器只能读懂机器语言,那么怎么把我们编写程序时候用的高级计算机语言转化为机器能读懂的机器语言呢?
即有两种:
1、编译
2、解释
按照这样这两种转化方式就把计算机语言分为了编译型语言和解释型语言。
编译型语言,即为先把源程序编译,按照平台的不同,转化为不同的可以执行的文件,每种平台只能正常的读取相应的文件,之后运行程序是机器直接运行编译的结果即文件。但是这个编译过程不是仅仅是编译,包含了一系列的操作,具体如下图。
通俗的来说编译型语言的过程就是:先把源程序编译成适合于平台的文件(.exe),之后机器直接读取运行该文件来执行相应的程序。
由此可知,编译型语言的好处是除了第一次需要相对较长的时间,之后的运行速度较快,并且编译型语言因为直接翻译成了计算机可以执行的文件,所以能直接检查源代码的错误,所以如果编译型语言能够编译成功一个.exe文件的时候,运行该程序的时候只会出现逻辑与编写者有可能不同的,而不会出现编译不成功的情况。但是编译型语言也有自身的缺点,因为对每个平台有不同的文件,所以跨平台较差,对于一些大型的代码,也费内存等。
编译型语言有C、C++、Delphi等。
编译过程的一系列操作

解释型语言,即对高级语言进行翻译为机器码后,被计算机执行。这个过程和编程型语言不同的是,编程型语言是整篇编译为一个可被机器执行的文档,这个不需要编译,而是逐句翻译执行。也就是每运行一句,就由解释器翻译一句为中间代码,再由解释器执行一句,并且在下次运行该程序的时候仍要重复同样的操作。在其中起了关键性作用的自然是解释器。
通俗的来说,解释型语言就是对源程序每运行一句,解释器翻译一句为中间代码,再由解释器执行这个中间代码,逐句进行直到结束。每次运行该程序都要重复此操作。
通过这个过程,因为不是像编译型语言那样依赖于根据相应的平台编译形成的相应的.exe文件,而是直接依靠解释器作用于原代码,所以跨平台性比编译型要好,而且因为没有形成.exe文件,所以所占内存相对于编译型要小。不过因为每次打开都要重复一边翻译操作,所以效率比前者要慢,而且因为逐句翻译,所以不能一下找出源代码中出错的部分。
解释型语言有JavaScript、VBScript、Perl、Python、Ruby、MATLAB。
我之前看到了一个很生动的比喻,就是编译型语言就类似于用汉英字典把一篇英语文章一次性翻译成了一篇中文文章并且记录下来,以后再看的就直接看这片翻译过后的中文文章;而解释型语言就是对一篇英文文章一句一句并且不记录,就像做英语阅读理解,不可能记录下来每一句吧,按照这个方法读完全篇,过段时间再看这篇文章的时候就还要再按照一句一句的翻译。
总而言之,两者有各自的优缺点,可以根据不同的需求或者侧重点来选择不同的语言。

动态类型语言和静态类型语言

动态类型语言就是数据类型的检查在运行时候做的。在动态类型语言编译的时候就不用给变量指定类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。
而静态语言是指数据类型的检查是在运行前(如编译阶段)做的。
二者的区别即为对变量的类型对定义时间、方式不同。
即为,动态类型语言在定义变量时不需要给变量具体的类型,这个在运行的时候,在你给这个变量赋值的时候自动储存这个变量类型。如:变量a,不用给a定义类型,当你在运行过程中把“3”赋给a,那么变量a就是整形变量。
动态类型语言如Python和Ruby等。
而静态变量是在你定义的时候就要给变量定义类型,如c语言中常见的“int a”,那么a就是整形变量。
静态类型语言如C/C++等。
动态类型语言因为不需要提前考虑变量的类型,所以在编写代码的时候不需要考虑那么多,可以把更多精力去思考整个项目或者题的逻辑方面。并且因为不用规定很多的数据类型,代码整体看起来相对简洁。
而静态型语言在变量定义的时候就规定了类型,所以整体看起来更为规范。
我对这两种类型语言对理解:比如你是一个将军指挥打仗,而那些变量就可以视为部下,对于静态类语言的部下,你需要给他安排特别具体,遇到什么事情怎么处理,而动态语言的部下是遇到具体的事情会自己作出相应的反应。这样看来,静态类语言虽然看起来会死板一些,但是准确率高,不过你需要给每一个他们安排的特别详细,所以你的精力会分散在这里,而动态类语言能够自己应对,你就可以减少在这方面的精力,而且精力集中在整个战局上面,不过可能会有不如你意的情况。
我从别的文章中发现了对动态静态类型语言区别的流行语:Static typing when possible, dynamictyping when needed

强类型语言和弱类型语言

强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。如:Java和Python
而弱类型语言是一种类型可以被忽略的语言,与强类型定义相反。如:VBScript
举个例子:强类型语言中,如果一个值为3的整形变量a,想进行a=3.5,这个是不行的,因为a是整形变量而3.5是个实数,如果要进行该操作需要先把整形变量a强制转变为实数变量,才能进行操作,而弱类型语言中就不需要强制转化,就可以直接进行该操作。
这样看来,虽然看起来强类型的灵活性比弱类型灵活一点,其实从另一方面来看也会让整个程序显得混乱。不过也有例外,我从别的文章了解到,例如c#的机制,是一种智能化,而不是优缺点。

(图片来源于别的文章)
END

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页