From a53e45dc9fff96a7ea23c1f26bd8d3029cacbbd9 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 2 Oct 2026 00:30:42 +0800 Subject: [PATCH] =?UTF-8?q?docs(wiki):=20=E6=A0=B8=E5=BF=83=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=86=B3=E7=AD=96=E6=8E=AA=E8=BE=9E=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E3=80=8C=E8=BF=91=E4=BC=BC=20CPython=E3=80=8D=EF=BC=8C?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=20t/c=20=E6=A8=A1=E5=9D=97=E8=AE=B2=E8=A7=A3?= =?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=B8=BA=E8=AF=B4=E6=98=8E=20int/uint/int64?= =?UTF-8?q?=20=E7=9A=84=20LLVM=20=E5=AE=9A=E5=AE=BD=E8=AF=AD=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.MD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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` 默认不写、避免使用 |