一点关于主流编程语言分类的思考

十毛 2026-08-31 21:40 1

按编译型与解释型分

编译型:

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


有错误欢迎指出 谢谢大家

最新回复 (2)
  • daidaididi 08-31 22:12
    1

    看个人习惯吧 主要还是思维,转什么语言都大差不差的,入门都挺简单的

  • libook 08-31 22:15
    2

    如果是初学的话有助于理解编程语言的工作原理,但实际上现在这种分类已经没有太大的意义,社区整了足够多的活来突破各种边界。


    比如C语言有TCC可以解释执行,C++也有Cling能当脚本跑。C#的Native AOT能直接编成机器码,完全不要JIT,Java那边GraalVM也能做AOT编译。Python的PyPy默认开JIT,CPython 3.13也加了实验性JIT。


    类型检查这块,TypeScript编译期类型很严,但运行时还是动态的。Python用mypy可以提前做静态检查,而Java和C#用反射时,类型错误只能运行时才能发现。


    强弱转换也一样,C++加上explicit就能禁止隐式转换,Python里1+1.0其实也做了隐式提升,Java和C#的int转long也是直接隐式转的。

* 帖子来源Linux.do
返回