按编译型与解释型分
编译型:
1.运行前AOT编译为机器码 运行时直接执行的 比如C/C++,Rust,Go
2.运行前编译为字节码 运行时通过JIT 编译为机器码执行 比如C#
解释型:
运行前编译为字节码 运行时通过解释器解释执行 不编译为机器码 比如Python(CPython有JIT的但默认不打开),Lua
既是编译型又是解释型:
同时有两种特征的(运行前编译为字节码 运行时通过JIT 编译为机器码执行+运行前编译为字节码 运行时通过解释器解释执行 不编译为机器码,以上两种方式取决于是否是热点代码) 比如Java,JavaScript,TypeScript
按类型检查的时机分类
动态类型语言:
在运行时才会进行类型检查 这种语言的类型错误往往会导致运行时错误 比如JavaScript,Python,PHP,Lua
静态类型语言:
编译阶段就能确定每个变量的类型 这种语言的类型错误往往会导致语法错误 比如
C/C++,Rust,Go,C#,Java
是否允许隐式类型转换
弱类型:
允许隐式类型转换 比如 JavaScript,TypeScript,PHP,C/C++
强类型:
不允许隐式类型转换 比如Python,Rust,Go,C#,Java
有错误欢迎指出 谢谢大家