标记语言、脚本语言、编译语言——别再被这三分法搞晕了
我第一次听说”脚本语言”和”编译语言”的区别时,对方说了一句话让我彻底糊涂了:
“JavaScript 是脚本语言,Java 是编译语言,但 Java 同时也可以被解释执行。”
……所以到底什么是什么?
后来我才明白,“标记/脚本/编译”这个三分法其实很粗糙, 它更像是”一个大概的分类”,而不是一个严格的科学定义。
一句话理解: 标记语言描述”长什么样”,脚本语言和编译语言描述”怎么做”——区别在于脚本语言即写即用,编译语言需要先翻译成机器码再跑。
标记语言:给内容贴上标签
标记语言的核心功能不是”做运算”,而是”描述内容的结构和展示方式”。
1 | <!-- HTML 是在说:这是一个段落,里面的文字加粗 --> |
1 | <!-- XML 是在说:这是一条数据,包含名字和年龄 --> |
常见的标记语言:
- HTML:网页内容的结构语言
- XML:通用的数据标记语言
- Markdown:我写这篇文章用的语言
- YAML:配置文件常用(比如 Hexo 的文章头)
关键特征: 标记语言不写逻辑。你不能用 HTML 写一个 if 判断或者 for 循环。
脚本语言:边解释边执行
脚本语言的诞生是为了缩短”写完 → 编译 → 链接 → 运行”这一长串流程。
简单来说,脚本语言写完之后不需要编译就能跑——因为解释器会一边读你的代码一边执行。
1 | # Python:典型的脚本语言,直接 python app.py 就能跑 |
1 | // JavaScript:浏览器端脚本语言的王者 |
常见的脚本语言:
- JavaScript/TypeScript:前端和 Node.js 后端
- Python:数据科学、AI、自动化脚本的首选
- PHP:老牌 Web 后端语言
- Ruby:以 Rails 框架闻名
- Shell/Bash:Linux 系统管理员的好伙伴
编译语言:先翻译成机器码再执行
编译语言是”先编译、后执行”的流程。你写完代码之后需要一个编译器把它变成机器码(.exe 或 .out),然后才能运行。
1 | // Rust:2026 年最热门的编译型语言之一 |
1 | // Go:简洁高效的编译型语言 |
常见的编译语言:
- Rust:系统编程、WebAssembly、工具链
- Go:后端服务、云原生基础设施(Docker、Kubernetes 就是用 Go 写的)
- C/C++:操作系统、游戏引擎、嵌入式
- Java:企业后端(但 Java 是编译+解释的混合体——先编译成字节码,再由 JVM 解释执行)
经验之谈: 我第一次用 Rust 写了一个 Web 服务——编译花了 3 分钟,但编译之后的速度真的惊艳到我了。同样的逻辑用 Node.js 写,并发能力差了 5 倍。这就是”编译时花的每一秒钟,在运行时都会加倍还给你”。
三种类型的对比
| 维度 | 标记语言 | 脚本语言 | 编译语言 |
|---|---|---|---|
| 用途 | 描述内容结构 | 编写程序逻辑 | 编写程序逻辑 |
| 执行方式 | 无执行概念 | 解释器边读边执行 | 编译器先翻译成机器码 |
| 是否需要编译 | 不需要 | 不需要 | 需要 |
| 典型文件 | .html, .xml, .md | .js, .py, .php | .rs, .go, .c, .java |
| 执行速度 | N/A | 中等 | 极快 |
| 开发效率 | 高 | 高 | 中(编译等待) |
边界越来越模糊了
说实话,2026 年这个三分法已经不太严格了。原因有三:
1. JIT 编译模糊了边界
现代 JavaScript 引擎(V8、SpiderMonkey)早就不是单纯的”解释执行”了——它们会在运行时把”热点代码”编译成本地机器码。所以 JavaScript 在运行时其实是”先充当脚本,热起来了就变成编译执行”。
2. TypeScript 是”写了需要编译,但运行时还是脚本语言”的混合体
1 | // TypeScript:写了需要先 tsc 编译成 JS,再跑 |
TypeScript 需要编译(tsc → .js),但编译后生成的 JavaScript 依然是脚本语言。所以 TypeScript 严格来说不算”编译语言”,而是”带有编译步骤的脚本语言”。
3. WebAssembly 让编译语言跑在浏览器里
Rust 和 Go 都可以编译成 WebAssembly(Wasm)——一种浏览器能直接运行的二进制格式。这意味着你可以用编译语言写前端代码。
2026 年的实际情况
在实际工作中,大多数人会混用这三种语言:
1 | 一个典型的 Web 应用项目: |
你不需要纠结”这个语言到底算什么类型”——你只需要知道:
- 写结构用标记语言
- 快速开发用脚本语言
- 追求极致性能用编译语言
相关推荐
P.S. 回到开头——JavaScript 是脚本语言还是编译语言?我的回答是:它是脚本语言出身,但经过了 JIT 编译器的武装。 就像一个人从小在乡村长大,后来去城市深造——你无法简单地说他是”农村人”还是”城市人”。这两种解释都对,就看你在哪个纬度评价。









