CS language
1. 静态类型 vs. 动态类型¶
静态类型(Statically Typed)¶
- 定义:变量、函数参数、返回值等的数据类型在编译时就确定,不能随意更改。
- 特点:
- 编译时会检查类型错误,避免运行时崩溃。
- 性能更高(编译器可以优化)。
- 代码更严谨,适合大型项目。
- 例子:
- C/C++/Java/C#/Go/Rust
int num = 10; // num 只能是整数,不能赋值为字符串 num = "hello"; // 编译报错!
动态类型(Dynamically Typed)¶
- 定义:变量类型在运行时才确定,可以随时改变。
- 特点:
- 更灵活,适合快速开发。
- 运行时可能因类型错误崩溃(如
"1" + 2
可能出错)。 - 性能稍低(需要运行时检查)。
- 例子:
- Python/JavaScript/Ruby/PHP/Lua
num = 10 # num 是整数 num = "hello" # 现在 num 变成字符串,不会报错
对比总结¶
特性 | 静态类型 | 动态类型 |
---|---|---|
类型检查 | 编译时检查 | 运行时检查 |
性能 | 更高(编译器优化) | 稍低(运行时解析) |
灵活性 | 低(类型固定) | 高(随时改变类型) |
代表语言 | C/C++/Java/Go/Rust | Python/JS/Ruby/PHP |
2. 编译型 vs. 解释型¶
编译型语言(Compiled Languages)¶
- 定义:代码先被编译器转换成机器码(二进制文件),再直接由CPU执行。
- 特点:
- 运行速度快(已经是机器码)。
- 需要针对不同平台(Windows/Linux/macOS)编译。
- 调试较麻烦(错误在编译时发现)。
- 例子:
- C/C++/Go/Rust
源代码(.c) → 编译器(gcc) → 可执行文件(.exe) → CPU执行
解释型语言(Interpreted Languages)¶
- 定义:代码由解释器逐行翻译并执行,不生成独立可执行文件。
- 特点:
- 跨平台性好(只要有解释器就能运行)。
- 运行速度较慢(每次都要解析)。
- 调试方便(错误直接显示)。
- 例子:
- Python/JavaScript/PHP/Ruby
源代码(.py) → 解释器(Python) → 直接执行(不生成.exe)
混合型(JIT 编译)¶
- 定义:结合编译和解释,先解释执行,再动态编译优化(如Java/C#/JS V8引擎)。
- 例子:
- Java(编译成字节码,JVM解释执行)
- JavaScript(V8引擎先解释,再JIT优化)
对比总结¶
特性 | 编译型 | 解释型 | JIT(混合型) |
---|---|---|---|
执行方式 | 直接运行机器码 | 逐行解释执行 | 先解释,后编译优化 |
速度 | 最快 | 较慢 | 中等(优化后接近编译型) |
跨平台 | 需重新编译 | 直接运行(依赖解释器) | 依赖虚拟机(如JVM) |
代表语言 | C/C++/Go/Rust | Python/JS/PHP | Java/C#/JavaScript |
3. 脚本语言(Scripting Languages)¶
定义¶
- 脚本语言是解释型语言的一种,通常用于自动化任务或控制其他程序。
- 特点:
- 不需要编译,直接运行。
- 语法简单,适合快速开发。
- 通常嵌入到其他系统中(如JS在浏览器,Lua在游戏引擎)。
常见脚本语言¶
语言 | 主要用途 |
---|---|
JavaScript | 网页交互(浏览器)、后端(Node.js) |
Python | 数据分析、自动化脚本、Web后端 |
PHP | 传统Web开发(WordPress) |
Lua | 游戏脚本(魔兽世界)、嵌入式扩展 |
Ruby | Web开发(Ruby on Rails) |
脚本语言 vs. 系统编程语言¶
特性 | 脚本语言(Python/JS) | 系统语言(C++/Rust) |
---|---|---|
执行方式 | 解释执行 | 编译成机器码 |
性能 | 较慢 | 极快 |
用途 | 自动化、Web、数据分析 | 操作系统、游戏引擎、高频交易 |
总结¶
- 静态类型 vs. 动态类型
- 静态:类型固定,编译检查(C++/Java)。
-
动态:类型可变,灵活但易出错(Python/JS)。
-
编译型 vs. 解释型
- 编译型:直接运行机器码(C++/Go)。
- 解释型:逐行执行(Python/JS)。
-
JIT:混合优化(Java/JS V8)。
-
脚本语言
- 解释型,用于自动化、Web(Python/JS/PHP)。