编译型/解释型/脚本型与OOP/过程式/函数式等编程语言分类的关系
你看到的这两类术语属于完全独立的编程语言分类维度,彼此之间没有强制绑定关系,也不处于同一分类层级,所以找不到统一的层级图很正常。
第一类:执行模式维度(编译型/解释型/脚本型)
这个分类是按照代码运行前的处理逻辑、执行方式划分的,和你写代码的语法、逻辑组织思路无关:
- 编译型:代码运行前需要通过编译器完整转换为对应平台的机器码,生成可执行文件后再运行,代表语言有C、C++、Go、Rust
- 解释型:代码不需要提前全量编译为机器码,运行时由解释器逐行/逐块转换执行,代表语言有Python、Ruby
- 脚本型:属于解释型的一个非正式子类,一般指主打轻量场景、不需要提前编译打包、直接用源码就能运行的解释型语言,这个分类没有严格的判定标准,代表语言有JavaScript、Shell、Lua
常见误区:很多语言现在是混合执行模式,比如Java会先编译为字节码,运行时再由JVM解释+JIT编译执行,不会严格属于某一类。
第二类:编程范式维度(面向对象/过程式/函数式)
这个分类是按照代码的组织方式、抽象逻辑的思路划分的,和语言的执行模式无关:
- 过程式:把逻辑拆分为一个个可复用的过程(函数),按照执行顺序串联调用完成目标,代表范式语言有C、Pascal
- 面向对象(OOP):把逻辑和对应的数据封装为对象,通过对象的交互、继承、多态等特性实现逻辑,代表范式语言有Smalltalk、Java
- 函数式:把计算视为数学函数的求值,避免可变状态、副作用,强调函数的一等公民地位,代表范式语言有Haskell、Clojure
注意:现在绝大多数现代语言都是多范式语言,同时支持多种编程范式,比如Python/Java/JS都同时支持过程式、面向对象、函数式写法,不会严格属于某一种范式。
两类分类的关联说明
两者之间没有任何绑定规则,同一执行模式的语言可以支持完全不同的范式,同一范式的语言也可以用完全不同的执行模式:
- 编译型语言可以支持任意范式:C(编译+过程式)、C++(编译+多范式)、Haskell(编译+函数式)
- 解释/脚本型语言也可以支持任意范式:Shell(脚本+过程式)、Python(解释+多范式)、ClojureScript(脚本+函数式)
- 没有"编译型就只能面向对象"、"脚本型就只能写过程式"这类强制规则,你看到的常见搭配只是社区选型偏好,不是分类要求。
内容的提问来源于stack exchange,提问作者Lee Dan
相关产品推荐
相关产品推荐

