Rust 学习笔记:编程语言的相关概念
Rust 学习笔记:编程语言的相关概念
- Rust 学习笔记:编程语言的相关概念
- 动态类型 vs 静态类型
- 动态类型 (Dynamically Typed)
- 静态类型 (Statically Typed)
- 对比
- 示例
- 强类型 vs 弱类型
- 强类型 (Strongly Typed)
- 弱类型 (Weakly Typed)
- 对比
- 示例
- 编译型语言 vs 解释型语言
- 编译型语言 (Compiled Languages)
- 解释型语言 (Interpreted Languages)
- 对比
- 混合使用编译和解释机制的语言
- 中间代码(字节码) + 虚拟机执行
- 即时编译(JIT)与解释器的混合模式
- 提前编译(AOT)与中间代码
- 总结
Rust 学习笔记:编程语言的相关概念
参考视频:
- https://www.bilibili.com/video/BV14J11YoE7
- https://www.bilibili.com/video/BV1Y227YtETA
动态类型 vs 静态类型
动态类型 (Dynamically Typed)
定义:变量类型在运行时确定,且类型可以随时改变。
特点:
-
不需要显式声明变量类型(例如 Python、JavaScript)。
-
更灵活,适合快速开发。
-
错误可能在运行时暴露(例如尝试对字符串进行数值运算)。
静态类型 (Statically Typed)
定义:变量类型在编译时确定,且类型不可随意改变。
特点:
-
需要显式声明变量类型(例如 Java、C++)。
-
类型错误在编译阶段就能发现,安全性更高。
-
需要更多代码量,但性能通常更优。
对比
示例
强类型 vs 弱类型
强类型 (Strongly Typed)
定义:语言严格限制类型间的隐式转换,要求显式类型转换。
特点:
-
类型错误会直接导致失败,而非自动转换。
-
代码更安全,但需要更多显式操作。
弱类型 (Weakly Typed)
定义:语言允许隐式的类型转换,自动尝试兼容操作。
特点:
-
灵活性高,但可能隐藏潜在错误。
-
代码更简洁,但可读性可能降低。
对比
示例
编译型语言 vs 解释型语言
编译型语言 (Compiled Languages)
源代码需要先通过编译器(Compiler) 转换为机器码(二进制文件),生成独立的可执行文件(如 .exe),然后直接由操作系统运行。编译过程是提前完成的。
优点:
-
执行速度快:直接运行机器码,无需翻译过程。
-
安全性高:源代码被编译为二进制文件,隐藏原始代码逻辑。
-
资源占用低:适合系统级开发(如操作系统、嵌入式)。
缺点:
-
开发效率低:需编译后才能运行,调试周期长。
-
跨平台性差:不同操作系统需要重新编译(如 Windows 和 Linux 的二进制文件不兼容)。
解释型语言 (Interpreted Languages)
源代码由解释器(Interpreter) 逐行读取并实时翻译成机器码执行,不生成独立的可执行文件。每次运行都需要解释器参与。
优点:
-
跨平台性强:只需对应平台的解释器,代码无需修改。
-
开发效率高:修改代码后可直接运行,无需编译。
-
适合脚本和快速迭代(如 Web 开发、自动化脚本)。
缺点:
-
执行速度慢:边翻译边执行,额外开销大。
-
依赖解释器环境:用户需安装解释器才能运行代码。
对比
混合使用编译和解释机制的语言
这类语言结合了编译型和解释型的优点,通常分为 3 种实现方式。
中间代码(字节码) + 虚拟机执行
源代码先被编译为一种中间代码(字节码、IR),而不是直接生成机器码。
中间代码由虚拟机(VM)或运行时环境(Runtime)解释执行,或通过即时编译(JIT)转为机器码执行。
典型代表:Java(字节码 + JVM)、C#(CIL + CLR)、Python(.pyc 文件 + Python 虚拟机)。
即时编译(JIT)与解释器的混合模式
语言运行时(如 JavaScript 引擎、Python 解释器)结合解释器和 JIT 编译器。
初始阶段时,解释器逐行执行代码(快速启动),然后对频繁执行的代码(热点代码)进行 JIT 编译,生成机器码加速后续执行。
典型代表:JavaScript(V8 引擎)、Python(PyPy)、Lua(LuaJIT)。
提前编译(AOT)与中间代码
一些语言支持提前编译为与平台无关的中间代码,再根据不同平台生成最终机器码。
例如 .NET/C# 将 C# 代码编译为机器码,避免依赖 CLR 运行时。
步骤一:开发者将源码编译成中间代码,发给用户。
步骤二:CLR 在运行时执行代码,将中间代码即时编译成机器语言。CLR 还负责内存管理、垃圾回收等运行时资源管理,确保程序高效、安全地运行。
总结
Rust 是静态强类型的编译型语言,不那么灵活,但足够安全。