docs(wiki): Implicit.md §5 同步——Ptr(同型聚合)→同型聚合值允许隐式值拷贝
This commit is contained in:
1 parent
22884b7aa0
commit
bb79d36fd2
1 file changed
+11
-4
+11
-4
@@ -95,11 +95,14 @@
|
||||
|
||||
## 5. 值 ↔ 指针(聚合类型)
|
||||
|
||||
- 非基本类型的 `Foo* → Foo`(指针 → 值)**禁止**,仅两处豁免:
|
||||
1. **构造物化**(`Foo(...)` 直接产出聚合值);
|
||||
2. **值语义槽拷贝**(源是 `x: Foo` 这类「槽自身持有聚合物、`Spec.PtrLevel == 0`」)。
|
||||
- **指向同型聚合的指针 → 同型聚合值**:**允许**,做隐式**值拷贝**(`load`)。
|
||||
覆盖裸类形参(`elem: T`,ABI 即 `T*`)直接赋给同型值字段/变量,以及 `x: T` 这类值语义槽。
|
||||
拷贝后目标独立、不会悬垂 —— 与「传参用指针」的 ABI 选择互不冲突。
|
||||
- 其余 `Foo* → Foo` **禁止**(不同型聚合 / 多级指针),须显式 `*p` / `c.deref(p)` 或显式 cast;
|
||||
唯一另一处豁免是**构造物化**(`Foo(...)` 直接产出聚合值)。
|
||||
- 聚合值 → 指针:在栈上溢出临时(VPC 不按值传聚合)。
|
||||
- **裸类形参 ABI = `T*`**:VPC 里对象本身即指针,`def f(node: T)` 的形参按对象地址传入。
|
||||
- **裸类形参 ABI = `T*`**:VPC 里对象本身即指针,`def f(node: T)` 的形参按对象地址传入;
|
||||
但赋给**同型值目标**时按上面的值拷贝处理(交出的是拷贝,不是地址)。
|
||||
|
||||
---
|
||||
|
||||
@@ -137,3 +140,7 @@
|
||||
→ `malloc` 失败 → zlib `compress` 返回 None。
|
||||
- 现在:负值 → `sext`,非负 → `zext`(引用形态无关);同时修掉 `pyzlib.Z_DEFAULT_COMPRESSION`
|
||||
(`-1`)被 `zext` 成 `255` 的问题。
|
||||
- **2026-10-12:`Ptr(同型聚合) → 同型聚合值` 允许隐式值拷贝**(见 §5)。
|
||||
- 动机:裸类形参(`elem: T`)的 ABI 已定为 `T*`,但 `self.field = elem`(同型值字段)应是**值拷贝**;
|
||||
此前要求显式解引用会误报。VPC 里裸类形参与 `p: T*` 的槽同构,故判据落在「pointee 与目标同型」
|
||||
上;拷贝后目标独立,不会悬垂。
|
||||
Reference in new issue
Block a user