Document workspace ownership, resource semantics and agent lifecycle
This commit is contained in:
+11
-12
@@ -1,6 +1,6 @@
|
||||
# EX-01 把对话说明改成概念指南
|
||||
|
||||
读者目标:区分用户名与显示名,并判断哪个值用于 namespace key。依据是当前 guide/02-user-identity.md;以下成稿用于说明写作方法。
|
||||
读者目标:区分 workspace handle、显示名与用户身份,并判断哪个值用于 namespace key。依据是当前 guide/02-user-identity.md;以下成稿用于说明写作方法。
|
||||
|
||||
## 原稿
|
||||
|
||||
@@ -10,28 +10,28 @@
|
||||
|
||||
## 写作判断
|
||||
|
||||
先保留已确定的核心:handle 唯一;显示名用于展示;key 使用 handle。将未定义的字符、大小写和改名细节放入准确的边界说明。社交平台类比只用于辅助理解。
|
||||
原稿混合了用户身份与资源定位。按当前主定义改写:workspace handle 唯一;workspace 显示名用于展示;key 使用 workspace handle;用户负责操作和作者身份。将未定义的字符、大小写和改名细节放入准确的边界说明。
|
||||
|
||||
此处适合定义、两个对象的对照和一个 key 例子,不需要编造注册代码或身份认证 API。采用 DOC-001、004、013、015、018。
|
||||
|
||||
## 成稿示范
|
||||
|
||||
### 用户名与显示名
|
||||
### Workspace handle 与显示名
|
||||
|
||||
用户名(handle)用于唯一定位用户及其 namespace。显示名用于展示姓名或昵称,不承担唯一定位职责。
|
||||
Workspace handle 用于唯一定位 workspace 及其 namespace。workspace 显示名用于展示名称,不承担唯一定位职责。用户作为 workspace 成员参与协作,用户身份不充当资源 key 前缀。
|
||||
|
||||
两个用户可以使用相同的显示名“林”,但必须使用不同的用户名。例如,用户名为 alice 和 bob 的两位用户都可以将显示名设为“林”。
|
||||
两个 workspace 可以使用相同的显示名“工作室”,但必须使用不同的 handle。例如 atelier 与 market 都可以将显示名设为“工作室”。
|
||||
|
||||
| key | 定位的用户 | namespace 路径 |
|
||||
| key | 定位的 workspace | namespace 路径 |
|
||||
| --- | --- | --- |
|
||||
| `alice:shop` | alice | shop |
|
||||
| `bob:shop` | bob | shop |
|
||||
| `atelier:shop` | atelier | shop |
|
||||
| `market:shop` | market | shop |
|
||||
|
||||
这两个 key 指向不同的 namespace。查询时使用用户名,不能用相同的显示名替代冒号前的部分。
|
||||
这两个 key 指向不同的 namespace。查询时使用 workspace handle,不能用相同的显示名或某位成员的名字替代冒号前的部分。
|
||||
|
||||
代码归属使用完整 key,除用户名外还需要至少一级 namespace 路径。知道 key 只说明能够标识目标,不等于获得读取或执行权限。
|
||||
资源归属使用完整 key,除 workspace handle 外还需要至少一级 namespace 路径。成员变动不改变资源归属;知道 key 只说明能够标识目标,不等于获得读取或执行权限。
|
||||
|
||||
用户名的字符规则、大小写比较和改名行为尚未定义,参见语言文档中的“规范状态—身份与权限”。
|
||||
workspace handle 的字符规则、大小写比较和改名行为尚未定义,参见语言文档中的“规范状态—Workspace 名称与生命周期”。
|
||||
|
||||
## 为什么这样安排
|
||||
|
||||
@@ -47,4 +47,3 @@
|
||||
- 验证:这是基于当前文本规则的作者推演,没有调用身份系统。
|
||||
|
||||
[对应任务](../tasks/TASK-02.md) · [示例目录](README.md)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
以下是故意包含错误的反例:
|
||||
|
||||
```text
|
||||
use alice.shop.ui::{Column, Text}
|
||||
use atelier.shop.ui::{Column, Text}
|
||||
```
|
||||
|
||||
> 导入后就能直接调用所有组件了。
|
||||
@@ -26,19 +26,19 @@ use alice.shop.ui::{Column, Text}
|
||||
|
||||
use 指定当前代码依赖的 namespace。它引用一个完整 namespace key。
|
||||
|
||||
代码归属:`bob:shop.checkout`。以下是该代码视图中的导入声明:
|
||||
代码归属:`market:shop.checkout`。以下是该代码视图中的导入声明:
|
||||
|
||||
```endorphin
|
||||
use alice:shop.pricing
|
||||
use atelier:shop.pricing
|
||||
```
|
||||
|
||||
| 部分 | 含义 |
|
||||
| --- | --- |
|
||||
| `alice` | 依赖来源的用户名 |
|
||||
| `:` | 用户名与 namespace 路径的分隔符 |
|
||||
| `atelier` | 依赖来源的 workspace handle |
|
||||
| `:` | workspace handle 与 namespace 路径的分隔符 |
|
||||
| `shop.pricing` | namespace 路径,点号分隔层级 |
|
||||
|
||||
该声明引用 alice 的定价 namespace。当前代码仍属于 bob:shop.checkout;引用目标不会改变自身归属。
|
||||
该声明引用 atelier workspace 的定价 namespace。当前代码仍属于 market:shop.checkout;引用目标不会改变自身归属。
|
||||
|
||||
每个 use 引用一个 namespace,不附加类名、函数名或选择性名称列表。引用用于指定依赖来源,不会自动执行其中的函数,也不构成访问授权。
|
||||
|
||||
@@ -46,11 +46,10 @@ use alice:shop.pricing
|
||||
|
||||
## 必须保留的区别
|
||||
|
||||
“完整 namespace 引用”不意味着“所有成员都自动可见”。官方 UI 组件来源尚未定义,也不能因为例子需要显示界面就将 Column 或 Text 放到 alice 的库名下。
|
||||
“完整 namespace 引用”不意味着“所有成员都自动可见”。官方 UI 组件来源尚未定义,也不能因为例子需要显示界面就将 Column 或 Text 放到 atelier 的库名下。
|
||||
|
||||
## 验收
|
||||
|
||||
读者可回答三件事:key 如何分解;当前代码属于谁;导入是否授予访问权。源码形状可由现有检查工具辅助检查,归属、授权和可见性说明需人工核对。
|
||||
|
||||
[对应任务](../tasks/TASK-03.md) · [示例目录](README.md)
|
||||
|
||||
|
||||
@@ -23,22 +23,22 @@ return discountedPrice(amount, 5)
|
||||
|
||||
下面采用本书的函数语法提案,展示成功调用的结果依赖。跨 namespace 引用采用目标函数可见、名称无冲突的条件。
|
||||
|
||||
代码归属:`alice:shop.pricing`。函数声明:
|
||||
代码归属:`atelier:shop.pricing`。函数声明:
|
||||
|
||||
```endorphin
|
||||
function discountedPrice(price: Int, discount: Int): Int {
|
||||
function discountedPrice(price: Number, discount: Number): Number {
|
||||
return price - discount
|
||||
}
|
||||
```
|
||||
|
||||
该函数从 price 中扣除 discount,并返回整数结果。
|
||||
该函数从 price 中扣除 discount,并返回数值结果;Number 沿用第 7 章的统一数值类型名提案。
|
||||
|
||||
代码归属:`bob:shop.checkout`。导入与调用方声明:
|
||||
代码归属:`market:shop.checkout`。导入与调用方声明:
|
||||
|
||||
```endorphin
|
||||
use alice:shop.pricing
|
||||
use atelier:shop.pricing
|
||||
|
||||
function payable(price: Int, discount: Int): Int {
|
||||
function payable(price: Number, discount: Number): Number {
|
||||
let amount = discountedPrice(price, discount)
|
||||
return discountedPrice(amount, 5)
|
||||
}
|
||||
@@ -53,7 +53,7 @@ function payable(price: Int, discount: Int): Int {
|
||||
|
||||
第二次调用使用第一次的结果。因此,在 amount 的成功结果可用前,后续调用不能把它当作已取得的值使用。上述语义在 inflight 中体现;Preflight 检查调用目标、参数和返回类型等可静态判断的约束。
|
||||
|
||||
这里展示成功路径。失败、缺失、未就绪的具体处理语法仍按规范状态记录,不能将它们当作整数 0。仅凭这段数据依赖也不能推出所有函数参数的求值顺序。
|
||||
这里展示成功路径。失败、缺失、未就绪的具体处理语法仍按规范状态记录,不能将它们当作数值 0。仅凭这段数据依赖也不能推出所有函数参数的求值顺序。
|
||||
|
||||
## 反向验证
|
||||
|
||||
@@ -66,4 +66,3 @@ function payable(price: Int, discount: Int): Int {
|
||||
DOC-004、009、010、011、013、015。代码、说明和结果表共同承担上下文与解释;不要求每个项目都单独显示一段“规则检查”。
|
||||
|
||||
[对应任务](../tasks/TASK-04.md) · [示例目录](README.md)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user