docs(wiki): 核心设计决策措辞改为「近似 CPython」,去掉 t/c 模块讲解,改为说明 int/uint/int64 的 LLVM 定宽语义

This commit is contained in:
TermiNexus committed 2026-10-02 00:30:42 +08:00
1 parent 238cb2756c
commit a53e45dc9f
1 file changed
+2 -2
+2 -2
View File
@@ -16,7 +16,7 @@
### 核心设计决策
1. **Python 语法,LLVM 语义**:源文件是完全合法的 `Python` 语法,但通过 `t` 模块的类型注解系统赋予完全不同的语义 —— `int`(=`t.CInt`)不是 `Python` 的 `int`,而是 `LLVM` 的 `i32`
1. **Python 语法,LLVM 语义**:源文件语法**近似 CPython**(并**非**完全合法,差异见下文「与 CPython 语法的关系」),但注解中的 `int` / `uint` / `int64` 等类型名被赋予与 `Python` 完全不同的意义——它们不表示 Python 的动态整数,而是直接对应 `LLVM` 的定宽类型(如 `int` = `i32`、`int64` = `i64`)
2. **类型注解即编译指令**:Viper 的类型注解不是可选的提示,而是编译器生成 `LLVM IR` 的决定性依据。`x: int` 生成 `i32`,`x: int*` 生成 `i32*`,但无注解时会自动推导,详见下文。
3. **两阶段编译**:先从源文件提取声明接口(`.vpi` + `.stub.ll`),再使用声明接口翻译源文件为含代码的 `.ll`。这是 `Viper` 区别于简单"`Python` 转 `C`"工具的关键架构
4. **`SHA1` 命名空间**:每个源文件按内容 `SHA1` 哈希命名,非导出函数和结构体自动加上 `SHA1` 前缀,从根本上消除跨模块的符号冲突
@@ -26,7 +26,7 @@
| 特性 | `Python` | `Viper` |
|------|--------|-------|
| 类型系统 | 动态类型 | 静态类型(通过 `t` 模块注解,编译时确定) |
| 类型系统 | 动态类型 | 静态类型(由类型注解在编译时确定) |
| 内存管理 | `GC` 自动回收 | 手动管理,无 `GC`,无运行时 |
| 运行时 | 解释执行 + 字节码 | 编译为原生机器码(通过 `LLVM`) |
| 对象模型 | 万物皆对象 | 类内定义方法即启用 OOP(自动判定 `IsOOP`);`virtual class` 为多态(vtable),`novirtual class` 为非多态继承(C++ 风格,零运行时开销);普通 `class`(无方法)仅为结构体布局。`@t.Object` 默认不写、避免使用 |