📝 docs(tsl): align agent-facing guidance

This commit is contained in:
csh
2026-05-28 19:12:34 +08:00
parent c48354e0cb
commit d8eb418277
63 changed files with 1921 additions and 371 deletions
@@ -14,6 +14,14 @@
回答“普通函数怎么写已经清楚后,外部 DLL、函数指针、多线程这些系统交互能力应该去哪里查”。
## Agent 外部调用/线程判断流程
1. 先判断要声明外部函数、绑定函数指针,还是处理线程相关能力。
2. 外部函数声明只照已验证的调用约定、`external` 和可选 `name` 形态写。
3. DLL 名优先写字面量或已验证类常量,不要拼接表达式。
4. 函数指针包装和线程相关能力只照本页已验证边界写。
5. 没有已验证代码块时不要发明外部调用/线程写法。
## 必须记住的规则
- 当前解释器接受 `function Name(...): Type; stdcall|cdecl; external "dll" [name "symbol"];` 这类外部函数声明。
@@ -24,6 +32,7 @@
- 当前已验证的 DLL 名写法包括字面量字符串和类常量字符串;不要把字符串拼接表达式直接当成稳定写法。
- `MakeInstance(ThisFunction(Func), "cdecl", 0)` 当前可以把 TSL 函数包装成 C 调用约定函数指针。
- `MakeInstance(..., "cdecl", 1)` 当前在 `Win64` 下已经拿到最小线程正例,可以直接交给 `CreateThread`
- 外部库名和调用约定要按目标平台选择;不要把 Windows 的 `kernel32.dll` 示例直接复制到 Linux,或把 Linux 的 `.so` 示例直接复制到 Windows。
- 当前页的线程示例是 Windows 专题,用到了 `kernel32.dll`
## 已验证语法
@@ -46,6 +55,32 @@ end.
- 说明当前解释器接受 `stdcall` + `external "dll" name "symbol"` 这类外部函数声明骨架
- 也说明 TSL 里的函数名可以和 DLL 导出名不同,再通过 `name "ExportName"` 绑定
代码块身份:已验证输出片段
```text
1
```
Linux / POSIX 环境的同类最小骨架:
代码块身份:已验证可执行示例
```tsl
program test;
function getpid(): integer; cdecl; external "libc.so.6";
begin
WriteLn(getpid() > 0);
end.
```
代码块身份:已验证输出片段
```text
1
```
这段只说明 Linux / POSIX 目标下可以用 `.so` 库名声明外部函数;生成代码时仍要先判断用户的目标平台。
当本地函数名和 DLL 导出名一致时,`name` 可以省略:
代码块身份:已验证可执行示例