解释性语言&编译性语言,动态&静态语言?

你是不是每一次写完java,写完python,都有许些疑惑~

为什么每次新建一个python项目,JetBrains PyCharm 都会让你选一个解释器,什么是解释器呢?

为什么编写Java不需要解释器呢?今天就给你们带来答案~

想要解锁更多新姿势?请访问https://tengshe789.github.io/

编译型和解释型的区别

编译型语言

先来看看编译型语言定义:

编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码(二进制)。

可以这么理解,编译型相当于用中英文词典(翻译器)将一本英文书一次性翻译(编译)成一本中文书。以后查看直接就是中文了。可想而知,以后读书(执行)会非常非常方便。

所以,由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言

用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件)

解释型语言

再来看看解释型语言的定义:

解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。

而解释型相当于用中英文词典(翻译器)将一本英文书读一段翻译一段(解释)中文。以后查看时还是需要重新翻译。这样效率会低一些,必须依赖解释器,但是跨平台性好。

所以,一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等

Java

编译型和解释型的定义是对立存在的,但也可以在一个语言中同时存在。

为什么我把 java 语言单独放出来呢?因为它同时兼有编译型和解释型特点。

整个流程如下:

我们编好源代码(.java 文件),编译生成字节码(.class 文件),再通过 JVM(java 虚拟机)运行生成机器指令,由机器运行机器码。注意,此处生成机器语言前的操作是解释型,每次运行都要重新解释。因此,此处表明 java 是解释型

但是,部分 JVM(java 虚拟机)有一种 JIT(Just in time)机制,能够将部分已经解释翻译的常用机器指令保存。下次不需要解释,直接运行即可。此时 java 是编译型

动态语言和静态语言

我们常说的动态语言和静态语言,其实是指动态类型语言和静态类型语言。先来看看动态类型语言:

动态类型语言,是指数据类型的检查是在运行时做的。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。

动态类型语言的优点是不需要写多种数据类型的代码,代码相对简洁一些,方便代码阅读。缺点是不方便调试,代码命名也容易混淆;

再来看看静态类型语言的定义:

静态类型语言,是指数据类型的检查是在运行前(如编译阶段)做的。

静态类型语言的优点是方便调试,代码相对规范。缺点是需要写很多数据类型相关的代码,代码不够简洁。

结束
此片完了~ 想要了解更多精彩新姿势?
请访问我的个人博客 本篇为原创内容,已在个人博客率先发表,随后CSDN,segmentfault,掘金,简书,开源中国同步发出。如有雷同,缘分呢兄弟。赶快加个好友~

-------------本稿が終わる感谢您的阅读-------------