编译型语言和解释型语言解释说明
编译型语言和解释型语言的定义
很多资料上都会说:“python是解释型语言,因为python通常是解释执行的”,“C是编译型语言,因为C是编译执行的”,“Java是解释型语言,因为Java是有JVM解释执行的”以上这些说法其实都是都是伪命题
举例说明:
如果第一次听到“解释”和”编译“这两个概念,就来举个形象点的例子:
解释型语言
(1)把让计算机执行一段代码,比喻成让外国厨师做一道菜,用解释的方式执行一段代码,就好比是让国外的厨师做一道水煮鱼就需要吧中文菜谱里的第一个步骤念给翻译, 然后翻译再把这一步骤翻译成英文给厨师听,
等英国厨师吧第一个步骤做完,你再把第二个步骤念给翻译,翻译再把第二个步骤翻译成英文念给厨师听,厨师再开始做第二个步骤。
这里的翻译者就是指:
计算机执行代码的解释器
编译型语言
(2)把让国外厨师做的中国菜整个菜谱预先交给翻译,让翻译写出完整的一
份英文水煮鱼菜谱,
这样以后再让英国厨师做水煮鱼时就可以直接把翻译好的英文菜谱交给英国厨师,就可以照着英文菜谱很快的把水煮鱼做出来。
这里的翻译者就是指:
编译器
总结
描述完以上举例说明后,会发现同样一个菜谱(也就是一段代码),既可以解释执行也可以编译执行所以再在哪里看到说某个语言是编译型还是解释型这完全是很荒谬的说法,就如同有人告诉你水煮鱼是一道“编译型的菜”,宫保鸡丁是一道“解释型的菜”
静态语言和动态语言的区别
基本概念
动态类型语言:在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量的数据类型,比如Python和Ruby
静态类型语言:它的数据类型是在编译期进行检查的,也就是说变量在使用前要声明变量的数据类型,这样的好处是把类型检查放在编译期,提前检查可能出现的类型错误,典型代表C/C++和Java
强类型语言,一个变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。举个例子:如果你定义了一个double类型变量a,不经过强制类型转换那么程序int b = a无法通过编译。典型代表是Java。
弱类型语言:它与强类型语言定义相反,允许编译器进行隐式的类型转换,典型代表C/C++。
总结
上一个图就很清晰了