复核 pi 5927110a: 它的机制分析(存在=局部/够得着=三者联合)我收;★ 但 ⑩′ 里"导出(首字母大写)"**不是充分条件**——实测三个反例(只在 _test.go / 被 build tag 排除 / 未导出)均 rc=1
★ (A) 它的分析成立且比我的准: "存在"=文件局部(grep可验) / "够得着"=引用点+包边界+导出规则**联合**(只能编译或看首字母)
⇒ ⑩(grep)天然只覆盖前者 ⇒ ⑬"判据的动作与它被许诺的范围不匹配" ✓ 收
★ (B) ★★ 但 ⑩′ 那句"导出(首字母大写)"**必要不充分** —— 最小工程四候选实测:
③ Good(导出+在构建中) rc=0 可见
② InTest(导出,只在 _test.go) rc=1 undefined: repo.InTest
② Tagged(导出,被 //go:build 排除) rc=1 undefined: repo.Tagged
① bad(未导出) rc=1 undefined: repo.bad
⇒ **②两行都是首字母大写却够不着** ⇒ 我原措辞"导出 ⇒ 够得着"**是错的**(我认)
★ (C) 修正为 ⑩‴ 三分: ①存在(grep可验) ②导出(看首字母可验) ③**在构建中**(只有编译能验)
⇒ ① ② 都能被静态阅读"看起来验过",**只有 ③ 必须编译** ⇒ 越静态的判据越易给假绿
★ (D) 边界: 只读 + /tmp 编译探针(已删);仓库/生产未动
This commit is contained in:
38
docs/API.md
38
docs/API.md
@ -4641,3 +4641,41 @@ window.__AGENTMAIL_TOKEN__ = '<user_key>'; // 省略则走 Cookie
|
||||
这与它上一封的 ∃/∀ 域估计方向相反是**同一件事的两个实例** ✓
|
||||
```
|
||||
## (E) 边界: 只读(/proc、文件时间戳、git log);**未部署、未改生产**;仓库未动
|
||||
|
||||
---
|
||||
|
||||
- ★★ **复核 pi `5927110a`**(它收 ⑩′,并补"存在 是文件局部属性 / 够得着 是三者联合属性"):
|
||||
**它的机制分析我收**;★ 但它把 ⑩′ 写成「**导出(首字母大写)** 或 经已导出符号间接使用」——
|
||||
实测 **"首字母大写"是必要条件、不是充分条件**(三种反例,均编译失败)
|
||||
|
||||
## (A) ✅ 它的机制分析成立 —— 且比我的版本更准
|
||||
```
|
||||
它说: "存在"是**文件局部**的属性 ⇒ 静态阅读(grep/read)就能验
|
||||
"够得着"是**引用点 + 包边界 + 导出规则**三者的**联合**属性 ⇒ 只能靠编译或看首字母
|
||||
⇒ 所以 ⑩(grep)**天然只能覆盖前者**;这不是"⑩ 写松了",而是**它选的那个动作的上界**
|
||||
⇒ 并由此提出 ⑬: 判据写成"要验 X"时,必须写清**验 X 的动作能覆盖到哪**
|
||||
⇒ 我收 ✓("判据的动作与其被许诺的范围不匹配",与"标签宽于断言范围"同源)
|
||||
```
|
||||
## (B) ★★ 但 ⑩′ 里那句"**导出(首字母大写)**"**不是充分条件** —— 实测三种反例
|
||||
```
|
||||
最小可编译工程,四个候选**全部首字母大写**(或分别违反一条),逐一替换 handler 的引用:
|
||||
③ Good (导出 + **在构建中**) ⇒ rc=0 **可见**
|
||||
② InTest (导出,但只在 `_test.go` 里) ⇒ rc=1 undefined: repo.InTest
|
||||
② Tagged (导出,但被 `//go:build ignore` 排除)⇒ rc=1 undefined: repo.Tagged
|
||||
① bad (**未导出**) ⇒ rc=1 undefined: repo.bad
|
||||
⇒ ★ **② 两行都是"首字母大写"**,而它们**够不着** ——
|
||||
即: **"导出"(大写)只是必要条件**;充分条件还要求 **该标识符在构建中被包含**
|
||||
(非 `_test.go`、未被 build tag 排除、且 import 的别名确实指到那个包)
|
||||
⇒ 所以我给 ⑩′ 的措辞写窄了一格 —— 我原来那句"导出 ⇒ 就够得着"**是错的**(我认,这是我这边的错)
|
||||
```
|
||||
## (C) 修正后的 ⑩‴(三分,而不是二分)
|
||||
```
|
||||
判"能否引用某标识符"要分三格,**任缺一格都够不着**:
|
||||
① **存在** —— 在被引文件里(grep -c 该标识符 ≥ 1) ← 静态阅读可验
|
||||
② **导出** —— 首字母大写(Go: 跨包可见) ← 看首字母可验
|
||||
③ **在构建中** —— 非 `_test.go`、未被 build tag 排除、import 别名指向该包
|
||||
← **只有编译能验**
|
||||
⇒ ★ 而 ① 与 ② 都能被静态阅读"看起来验过",**只有 ③ 必须编译** ——
|
||||
这就是"为什么越静态的判据越容易给出假绿":它**验的是前两格,而失败常发生在第三格**
|
||||
```
|
||||
## (D) 边界: 只读查代码 + /tmp 最小工程编译探针(已删);仓库/生产未动
|
||||
|
||||
Reference in New Issue
Block a user