编程语言类型

编译型和解释型

编译型:编译器一次把所有的代码编译成机器语言,然后写成可执行文件;

解释型:程序运行中,由解释器不断地把源码解释,执行,并不断地解释,执行;

优缺点:

    编译型执行速度较快(C/C++、VB)更适合开发操作系统、大型应用程序、数据库系统等;

    解释型对不同系统平台间的兼容性较高(Java、JavaScript、Python)更适合做一些网页脚本、服务器脚本及辅助开发接口。

       既然编译型与解释型各有优缺点又相互对立,所以一批新兴的语言都有把两者折中起来的趋势。例如Java语言虽然比较接近解释型语言的特征,但在执行之前已经预先进行了一次预编译,生成的代码是介于机器码和Java源代码之间的中介代码,运行的时候有JVM解释执行。它既保留了源码的高抽象、可移植的特点,又已经完成了对源码的大部分预编译工作,所以执行起来比“纯解释型”程序 要快许多,C#也类似。随着设计技术与硬件的不断发展,编译型与解释型两种方式的界限正在不断变得模糊。

       其实Python也是一门先编译后解释的语言:

              当Python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。当Python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程(pyc文件其实是PyCodeObject的一种持久化保存方式)。

动态语言和静态语言

动态语言:指在运行期间才去做数据类型检查的语言(所以永远不用给任何变量指定数据类型,Python、Ruby)

静态语言:数据类型是在编译期间检查的(所以写程序时要声明所有变量的数据类型,C/C++、C#、Java)

强类型语言和弱类型语言

是否可以不同类型之间对使用者透明地隐式转换

强类型语言:强制数据类型定义的语言(一个变量一旦被指定了某个数据类型,如果不经过强制转换,那么它永远就是这个数据类型),强类型定义语言是类型安全的语言;

弱类型语言:数据类型可以被忽略的语言,一个变量可以赋不同数据类型的值,速度略快于强类型语言。

个人理解:弱类型语言应该都有“===”符号(像PHP,JavaScript),而且它们允许字符串跟数字相加,可见它们定义的变量的数据类型不固定。

原文地址:https://www.cnblogs.com/allenzhang-920/p/8313475.html