diff --git a/README.MD b/README.MD index fa71ed3..02828a0 100644 --- a/README.MD +++ b/README.MD @@ -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` 默认不写、避免使用 |