docs(wiki): 修复失效内部链接(01-overview.md 改为 README.MD)并补齐小节锚点
This commit is contained in:
1 parent
472ece93f2
commit
f97bb24cd8
7 files changed
+10
-6
No files matched your search
+1
-1
@@ -716,7 +716,7 @@ data: uint8* = uint8*(s)
|
||||
|
||||
## 宏定义常量
|
||||
|
||||
使用 `t.CDefine` 定义编译时常量(新写法用软关键字 `define X = v` / `define X: T = v`)。`t.CDefine` 不是数据类型,而是编译时元指令——标记为 `t.CDefine` 的常量在 LLVM IR 中不生成任何全局变量,而是在引用处直接内联展开。详见 [01-overview.md 中 t.CDefine 深度解析](01-overview.md#tcdefine-深度解析)。
|
||||
使用 `t.CDefine` 定义编译时常量(新写法用软关键字 `define X = v` / `define X: T = v`)。`t.CDefine` 不是数据类型,而是编译时元指令——标记为 `t.CDefine` 的常量在 LLVM IR 中不生成任何全局变量,而是在引用处直接内联展开。详见 [README.MD 中 t.CDefine 深度解析](README.MD#tcdefine-深度解析)。
|
||||
|
||||
```python
|
||||
define MAX_SIZE = 1024 # 推荐:等价 MAX_SIZE: t.CDefine = 1024
|
||||
|
||||
+1
-1
@@ -186,7 +186,7 @@ define PAGE_SIZE: uint32 = 4096 # 带显式底层类型
|
||||
MAX_SIZE2: t.CDefine = 1024 # 等价旧写法
|
||||
```
|
||||
|
||||
`t.CDefine` 不是数据类型,而是编译时元指令——常量在 LLVM IR 中不生成全局变量,而是在引用处直接内联展开。详见 [01-overview.md 中 t.CDefine 深度解析](01-overview.md#tcdefine-深度解析)。
|
||||
`t.CDefine` 不是数据类型,而是编译时元指令——常量在 LLVM IR 中不生成全局变量,而是在引用处直接内联展开。详见 [README.MD 中 t.CDefine 深度解析](README.MD#tcdefine-深度解析)。
|
||||
|
||||
> `define` 有两种形态:带 `=`(`define X: T = Y` / `define X = Y`)是**编译期常量**;带 `(`(`define F(...) -> T`)是**宏函数**。详见 [04-functions.md 宏函数](04-functions.md#宏函数-define)。
|
||||
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ void print_msg(const char* msg) {
|
||||
|
||||
### 导出函数 `export`
|
||||
|
||||
`export` 控制符号可见性——不加 SHA1 前缀,裸名导出、全局可见。详见 [01-overview.md 中 t.CExport 深度解析](01-overview.md#tcexport-深度解析)。
|
||||
`export` 控制符号可见性——不加 SHA1 前缀,裸名导出、全局可见。详见 [README.MD 中 export 深度解析](README.MD#tcexport-深度解析)。
|
||||
|
||||
```python
|
||||
export def _start() -> int:
|
||||
|
||||
+1
-1
@@ -223,7 +223,7 @@ Viper 的 `import` 是编译时操作,不涉及运行时模块加载。完整
|
||||
|
||||
### SHA1 命名空间与导入
|
||||
|
||||
每个模块的函数和结构体在 LLVM IR 中自动加上 SHA1 前缀,消除跨模块符号冲突。SHA1 取文件内容 `sha1` 摘要的**前 8 字节**(16 个十六进制字符)。豁免(保留裸名)的符号:`t.CExport` / `t.CExtern` / `t.State` 标记的函数、以及 `main`。详见 [01-overview.md 中 SHA1 命名空间机制](01-overview.md#sha1-命名空间机制)。
|
||||
每个模块的函数和结构体在 LLVM IR 中自动加上 SHA1 前缀,消除跨模块符号冲突。SHA1 取文件内容 `sha1` 摘要的**前 8 字节**(16 个十六进制字符)。豁免(保留裸名)的符号:`t.CExport` / `t.CExtern` / `t.State` 标记的函数、以及 `main`。详见 [README.MD 中 SHA1 命名空间机制](README.MD#sha1-命名空间机制)。
|
||||
|
||||
### 跨模块约束
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ print("Hello, World!")
|
||||
print(x, y) # 多参数输出
|
||||
```
|
||||
|
||||
`print` 目前是**编译器内建**:类型感知格式化(按实参静态类型选格式)+ 默认换行,最终经 `printf` 族输出;**后续计划下降到标准库**用 Viper 实现。详见 [01-overview.md 的「print 是编译器内建」](01-overview.md#print-是编译器内建)。
|
||||
`print` 目前是**编译器内建**:类型感知格式化(按实参静态类型选格式)+ 默认换行,最终经 `printf` 族输出;**后续计划下降到标准库**用 Viper 实现。详见 [README.MD 的「print 是编译器内建」](README.MD#print-是编译器内建)。
|
||||
|
||||
### len
|
||||
|
||||
|
||||
+1
-1
@@ -293,4 +293,4 @@ SHA1 同时服务于命名空间隔离和增量编译:
|
||||
- **命名空间**:未 `export` 的函数(内部非 `t.CExport`)和结构体使用 SHA1 前缀,消除符号冲突
|
||||
- **增量编译**:SHA1 不变则缓存命中,SHA1 变化则重新生成
|
||||
|
||||
详见 [01-overview.md 中 SHA1 命名空间机制](01-overview.md#sha1-命名空间机制)。
|
||||
详见 [README.MD 中 SHA1 命名空间机制](README.MD#sha1-命名空间机制)。
|
||||
@@ -232,6 +232,8 @@ SHA1 同时服务于增量编译:
|
||||
|
||||
理论上,如果一个未经变动的模块的依赖路径上存在变动的模块,暂时的方法是将其简单做 SHA1 替换,暨将旧 SHA1 替换为新 SHA1,但不适用于签名改变的情况,不过签名改变这个未经变动的模块必然也需要改变,但是由于宏展开的存在,不能完全保证不会发生错误情况。且依赖路径的 SHA1 替换成功性未经完整测试,可能出现未定义行为。
|
||||
|
||||
<a id="tcdefine-深度解析"></a>
|
||||
|
||||
## 编译期常量与宏(`define` / `t.CDefine`)深度解析
|
||||
|
||||
`t.CDefine` 是编译时元指令(**推荐用软关键字 `define` 书写**),控制编译器的代码生成行为——它不是真实的数据类型。
|
||||
@@ -287,6 +289,8 @@ define DATA_SEG: uint16 = 0x10
|
||||
|
||||
> 旧写法 `CODE_SEG: t.CDefine | t.CUInt16T = 0x08` 等价,手写可用但不推荐。
|
||||
|
||||
<a id="tcexport-深度解析"></a>
|
||||
|
||||
## `export` 深度解析(内部标记 `t.CExport`)
|
||||
|
||||
`export` 软关键字控制函数的符号可见性,是 SHA1 命名空间的豁免机制(内部改写为返回注解中的 `t.CExport` 标记)。
|
||||
|
||||
Reference in new issue
Block a user