From 4389969dd05d4666fc1c7439b39cf832622d2c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A7=80?= Date: Mon, 20 Jul 2026 18:54:16 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9A=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E8=A8=80=E5=BA=8F=201.1.20=20=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E4=B8=8E=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 8 ++-- content/docs/design/roadmap.mdx | 16 +++++++- .../docs/getting-started/first-program.mdx | 2 +- .../docs/getting-started/first-project.mdx | 2 +- content/docs/getting-started/installation.mdx | 13 ++++++- content/docs/guides/embedding.mdx | 6 ++- content/docs/index.mdx | 2 +- content/docs/language/binary-data.mdx | 6 ++- content/docs/language/errors.mdx | 4 +- content/docs/language/index.mdx | 2 +- content/docs/language/modules.mdx | 15 ++++++- content/docs/projects/build-release.mdx | 4 +- content/docs/projects/dependencies.mdx | 4 ++ content/docs/projects/manifest.mdx | 1 + content/docs/projects/permissions.mdx | 9 +++-- content/docs/reference/cli.mdx | 19 +++++++-- content/docs/reference/error-codes.mdx | 2 +- content/docs/reference/formats.mdx | 4 +- content/docs/reference/index.mdx | 4 +- content/docs/reference/migrations/1.1.10.mdx | 19 +++++++++ content/docs/reference/migrations/1.1.11.mdx | 10 +++++ content/docs/reference/migrations/1.1.12.mdx | 12 ++++++ content/docs/reference/migrations/1.1.13.mdx | 27 +++++++++++++ content/docs/reference/migrations/1.1.14.mdx | 13 +++++++ content/docs/reference/migrations/1.1.15.mdx | 19 +++++++++ content/docs/reference/migrations/1.1.16.mdx | 22 +++++++++++ content/docs/reference/migrations/1.1.17.mdx | 23 +++++++++++ content/docs/reference/migrations/1.1.18.mdx | 36 +++++++++++++++++ content/docs/reference/migrations/1.1.19.mdx | 19 +++++++++ content/docs/reference/migrations/1.1.20.mdx | 39 +++++++++++++++++++ content/docs/reference/migrations/1.1.9.mdx | 19 +++++++++ content/docs/reference/migrations/index.mdx | 16 +++++++- content/docs/reference/migrations/meta.json | 19 ++++++++- content/docs/reference/permissions.mdx | 5 ++- content/docs/reference/project-format.mdx | 5 ++- content/docs/standard-library/index.mdx | 8 ++-- content/docs/standard-library/meta.json | 2 +- content/docs/tooling/building-apps.mdx | 6 +-- content/docs/tooling/native-extensions.mdx | 7 ++-- content/docs/tooling/source-build.mdx | 4 +- content/docs/tooling/vscode.mdx | 2 +- package-lock.json | 4 +- package.json | 2 +- scripts/check-content.mjs | 13 ++++++- 44 files changed, 419 insertions(+), 55 deletions(-) create mode 100644 content/docs/reference/migrations/1.1.10.mdx create mode 100644 content/docs/reference/migrations/1.1.11.mdx create mode 100644 content/docs/reference/migrations/1.1.12.mdx create mode 100644 content/docs/reference/migrations/1.1.13.mdx create mode 100644 content/docs/reference/migrations/1.1.14.mdx create mode 100644 content/docs/reference/migrations/1.1.15.mdx create mode 100644 content/docs/reference/migrations/1.1.16.mdx create mode 100644 content/docs/reference/migrations/1.1.17.mdx create mode 100644 content/docs/reference/migrations/1.1.18.mdx create mode 100644 content/docs/reference/migrations/1.1.19.mdx create mode 100644 content/docs/reference/migrations/1.1.20.mdx create mode 100644 content/docs/reference/migrations/1.1.9.mdx diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a45e765..92db243 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,11 +27,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 - - name: 检出言序 1.1.8 + - name: 检出言序 1.1.20 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: repository: YanXuLang/yanxu - ref: v1.1.8 + ref: v1.1.20 path: target/yanxu-core - name: 构建言序 run: cargo build --manifest-path target/yanxu-core/Cargo.toml --locked --bin yanxu @@ -71,11 +71,11 @@ jobs: sudo apt-get -o Acquire::Retries=5 install -y \ libfontconfig1 libwayland-client0 libxkbcommon0 libxkbcommon-x11-0 \ libx11-6 xvfb - - name: 检出言序 1.1.8 + - name: 检出言序 1.1.20 uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: repository: YanXuLang/yanxu - ref: v1.1.8 + ref: v1.1.20 path: target/yanxu-core - name: 构建言序并锁定言界 run: | diff --git a/content/docs/design/roadmap.mdx b/content/docs/design/roadmap.mdx index 500a0ce..6e70193 100644 --- a/content/docs/design/roadmap.mdx +++ b/content/docs/design/roadmap.mdx @@ -1,6 +1,6 @@ --- title: 长期路线图 -description: 言序从 0.3 数据与诊断阶段到 1.0 稳定语言的演进边界。 +description: 言序从早期语义建设到 1.1.20 稳定工程边界及 2.0 前瞻。 --- 本路线以“先稳定语义,再优化执行”为原则。版本号代表语言能力的稳定层级,而不是单纯的功能数量。 @@ -113,7 +113,7 @@ description: 言序从 0.3 数据与诊断阶段到 1.0 稳定语言的演进边 1.0 已发布源代码兼容策略、稳定模块/包/锁/字节码与报告格式 1、Rust/C/WASI 嵌入边界、完整工具链,以及“诗笺台”“账册分析”两个中等规模参考项目。1.0 之后新语法必须经过 YXP 提案、原型、兼容性与工具链影响评审。 -## 1.1:标准库、对象、生产 I/O 与工程化(当前版本 `1.1.8`) +## 1.1:标准库、对象、生产 I/O 与工程化(当前版本 `1.1.20`) 1.1 的向后兼容扩建已经完成:`Base64`处理标准与 URL 安全 UTF-8 编解码,`正则`提供线性时间 Unicode 匹配,`URL`负责纯地址解析与相对合并,`日期`提供确定性的 ISO 公历运算。四个模块不申请宿主权限,并已同步双运行时、静态类型、机器 API 清单、兼容语料、示例、文档和 VS Code,标准模块总数由 17 个增至 21 个。 @@ -132,6 +132,18 @@ description: 言序从 0.3 数据与诊断阶段到 1.0 稳定语言的演进边 1.1.8 保持上述全部格式与接口兼容,为 Windows x86_64/ARM64 官方运行时保留 8 MiB 所有者线程栈,并以 PE32+ 回归和 Release 制品检查覆盖原生 GUI 回调中的言序方法嵌套。 +1.1.9 为源码、VM、包入口与 YXB 增加统一执行步数入口,并让 GUI、计时器和原生扩展的每个宿主回调独立计量。1.1.10 把 HTTP 4xx/5xx 恢复为可检查状态与正文的普通响应,并把证书验证失败稳定归类为`NET_TLS`。1.1.11 与 1.1.12 分别修复 Windows 锁定依赖路径和 YXB 大整数常量精确往返。 + +1.1.13 建立模块限定类型、跨模块继承/协议和公开模块重导出;字节码升级到格式 2,模块 API 清单升级到 v2,旧字节码须从源码重建。1.1.14–1.1.16 校准 HTTP、套接字与字节值预算,最终把单个字节值与 HTTP 宿主硬上限统一为 16 MiB,同时保持 HTTP 默认 4 MiB、套接字单次读取 4 MiB。 + +1.1.15 新增独立本地网络能力,并明确`*`不是敏感地址授权。1.1.17 允许以最窄 IPv4/IPv6 CIDR 授权 VPN fake-IP 等网段,把`进程.执行`最长超时扩展到 24 小时,并修复嵌套宿主事件泵。 + +1.1.18 与 1.1.19 的标签没有形成稳定 Release;相关工作最终由 1.1.20 交付。稳定版把路径、Git 与注册表依赖发布为内容寻址的不可变 generation,统一包元数据、源码、目录遍历、归档和原生库装载边界,并加入覆盖率、Miri、Sanitizer、八类模糊测试、逐目标 SBOM 和构建来源证明。解析器固定 32 层结构上限;格式化器保留单元素元组的消歧逗号。公开清单、锁、YXB、字节码 2、ABI v1/v2 和工程协议版本均保持不变。 + +## 1.2–2.0:后续方向 + +后续版本优先推进参数化类型、稳定诊断、项目级检查、包供应链、可测量性能与编辑器成熟度。真正并发、Edition 2 或其他破坏性变化必须经过独立 YXP、兼容窗口和迁移工具,不把实验能力写成当前承诺。工作区总路线以[长期规划仓库文档](https://github.com/YanXuLang/yanxu)与正式 YXP 为准。 + ## 跨版本工程要求 每个里程碑都必须同时具备: diff --git a/content/docs/getting-started/first-program.mdx b/content/docs/getting-started/first-program.mdx index 02a8c21..3426add 100644 --- a/content/docs/getting-started/first-program.mdx +++ b/content/docs/getting-started/first-program.mdx @@ -32,4 +32,4 @@ yanxu 初见.yx yanxu fmt --write 初见.yx ``` -本页程序由 CI 使用言序 1.1.8 实际检查、格式化和执行。下一步把单一文卷扩展成[第一个项目](/getting-started/first-project/)。 +本页程序由 CI 使用言序 1.1.20 实际检查、格式化和执行。下一步把单一文卷扩展成[第一个项目](/getting-started/first-project/)。 diff --git a/content/docs/getting-started/first-project.mdx b/content/docs/getting-started/first-project.mdx index e48610e..0d92481 100644 --- a/content/docs/getting-started/first-project.mdx +++ b/content/docs/getting-started/first-project.mdx @@ -40,4 +40,4 @@ yanbao run `法`声明有明确参数与归值类型的函数;`定`创建不可重新绑定的名称;`逐…于…`按顺序迭代列。源码在语言层说明意图,项目清单和锁图在工程层固定入口、依赖与权限。 -本页程序同样由 CI 使用言序 1.1.8 检查、格式化和执行。接下来建立[日常工作流](/getting-started/daily-workflow/)。 +本页程序同样由 CI 使用言序 1.1.20 检查、格式化和执行。接下来建立[日常工作流](/getting-started/daily-workflow/)。 diff --git a/content/docs/getting-started/installation.mdx b/content/docs/getting-started/installation.mdx index e59ed5e..70c4c9e 100644 --- a/content/docs/getting-started/installation.mdx +++ b/content/docs/getting-started/installation.mdx @@ -1,6 +1,6 @@ --- title: 安装 -description: 在 Windows、macOS 或 Linux 上安装并验证言序 1.1.8 与言包 0.5.0。 +description: 在 Windows、macOS 或 Linux 上安装并验证言序 1.1.20 与言包 0.6.1。 --- ## macOS 与 Linux @@ -29,7 +29,16 @@ yanbao --version yanbao doctor ``` -稳定基线应分别报告言序 1.1.8 与言包 0.5.0。言包复用 `PATH` 中的言序运行时,不安装第二份核心,也不要求 Rust。 +稳定基线应分别报告言序 1.1.20 与言包 0.6.1。言包复用 `PATH` 中的言序运行时,不安装第二份核心,也不要求 Rust。言包普通命令最低要求言序 1.1.17;完整依赖安全审计需要 1.1.20 提供的十二项审计能力声明。 + +需要复现指定版本时,可以固定安装: + +```sh +curl -fsSL https://get.yanxu.dev | YANXU_VERSION=1.1.20 sh +curl -fsSL https://get.yanxu.dev/yanbao | YANBAO_VERSION=0.6.1 sh +``` + +Windows PowerShell 分别设置`$env:YANXU_VERSION = "1.1.20"`或`$env:YANBAO_VERSION = "0.6.1"`后,再运行对应安装器。不要固定到 1.1.18 或 1.1.19;这两个标签只保留追溯快照,没有稳定 Release。 若命令不存在,先确认安装器提示的目录已经加入 `PATH`;若版本较旧,重新运行对应安装器。只在参与语言实现或安装器不支持当前环境时,改用[从源码构建](/tooling/source-build/)。 diff --git a/content/docs/guides/embedding.mdx b/content/docs/guides/embedding.mdx index b769665..f1fa724 100644 --- a/content/docs/guides/embedding.mdx +++ b/content/docs/guides/embedding.mdx @@ -18,7 +18,7 @@ assert_eq!(result.output, ["42"]); 宿主可设置`config.arguments`,由程序通过`环境.参数()`读取。返回值为`字节串`时,`Execution.value`仍是无泄露的长度摘要,原始内容仅出现在`value_bytes: Option>`。 -默认配置使用字节码 VM、静态检查和无宿主能力沙箱。可信宿主可用`PermissionSet`逐项开放文件根目录、网络外连主机、TCP 监听地址、UDP 绑定地址或环境变量;`allow_process`开放子进程能力。`EngineConfig::unrestricted`必须由宿主显式选择。 +默认配置使用字节码 VM、静态检查和无宿主能力沙箱。可信宿主可用`PermissionSet`逐项开放文件根目录、网络外连主机或 CIDR、显式本地网络、TCP 监听地址、UDP 绑定地址或环境变量;`allow_process`开放子进程能力。`EngineConfig::unrestricted`必须由宿主显式选择。 运行 YXB 时,归档权限是应用的申请,不是授权。`PermissionSet::intersect`把申请与宿主配置合并;应用无法超过宿主上限,执行结束后也会恢复原宿主权限。1.1.7 新增的 GUI、剪贴板、文件对话框、通知、托盘、外部地址和全局快捷键也分别相交。沙箱宿主即使载入声明了全权限且重新计算过校验和的 YXB,仍保持沙箱。 @@ -31,6 +31,7 @@ let mut config = EngineConfig::sandboxed(Backend::Bytecode); config.permissions = PermissionSet::sandboxed() .allow_file("./data") .allow_network("api.example.com") + .allow_local_network() .allow_tcp_listen("127.0.0.1") .allow_udp_bind("127.0.0.1") .allow_environment("YANXU_PROFILE"); @@ -45,13 +46,14 @@ config.budget = yanxu::budget::ExecutionBudget::new(200_000, 128, 20_000); [权限] 文件 = ["data", "src"] 网络 = ["api.example.com"] +本地网络 = false TCP监听 = ["127.0.0.1"] UDP绑定 = ["127.0.0.1"] 环境 = ["YANXU_PROFILE"] 进程 = false ``` -`yanxu 包 运行 [路径] [-- 参数...]`按清单权限执行入口。为兼容 0.7 及更早脚本,直接执行`yanxu 文卷.yx`仍是显式不受限模式;运行来源不可信的程序时应使用包运行或嵌入沙箱。模块文件、文件标准库、网络与绑定能力、环境变量在树解释器与 VM 中执行相同权限判定。DNS 后的回环、私网和链路本地目标必须额外以真实 IP 精确授权。 +`yanxu 包 运行 [路径] [-- 参数...]`按清单权限执行入口。为兼容 0.7 及更早脚本,直接执行`yanxu 文卷.yx`仍是显式不受限模式;运行来源不可信的程序时应使用包运行或嵌入沙箱。模块文件、文件标准库、网络与绑定能力、环境变量在树解释器与 VM 中执行相同权限判定。DNS 后的回环、私网、链路本地和 CGNAT 目标必须由应用与宿主同时通过精确 IP 或显式本地网络能力授权;其他敏感网段使用最窄 CIDR。 ## C ABI diff --git a/content/docs/index.mdx b/content/docs/index.mdx index 4644972..6ba5714 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -6,7 +6,7 @@ description: 从第一行现代中文程序,到具有清晰模块、依赖与 言序是一门由 Rust 实现的现代中文编程语言。中文关键字、中文标识符与全角标点直接进入语法;类型、模块、结构化错误、树解释器、字节码 VM 和工程工具共同约束程序边界。 - 本站对应言序核心 1.1.8、言包 0.5.0、言据 1.1.2 与 VS Code 扩展 1.4.0。页面会区分语言核心、标准库、官方工具和独立生态包,不把规划中的能力写成现状。 + 本站对应言序核心 1.1.20、言包 0.6.1、言据 1.2.0 与 VS Code 扩展 1.4.0。1.1.18 与 1.1.19 没有形成稳定 Release;从 1.1.17 应直接升级到 1.1.20。页面会区分语言核心、标准库、官方工具和独立生态包,不把规划中的能力写成现状。 ## 第一次使用 diff --git a/content/docs/language/binary-data.mdx b/content/docs/language/binary-data.mdx index e10653f..01b630c 100644 --- a/content/docs/language/binary-data.mdx +++ b/content/docs/language/binary-data.mdx @@ -3,7 +3,7 @@ title: 字节串与二进制 I/O description: 用不可变字节串处理图片、字体、压缩内容和网络协议帧。 --- -`字节串`保存任意二进制,不要求 UTF-8。它不可变、按内容相等,显示为`<字节串 N 字节>`而不泄露内容;单值硬上限为 4 MiB。1.1.4 不新增字节字面量,统一通过`标准:字节`构造。 +`字节串`保存任意二进制,不要求 UTF-8。它不可变、按内容相等,显示为`<字节串 N 字节>`而不泄露内容;1.1.16 起单值硬上限为 16 MiB。语言不提供字节字面量,统一通过`标准:字节`构造。 ```yanxu 引「标准:字节」为 字节; @@ -24,6 +24,8 @@ description: 用不可变字节串处理图片、字体、压缩内容和网络 `网络.请求字节(方法,地址,首部,正文,超时毫秒,最大字节)`按实际字节数发送和限制响应;返回典的`正文`为字节串。调用方可设置业务首部,但不能覆盖`Host`、`Content-Length`、`Transfer-Encoding`或逐跳首部。 +HTTP 默认累计响应预算仍为 4 MiB;显式`最大字节`与 16 MiB 宿主硬上限取较小者。精确等于有效预算的正文可以成功,超限以`NET_LIMIT`完整失败,不会返回截断成功值。套接字单次接收独立保持 4 MiB 上限。 + ## 安全原语 - `随机.安全字节(长度)`使用操作系统 CSPRNG,单次上限 1 MiB。 @@ -31,4 +33,4 @@ description: 用不可变字节串处理图片、字体、压缩内容和网络 - `哈希.恒时相等(左,右)`用于验证 Cookie、Session、CSRF 和 API Token 签名。 - `日期.HTTP日期/解析HTTP日期`读写 IMF-fixdate;`环境.参数`返回`--`后的程序参数。 -这些能力只是上层网络应用的通用底座。1.1.4 不提供 HTML、HTTP 服务端、Web 框架、异步 I/O、服务端 TLS、HTTP/2/3 或 WebSocket。 +这些能力只是上层网络应用的通用底座。语言核心不提供 HTML、HTTP 服务端、Web 框架、异步 I/O、服务端 TLS、HTTP/2/3 或 WebSocket;相关能力由独立生态包演进。 diff --git a/content/docs/language/errors.mdx b/content/docs/language/errors.mdx index e5f112e..73008c6 100644 --- a/content/docs/language/errors.mdx +++ b/content/docs/language/errors.mdx @@ -28,7 +28,7 @@ description: 使用试、救与抛处理结构化运行错误并保留调用踪 | `NET_TIMEOUT` | 解析、连接、TLS、发送或读取超过全程预算 | | `NET_WRITE` / `NET_READ` | 请求写入或响应读取失败 | | `NET_LIMIT` | 响应超过大小上限 | -| `NET_PROTOCOL` / `NET_STATUS` | HTTP 协议/重定向失败或非成功状态 | +| `NET_PROTOCOL` / `NET_STATUS` | HTTP 协议、重定向或传输层未形成可用响应;普通 4xx/5xx 不是错误 | | `NET_UTF8` | 响应正文不是 UTF-8 文字 | 请按`.代码`分支,不要解析`.消息`。重新抛出已有误会完整保留代码、类别、位置和踪迹。 @@ -54,7 +54,7 @@ DNS 由操作系统解析器完成,但超时从调用开始计时;DNS、多 ## 字节错误 -字节错误类别为`字节`。`BYTES_UTF8`表示严格 UTF-8 解码失败,`BYTES_LIMIT`表示字节串超过 4 MiB,`BYTES_RANGE/BYTES_VALUE/BYTES_TYPE`表示索引、数列项或参数类型无效,`BYTES_RANDOM/BYTES_CRYPTO`表示安全随机源或密码操作失败。 +字节错误类别为`字节`。`BYTES_UTF8`表示严格 UTF-8 解码失败,`BYTES_LIMIT`表示字节串超过 16 MiB,`BYTES_RANGE/BYTES_VALUE/BYTES_TYPE`表示索引、数列项或参数类型无效,`BYTES_RANDOM/BYTES_CRYPTO`表示安全随机源或密码操作失败。 `抛`普通值会以其显示文字创建错误;`抛`已有误值会保留原踪迹。词法、语法和语义错误发生在执行前,不能由`试`捕获。 diff --git a/content/docs/language/index.mdx b/content/docs/language/index.mdx index 049211d..fb632fd 100644 --- a/content/docs/language/index.mdx +++ b/content/docs/language/index.mdx @@ -1,6 +1,6 @@ --- title: 学习语言 -description: 按概念顺序学习言序 1.1.8 的语法、类型、模块与运行语义。 +description: 按概念顺序学习言序 1.1.20 的语法、类型、模块与运行语义。 --- 第一次系统学习时,按照侧边栏从核心概念进入组织与可靠性;二进制数据和套接字属于按需选读。完整顺序和不同目标的捷径见[下一步](/getting-started/next-steps/)。 diff --git a/content/docs/language/modules.mdx b/content/docs/language/modules.mdx index 033a178..3652f0b 100644 --- a/content/docs/language/modules.mdx +++ b/content/docs/language/modules.mdx @@ -22,9 +22,22 @@ description: 导入其他文卷,并理解模块路径、命名空间、缓存 模块只执行一次,后续引用复用缓存;成员不能由外部改写,循环引用会报错。 +## 限定类型与公开重导出 + +1.1.13 起,导入模块中的类或协议在类型位置使用`模块别名.类型名`。限定类型可用于注解、联合、可空、泛型、法类型、继承、协议实现和`是`判断;当前模块自己声明的类型仍可裸写。不同模块中的同名类型拥有不同身份,同一模块经不同别名导入时仍指向同一个类型。 + +```yanxu +公 引「控件.yx」为 控件; + +类 特殊按钮 承 控件.按钮 纳 控件.可描述 则 +终 +``` + +顶层`公 引`会把模块作为当前模块的公开成员重导出。包可以用它建立稳定 facade,而不暴露内部文件布局;`yanxu 文 --json`以模块 API 清单 v2 记录声明所有者、完整限定名与重导出路径。旧代码若曾依赖“导入后偶然可以裸写外部类型”,应改为显式限定名。完整步骤见[1.1.13 迁移指南](/reference/migrations/1.1.13/)。 + ## 包与标准模块 -1.1.7 的新项目继续使用格式 2 清单。最低配置只需包信息,依赖和权限按需添加: +新项目继续使用格式 2 清单。最低配置只需包信息,依赖和权限按需添加: ```toml [包] diff --git a/content/docs/projects/build-release.mdx b/content/docs/projects/build-release.mdx index fddda94..69dea73 100644 --- a/content/docs/projects/build-release.mdx +++ b/content/docs/projects/build-release.mdx @@ -24,4 +24,6 @@ yanbao pack - `--bundle`面向声明了应用元数据的桌面项目,生成当前平台应用目录;它不是跨平台交叉构建器。 - `pack`生成确定性的 `.yxp`分发包。 -同一输入应生成逐字节稳定的 YXB/YXP。摘要用于完整性校验,不等同于发布者签名。发布前还应在目标系统验证启动、权限拒绝路径和资源完整性;桌面 Bundle 的平台细节见[应用构建](/tooling/building-apps/)。 +同一输入应生成逐字节稳定的 YXB/YXP。1.1.20 从已打开的包根捕获入口、资源、图标和原生制品的稳定文件快照;归档解码同时限制压缩输入、完整展开量、条目、路径和数据预算,并拒绝附加 gzip member、尾随数据、链接、特殊文件与等价路径碰撞。 + +摘要用于完整性校验,不等同于发布者签名。言序正式 Release 还提供逐目标构建元数据、CycloneDX 1.5 SBOM、构建来源证明和签名复验;应用发布者应采用同样的“先验证摘要,再验证来源身份”顺序。发布前还应在目标系统验证启动、权限拒绝路径和资源完整性;桌面 Bundle 的平台细节见[应用构建](/tooling/building-apps/)。 diff --git a/content/docs/projects/dependencies.mdx b/content/docs/projects/dependencies.mdx index 4c589c2..5c66f4c 100644 --- a/content/docs/projects/dependencies.mdx +++ b/content/docs/projects/dependencies.mdx @@ -17,6 +17,8 @@ yanbao install 格式 2 锁文件固定直接和传递包的精确版本、Git 提交、内容校验和、来源、依赖边、入口、导出、最低言序版本、目标平台与原生制品。检查、运行和构建只使用这张图,不会在导入时临时重新选版。 +1.1.20 会把路径、Git 与注册表依赖在完整校验后发布为内容寻址、只读的 generation;解释器、VM、检查器、LSP、文档和构建消费解析阶段保存的同一目录能力,不会再按可变来源路径重新打开。Git 缓存使用锁定的 bare 对象库与 40 位精确提交,注册表旧缓存也只在复验后迁入不可变快照。首次升级建议联网运行一次`yanbao install`填充新缓存;离线模式不会信任未复验的旧目录。 + ```sh yanbao tree yanbao why http @@ -26,3 +28,5 @@ yanbao audit ``` 清单变化后提交新的清单和锁文件。离线安装只能复用已缓存或`vendor`保存、且与锁图逐包一致的内容。依赖包的权限不会传给应用;顶层项目必须独立声明所需能力。 + +包元数据与源码都有固定预算:单个清单 4 MiB、锁文件 16 MiB、辖制清单 8 MiB、注册表索引 32 MiB,单个模块源码 8 MiB。最终文件符号链接、重解析点、特殊文件、读取期间身份替换以及可移植大小写或 Unicode 路径碰撞都会被拒绝。超过预算的工程应拆分模块或清理重复元数据,而不是放宽宿主内存限制。 diff --git a/content/docs/projects/manifest.mdx b/content/docs/projects/manifest.mdx index be680db..b9fda88 100644 --- a/content/docs/projects/manifest.mdx +++ b/content/docs/projects/manifest.mdx @@ -18,6 +18,7 @@ description: 阅读格式 2 的言序.toml,并区分必需表与可选工程 [权限] 文件 = [] 网络 = [] +本地网络 = false TCP监听 = [] UDP绑定 = [] 环境 = [] diff --git a/content/docs/projects/permissions.mdx b/content/docs/projects/permissions.mdx index 67783e0..8ad53f0 100644 --- a/content/docs/projects/permissions.mdx +++ b/content/docs/projects/permissions.mdx @@ -9,6 +9,7 @@ description: 以最小能力声明宿主访问,并理解应用申请与宿主 [权限] 文件 = ["data"] 网络 = ["api.example.com"] +本地网络 = false TCP监听 = ["127.0.0.1"] UDP绑定 = [] 环境 = ["YANXU_PROFILE"] @@ -16,8 +17,10 @@ UDP绑定 = [] 原生扩展 = false ``` -文件范围相对包根目录;网络列出允许外连的主机;TCP 与 UDP 绑定能力单独声明;环境只暴露列出的变量。进程和原生扩展是布尔能力。桌面相关能力也彼此独立,不会隐式授予文件、网络或进程。 +文件范围相对包根目录;网络列出允许外连的主机、地址或最窄 CIDR;TCP 与 UDP 绑定能力单独声明;环境只暴露列出的变量。进程和原生扩展是布尔能力。桌面相关能力也彼此独立,不会隐式授予文件、网络或进程。 -使用`yanxu 包 运行`或`yanbao run`按清单运行项目。直接执行单一文卷为兼容旧脚本保留不受限行为,因此不适合运行不可信来源。嵌入宿主默认应使用沙箱配置,并设置执行步数、调用深度与集合大小预算。 +`网络 = ["*"]`只放行普通公网目标,不会隐式放行回环、私网、链路本地、CGNAT 或其他敏感地址。访问用户配置的本地服务应显式声明`本地网络 = true`;VPN fake-IP 等不属于该集合的网段应添加最窄 CIDR,例如`198.18.0.0/15`。URL 预检、DNS 解析后的真实 IP 和宿主/应用权限交集使用同一规则,宿主仍可进一步收窄范围。 -完整 14 项能力矩阵见[权限参考](/reference/permissions/),资源如何进入制品见[项目清单](/projects/manifest/)。 +使用`yanxu 包 运行`或`yanbao run`按清单运行项目。直接执行单一文卷为兼容旧脚本保留不受限行为,因此不适合运行不可信来源。嵌入宿主默认应使用沙箱配置,并设置执行步数、调用深度与集合大小预算;命令行可通过`--max-steps`或`YANXU_MAX_STEPS`收紧单次执行步数。 + +完整 15 项能力矩阵见[权限参考](/reference/permissions/),资源如何进入制品见[项目清单](/projects/manifest/)。 diff --git a/content/docs/reference/cli.mdx b/content/docs/reference/cli.mdx index 4082ea1..57ae4b3 100644 --- a/content/docs/reference/cli.mdx +++ b/content/docs/reference/cli.mdx @@ -1,5 +1,5 @@ --- -title: 1.1.8 命令工具 +title: 1.1.20 命令工具 description: 使用静态检查、格式化、测试、YXB、字节码、调试、文档与 LSP。 --- @@ -11,7 +11,20 @@ yanxu 格 src/主.yx yanxu 格 --写 src/主.yx ``` -`查`会运行词法、语法、语义与静态类型阶段,但不执行用户代码。`格`默认把规范源码写到标准输出,`--写`才替换文件。格式化结果是幂等的。 +`查`会运行词法、语法、语义与静态类型阶段,但不执行用户代码。`格`默认把规范源码写到标准输出,`--写`才替换文件。格式化结果是幂等的;1.1.20 会保留单元素元组`(值,)`末尾用于消歧的逗号。 + +解析器统一限制语句、表达式与类型结构为 32 层。超限源码会在格式化、检查或执行前得到确定的语法错误;请用具名中间值、辅助函数、类或协议拆分结构,不要依赖提高运行时预算绕过。 + +## 执行预算 + +源码、VM、包入口和 YXB 运行都可使用全局步数预算: + +```sh +yanxu --max-steps 250000 src/主.yx +YANXU_MAX_STEPS=250000 yanxu run build/应用.yxb +``` + +命令行旗标优先于环境变量,未设置时默认为 1,000,000 步。GUI、计时器和原生扩展的每个宿主回调独立计量,多个正常回调不会累计耗尽同一份余额;单个回调中的死循环仍会被终止。 ## 规格测试 @@ -39,7 +52,7 @@ yanxu 文 src api/全库.md yanxu 基准 10 ``` -`调`适合一次性打印语句踪迹;编辑器通过`yanxu 调试服务`启动 DAP 适配器,可设置源码断点、继续、单步并检查栈与作用域变量。`文`只记录`公`API,读取`///`/`#:`声明注释并生成类型链接、稳定锚点与模块索引;目录输入会汇总多模块。 +`调`适合一次性打印语句踪迹;编辑器通过`yanxu 调试服务`启动 DAP 适配器,可设置源码断点、继续、单步并检查栈与作用域变量。`文`只记录`公`API,读取`///`/`#:`声明注释并生成类型链接、稳定锚点与模块索引;目录输入会汇总多模块。`文 --json`使用模块 API 清单 v2,记录类型所有者、完整限定名、结构化类型引用与公开重导出路径。 ## LSP diff --git a/content/docs/reference/error-codes.mdx b/content/docs/reference/error-codes.mdx index aff5c92..ee21e1a 100644 --- a/content/docs/reference/error-codes.mdx +++ b/content/docs/reference/error-codes.mdx @@ -10,7 +10,7 @@ description: 按稳定代码处理运行、网络、套接字、字节与原生 | 运行 | `RUN000` | 普通运行错误或用户抛出的普通值 | | 网络 | `NET_PERMISSION`、`NET_URL`、`NET_DNS`、`NET_CONNECT`、`NET_TLS`、`NET_TIMEOUT`、`NET_LIMIT`、`NET_PROTOCOL`、`NET_UTF8` | 高层网络请求的权限、地址、连接、预算、协议与正文错误 | | 套接字 | `SOCKET_PERMISSION`、`SOCKET_ADDRESS`、`SOCKET_DNS`、`SOCKET_CONNECT`、`SOCKET_BIND`、`SOCKET_ACCEPT`、`SOCKET_TIMEOUT`、`SOCKET_LIMIT`、`SOCKET_STATE`、`SOCKET_EOF`、`SOCKET_UTF8`、`SOCKET_UNSUPPORTED` | TCP/UDP 资源与 I/O 错误 | -| 字节 | `BYTES_UTF8`、`BYTES_LIMIT`、`BYTES_RANGE`、`BYTES_VALUE`、`BYTES_TYPE`、`BYTES_RANDOM`、`BYTES_CRYPTO` | 解码、4 MiB 上限、索引、值与密码操作错误 | +| 字节 | `BYTES_UTF8`、`BYTES_LIMIT`、`BYTES_RANGE`、`BYTES_VALUE`、`BYTES_TYPE`、`BYTES_RANDOM`、`BYTES_CRYPTO` | 解码、16 MiB 上限、索引、值与密码操作错误 | | 原生 | `NATIVE_PERMISSION`、`NATIVE_VALUE`、`NATIVE_ERROR` | ABI 权限、跨边界值和宿主回调错误 | 词法、语法和语义诊断发生在执行前,不能由`试…救`捕获。完整网络与套接字子码、调用踪迹和示例见[结构化错误](/language/errors/)。 diff --git a/content/docs/reference/formats.mdx b/content/docs/reference/formats.mdx index f17321f..478b3e7 100644 --- a/content/docs/reference/formats.mdx +++ b/content/docs/reference/formats.mdx @@ -28,7 +28,7 @@ yanxu 迁 --写 src/主.yx ## 版本化格式 -包清单与锁文件当前为格式 2,并兼容读取格式 1;字节码块、YXB 应用、工程协议、原生扩展 ABI、测试/兼容报告、C ABI JSON 与标准库 API 清单各自使用显式主版本。未知主版本会被拒绝,不会猜测解析。JSON Schema 位于核心仓库`schemas/`,规范表位于`spec/language/v1/formats.md`。 +包清单与锁文件当前为格式 2,并兼容读取格式 1;字节码块当前为格式 2且只读取格式 2,YXB 外层仍为格式 1。工程协议、原生扩展 ABI、测试/兼容报告、C ABI JSON、标准库 API 清单与模块 API 清单各自使用显式主版本。未知主版本会被拒绝,不会猜测解析。JSON Schema 位于核心仓库`schemas/`,规范表位于`spec/language/v1/formats.md`。 格式 2 锁文件保存完整直接/传递依赖图、精确版本与 Git 提交、来源、校验和、目标平台、导出表和原生制品。YXB/YXP 使用固定顺序和元数据,相同输入必须逐字节相同;构建和运行不得在导入时临时重新选版。 @@ -36,4 +36,4 @@ yanxu 迁 --写 src/主.yx ## 模糊测试 -核心仓库`fuzz/`提供词法/解析、格式化重解析/幂等性和字节码归档解码三个 cargo-fuzz 目标。固定种子同时进入普通 Rust 测试,保证历史崩溃无需 libFuzzer 也会回归。 +核心仓库`fuzz/`覆盖前端、格式化、字节码归档、应用归档、清单、锁文件、工程协议和原生库八类结构化输入。固定种子同时进入普通 Rust 测试;1.1.20 还把预发布发现的单元素元组格式化崩溃与语义回归输入固化,保证历史问题无需 libFuzzer 也会回归。 diff --git a/content/docs/reference/index.mdx b/content/docs/reference/index.mdx index 6a20809..9e172e7 100644 --- a/content/docs/reference/index.mdx +++ b/content/docs/reference/index.mdx @@ -9,10 +9,10 @@ description: 面向查询集中整理稳定语法、命令、公共格式、权 - + - + diff --git a/content/docs/reference/migrations/1.1.10.mdx b/content/docs/reference/migrations/1.1.10.mdx new file mode 100644 index 0000000..3184159 --- /dev/null +++ b/content/docs/reference/migrations/1.1.10.mdx @@ -0,0 +1,19 @@ +--- +title: 从 1.1.9 升级到 1.1.10 +description: 按响应状态处理 HTTP 4xx/5xx,并统一 TLS 证书错误。 +--- + +1.1.10 是 HTTP 边界修复版,不改变语言规范、标准库函数签名、原生 ABI、清单、锁文件、YXB 或 Bundle 格式。 + +`网络.请求`与`网络.请求字节`现在把 4xx 和 5xx 的状态、地址、首部与正文作为正常响应典返回。以前捕获`NET_STATUS`处理业务状态的调用方,应改为读取`状态`: + +```yanxu +引「标准:网络」为 网络; + +定 响应 为 网络.请求(「GET」,「https://example.com/missing」,「」,5000,1048576); +若 响应【「状态」】不小于 400 则 + 言「服务返回业务错误」; +终 +``` + +TLS 证书格式、信任链或主机校验失败稳定归入`NET_TLS`。连接、超时、协议和正文预算仍按各自`NET_*`代码处理。 diff --git a/content/docs/reference/migrations/1.1.11.mdx b/content/docs/reference/migrations/1.1.11.mdx new file mode 100644 index 0000000..dd7cacb --- /dev/null +++ b/content/docs/reference/migrations/1.1.11.mdx @@ -0,0 +1,10 @@ +--- +title: 从 1.1.10 升级到 1.1.11 +description: 修复 Windows 上锁定 Git、注册表与辖制依赖的构建路径。 +--- + +1.1.11 不改变语言语法、标准库 API、清单、锁文件或制品格式。 + +Windows 项目若包含 Git、注册表或`vendor`依赖,应升级运行时并重新构建 YXB。包解析器会统一保存文件系统规范化后的依赖根,避免 Windows 扩展长度路径被误判为不属于锁定依赖图。 + +无需重写清单或锁文件;依赖模块仍必须来自应用本身或完整锁图,本修复不会扩大可导入目录。 diff --git a/content/docs/reference/migrations/1.1.12.mdx b/content/docs/reference/migrations/1.1.12.mdx new file mode 100644 index 0000000..90c9721 --- /dev/null +++ b/content/docs/reference/migrations/1.1.12.mdx @@ -0,0 +1,12 @@ +--- +title: 从 1.1.11 升级到 1.1.12 +description: 重新构建含大整数数字常量的 YXB,保证序列化精确往返。 +--- + +1.1.12 不改变语言语法、标准库 API、原生 ABI、清单、锁文件或制品格式。只有依赖本修复的包才需要把最低版本提高到`>=1.1.12`。 + +1.1.11 构建的 YXB 若含`9007199254740991`等大整数数字常量,重新加载时可能因 JSON 浮点往返产生内容校验失败。升级到 1.1.12 后从源码重新构建这类 YXB;源码、锁图、原生制品和资源无需修改。 + +```sh +yanxu compile . -o build/应用.yxb --release +``` diff --git a/content/docs/reference/migrations/1.1.13.mdx b/content/docs/reference/migrations/1.1.13.mdx new file mode 100644 index 0000000..7c71490 --- /dev/null +++ b/content/docs/reference/migrations/1.1.13.mdx @@ -0,0 +1,27 @@ +--- +title: 从 1.1.12 升级到 1.1.13 +description: 迁移模块限定类型、公开重导出、字节码格式 2 与模块 API v2。 +--- + +1.1.13 新增模块限定类型、跨模块继承与协议,以及顶层公开模块重导出: + +```yanxu +公 引「控件.yx」为 控件; + +类 特殊按钮 承 控件.按钮 纳 控件.可描述 则 +终 +``` + +当前模块中的类和协议仍可裸写。过去因检查器共享状态而偶然可裸写的导入类型,必须改成`导入别名.类型`;限定形式也适用于注解、联合、可空、泛型、法类型、`承`、`纳`和`是`。 + +## 重新构建制品 + +字节码块升级为格式 2,保存规范模块与类型身份。YXB 外层仍为格式 1,但旧字节码格式 1 不能安全自动迁移;保留源码并重新构建: + +```sh +yanxu compile . -o build/应用.yxb --release +``` + +1.1.16 及更高版本会用`BYTECODE_FORMAT_UNSUPPORTED`或`YXB_BYTECODE_UNSUPPORTED`报告检测格式、支持格式和重建命令。 + +`yanxu 文 --json`同时升级为模块 API 清单 v2,新增类型所有者、完整限定名、结构化类型引用与重导出路径。读取旧清单的工具应先按主版本分派;标准库的`stdlib-api-v1`不受影响。 diff --git a/content/docs/reference/migrations/1.1.14.mdx b/content/docs/reference/migrations/1.1.14.mdx new file mode 100644 index 0000000..436f0e8 --- /dev/null +++ b/content/docs/reference/migrations/1.1.14.mdx @@ -0,0 +1,13 @@ +--- +title: 从 1.1.13 升级到 1.1.14 +description: 分离 HTTP 累计响应预算与套接字单次读取上限。 +--- + +1.1.14 修复`网络.请求字节`把最大响应字节错误限制为套接字 4 MiB 单次接收上限的问题。 + +- 使用不大于 4 MiB 预算的应用无需修改。 +- 使用更大预算的应用需升级运行时并重新构建 YXB 或 Bundle。 +- 实际正文超过调用预算仍以`NET_LIMIT`失败,不返回截断成功值。 +- 套接字接收函数继续使用独立的 4 MiB 单次上限。 + +1.1.16 起,单个字节值与 HTTP 宿主硬上限统一为 16 MiB,详见[1.1.16 迁移](/reference/migrations/1.1.16/)。本版本不改变标准库签名、原生 ABI、清单、锁文件、YXB 或 Bundle 格式。 diff --git a/content/docs/reference/migrations/1.1.15.mdx b/content/docs/reference/migrations/1.1.15.mdx new file mode 100644 index 0000000..eaa94e8 --- /dev/null +++ b/content/docs/reference/migrations/1.1.15.mdx @@ -0,0 +1,19 @@ +--- +title: 从 1.1.14 升级到 1.1.15 +description: 为回环、私网与链路本地服务声明显式本地网络能力。 +--- + +1.1.15 为需要访问用户配置局域网服务的应用新增独立权限: + +```toml +[权限] +网络 = ["*"] +本地网络 = true +``` + +- `网络 = ["*"]`仍只表示普通公网目标,不会隐式授权敏感地址。 +- `本地网络 = true`覆盖回环、RFC1918 私网、IPv4 链路本地与 CGNAT、IPv6 ULA 与链路本地。 +- 未指定、广播、组播、文档及其他保留地址仍须精确 IP;VPN fake-IP 等网段可在 1.1.17 起使用最窄 CIDR。 +- 嵌入宿主与应用必须同时授权,最终权限交集才会生效。 + +使用该能力的应用应把最低言序版本声明为`>=1.1.15`并重新构建 YXB 或 Bundle。外层 YXB 格式仍为 1,旧制品因没有这项申请而继续拒绝本地网络。 diff --git a/content/docs/reference/migrations/1.1.16.mdx b/content/docs/reference/migrations/1.1.16.mdx new file mode 100644 index 0000000..d3ee233 --- /dev/null +++ b/content/docs/reference/migrations/1.1.16.mdx @@ -0,0 +1,22 @@ +--- +title: 从 1.1.15 升级到 1.1.16 +description: 采用 16 MiB 二进制硬上限,并从源码重建字节码格式 1 制品。 +--- + +1.1.16 不改变语言语法、标准库签名、清单、锁文件、YXB 外层格式、当前字节码、原生 ABI 或工程协议版本。 + +## 二进制资源预算 + +单个二进制值和 HTTP 响应正文受 16 MiB 宿主硬上限约束。HTTP 默认累计预算仍为 4 MiB,显式请求值与宿主上限取较小者;套接字单次读取继续独立限制为 4 MiB。 + +超限读取以`NET_LIMIT`失败,不会返回截断成功值。需要处理更大正文的应用应采用流式协议或应用层分块,嵌入宿主只能收紧而不能突破硬上限。 + +## 旧 YXB 与字节码 + +YXB 外层格式 1 仍受支持,但其中字节码必须为格式 2。格式 1 缺少无歧义恢复模块与类型身份的信息,不能自动迁移: + +```sh +yanxu compile . -o build/应用.yxb --release +``` + +`BYTECODE_FORMAT_UNSUPPORTED`与`YXB_BYTECODE_UNSUPPORTED`会给出检测格式、当前格式与完整重建命令。损坏、越界或摘要不符的归档不会进入兼容路径。 diff --git a/content/docs/reference/migrations/1.1.17.mdx b/content/docs/reference/migrations/1.1.17.mdx new file mode 100644 index 0000000..d28fda2 --- /dev/null +++ b/content/docs/reference/migrations/1.1.17.mdx @@ -0,0 +1,23 @@ +--- +title: 从 1.1.16 升级到 1.1.17 +description: 使用 CIDR 网络授权、24 小时子进程上限与可重入宿主事件泵。 +--- + +1.1.17 保持语言语法、标准库签名、清单、锁文件、YXB、字节码、ABI 与工程协议版本不变。 + +## CIDR 与本地网络 + +VPN fake-IP 或其他特殊网段可以声明最窄 CIDR: + +```toml +[权限] +网络 = ["*", "198.18.0.0/15"] +``` + +`*`仍只允许普通公网地址;宿主与应用权限始终取交集。既有单 IP、带端口和`本地网络 = true`语义不变。需要 CIDR 能力的应用应把最低运行时提高到 1.1.17 并重新构建制品。 + +## 长时子进程 + +`进程.执行`的超时范围扩展到 1..=86,400,000 毫秒。超时会终止并回收子进程,以`PROCESS_TIMEOUT`失败;标准输出和标准错误各自最多保留 16 MiB,超限以`PROCESS_LIMIT`失败。既有不超过 5 分钟的调用无需修改。 + +原生 GUI 回调中再次请求事件泵时,会视为已由外层泵覆盖的成功 no-op,不再把合法嵌套回调误报为失败。 diff --git a/content/docs/reference/migrations/1.1.18.mdx b/content/docs/reference/migrations/1.1.18.mdx new file mode 100644 index 0000000..53326ea --- /dev/null +++ b/content/docs/reference/migrations/1.1.18.mdx @@ -0,0 +1,36 @@ +--- +title: 1.1.18 追溯说明 +description: 了解未发布快照的依赖、归档、原生装载与供应链迁移边界。 +--- + + + 1.1.18 没有通过完整动态检查,未形成稳定 Release。以下能力最终由 1.1.20 正式交付;请直接阅读[1.1.20 迁移](/reference/migrations/1.1.20/)并升级到 1.1.20。 + + +## 依赖与缓存 + +路径、Git 与注册表依赖在清单、锁定目标和完整树摘要校验后,发布为内容寻址、只读的 generation。解释器、VM、检查器、LSP、文档与构建消费解析阶段保存的同一能力,不再从可变来源路径重新建立信任。 + +首次升级后应联网运行一次`yanbao install`或`yanbao update`,建立 Git v2 bare 对象库与注册表不可变快照。离线模式只接受锁文件中的 40 位精确 Git 提交和已经复验的 generation;不要手工移动旧缓存或改写摘要。 + +## 固定安全预算 + +| 输入 | 上限 | +| --- | ---: | +| 包清单 / 工作区成员清单 | 4 MiB | +| 锁文件 | 16 MiB | +| 辖制清单 | 8 MiB | +| 注册表索引 | 32 MiB | +| 单个模块源码 | 8 MiB | +| Git bare 对象库 | 1 GiB、1,000,000 项、256 层 | +| 目录工具 | 单目录 4,096 项、整树 100,000 项、相对根 128 层 | + +最终文件符号链接、Windows 重解析点、特殊文件、读取期间身份替换以及可移植大小写/Unicode 路径碰撞都会被拒绝。超过预算的项目应拆分源码或精简元数据。 + +## 归档、资源与原生库 + +打包从已打开的包根捕获入口、资源、图标和原生制品快照;解包同时计量 gzip 输入、完整 tar 展开量、条目、路径和数据,并拒绝附加 member、尾随数据、链接和等价路径碰撞。非规范旧归档应从源码重新打包。 + +ABI v2 磁盘模块只能装载自身或直接锁定依赖的制品。Linux 拒绝 RPATH/RUNPATH 和路径型依赖,macOS 只允许固定系统库路径,Windows 拒绝延迟导入;依赖相邻动态库的扩展应改为静态链接或受支持的系统依赖后重建。 + +工程协议仍为 v1,但全量`audit`必须协商并回显 Schema 1 的十二项检查能力。缺少能力声明的旧核心不能被当作完成了安全审计。 diff --git a/content/docs/reference/migrations/1.1.19.mdx b/content/docs/reference/migrations/1.1.19.mdx new file mode 100644 index 0000000..5950bfb --- /dev/null +++ b/content/docs/reference/migrations/1.1.19.mdx @@ -0,0 +1,19 @@ +--- +title: 1.1.19 追溯说明 +description: 了解未晋升预发布版的 32 层解析边界与格式化风险。 +--- + + + 1.1.19 是预发布快照,因单元素元组格式化会丢失消歧逗号而未晋升为稳定 Release。请直接升级到 1.1.20。 + + +1.1.19 包含原计划随 1.1.18 交付的依赖快照、归档、原生装载、审计与供应链边界,公开格式版本未改变。迁移背景见[1.1.18 追溯说明](/reference/migrations/1.1.18/)。 + +解析器统一限制语句、表达式和类型结构为 32 层。超限源码会得到确定的语法错误,可按以下方式拆分: + +- 把长运算、调用、成员或下标链拆成具名中间值; +- 把深层条件、循环或错误处理抽成辅助函数; +- 用具名类或协议拆分深层泛型与函数类型; +- 保持原求值顺序,不要重排有副作用的调用。 + +该上限是固定安全边界,不由运行时预算放宽。若曾用 1.1.19 执行写入式格式化,还必须按[1.1.20 迁移](/reference/migrations/1.1.20/)复核单元素元组。 diff --git a/content/docs/reference/migrations/1.1.20.mdx b/content/docs/reference/migrations/1.1.20.mdx new file mode 100644 index 0000000..979030f --- /dev/null +++ b/content/docs/reference/migrations/1.1.20.mdx @@ -0,0 +1,39 @@ +--- +title: 从 1.1.17 升级到 1.1.20 +description: 采用不可变依赖快照、安全归档、解析深度限制,并复核预发布格式化结果。 +--- + +言序 1.1.18 与 1.1.19 均未形成稳定 Release;1.1.17 用户应直接升级到 1.1.20。语言语法、25 个标准库签名、清单格式 2、锁文件格式 2、YXB 格式 1、字节码格式 2、原生 ABI v1/v2 和工程协议 1 均未提升版本。 + +## 升级步骤 + +1. 固定安装 1.1.20,并记录`yanxu version --json`。 +2. 联网运行`yanbao install`或`yanbao update`,让锁定依赖进入新的不可变缓存;不要手改锁文件或缓存摘要。 +3. 运行检查、格式化一致性、规格测试、依赖审计和 Release 构建。 +4. 含原生扩展的项目在每个目标平台重新验证动态依赖闭包;不满足新装载规则时静态链接非系统依赖后重建。 +5. 检查超大模块、元数据、目录树、Git 对象库与 32 层源码结构是否触及固定安全预算。 + +```sh +yanbao install +yanbao check +yanbao test +yanbao audit +yanbao build --release +``` + +不可变 generation、元数据/目录预算、归档和 ABI 细节见[1.1.18 追溯说明](/reference/migrations/1.1.18/);32 层解析边界见[1.1.19 追溯说明](/reference/migrations/1.1.19/)。 + +## 只针对 1.1.19 预发布用户 + +1.1.19 格式化器会把单元素元组`(值,)`改写成语义不同的普通括号表达式`(值)`。若源码曾由该预发布版写回: + +- 用版本控制检查 1.1.19 格式化产生的差异; +- 为仍表示元组的单元素表达式恢复末尾逗号; +- 使用 1.1.20 连续运行两次`yanxu fmt --write`,确认第二次没有变化; +- 重新执行类型检查与测试,确认元组和普通括号表达式没有混淆。 + +未用 1.1.19 写入式格式化的项目无需修改源码。1.1.20 会保留消歧逗号,并把对应崩溃输入固化为回归种子。 + +## 发行与供应链 + +1.1.20 的六平台 Release 提供逐目标构建元数据、CycloneDX 1.5 SBOM、构建来源证明与签名复验。核心和共享包标签保持不可变;未通过动态门禁的预发布标签不会被移动或直接晋升为稳定版。 diff --git a/content/docs/reference/migrations/1.1.9.mdx b/content/docs/reference/migrations/1.1.9.mdx new file mode 100644 index 0000000..1d683fe --- /dev/null +++ b/content/docs/reference/migrations/1.1.9.mdx @@ -0,0 +1,19 @@ +--- +title: 从 1.1.8 升级到 1.1.9 +description: 使用统一执行步数预算,并让常驻宿主回调独立计量。 +--- + +1.1.9 不改变语言规范 1、标准库 API、原生 ABI v1/v2、清单与锁文件、YXB 或 Bundle 格式。GUI 与原生扩展应用只需升级运行时并重新构建。 + +## 执行步数预算 + +源码执行、VM、包入口和 YXB 统一接受全局旗标与环境变量: + +```sh +yanxu --max-steps 250000 src/主.yx +YANXU_MAX_STEPS=250000 yanxu run build/应用.yxb +``` + +旗标优先于环境变量;两者都未设置时仍为 1,000,000 步。非法或为零的值会在执行前被拒绝。 + +GUI、计时器和原生扩展的每个宿主事件回调独立使用这份预算,多个正常回调不再累计耗尽同一余额。单个回调中的死循环仍会终止,回调结束后外层执行余额保持不变。 diff --git a/content/docs/reference/migrations/index.mdx b/content/docs/reference/migrations/index.mdx index 59b59cc..3718841 100644 --- a/content/docs/reference/migrations/index.mdx +++ b/content/docs/reference/migrations/index.mdx @@ -3,9 +3,23 @@ title: 迁移指南 description: 按目标版本核对行为、权限、公共格式和应用制品变化。 --- -升级前先提交清单与锁文件,记录当前`yanxu version --json`,并在独立分支运行检查、格式化、规格测试和构建。跨多个版本时按时间顺序逐份阅读,不要只看最后一版。 +升级前先提交清单与锁文件,记录当前`yanxu version --json`,并在独立分支运行检查、格式化、规格测试、审计和构建。跨多个稳定版本时按时间顺序阅读;1.1.18 与 1.1.19 只有追溯快照,1.1.17 用户直接迁移到 1.1.20。 + +## 当前稳定升级 + + + + + + + + + + + + diff --git a/content/docs/reference/migrations/meta.json b/content/docs/reference/migrations/meta.json index e6b3660..f0b1384 100644 --- a/content/docs/reference/migrations/meta.json +++ b/content/docs/reference/migrations/meta.json @@ -1,5 +1,22 @@ { "title": "迁移指南", "description": "按版本处理语言、工具链与应用格式变化。", - "pages": ["index", "1.1.8", "1.1.7", "1.1.6"] + "pages": [ + "index", + "1.1.20", + "1.1.19", + "1.1.18", + "1.1.17", + "1.1.16", + "1.1.15", + "1.1.14", + "1.1.13", + "1.1.12", + "1.1.11", + "1.1.10", + "1.1.9", + "1.1.8", + "1.1.7", + "1.1.6" + ] } diff --git a/content/docs/reference/permissions.mdx b/content/docs/reference/permissions.mdx index f9ebb9d..e7f1c2c 100644 --- a/content/docs/reference/permissions.mdx +++ b/content/docs/reference/permissions.mdx @@ -1,12 +1,13 @@ --- title: 权限参考 -description: 查询格式 2 清单支持的 14 项宿主能力与最小授权方式。 +description: 查询格式 2 清单支持的 15 项宿主能力与最小授权方式。 --- | 能力 | 清单值 | 控制范围 | | --- | --- | --- | | `文件` | 路径列 | 相对包根的可访问文件根 | | `网络` | 主机列 | 允许外连的 DNS 主机或地址 | +| `本地网络` | 理值 | 显式允许回环、私网、链路本地、CGNAT 与 IPv6 ULA | | `TCP监听` | 地址列 | 允许监听的地址范围 | | `UDP绑定` | 地址列 | 允许绑定的数据报地址范围 | | `环境` | 名称列 | 可读取的环境变量 | @@ -20,6 +21,6 @@ description: 查询格式 2 清单支持的 14 项宿主能力与最小授权方 | `打开外部地址` | 理值 | 请求系统打开外部 URL | | `全局快捷键` | 理值 | 注册系统级快捷键 | -所有能力默认拒绝。依赖不能向应用传递权限;桌面能力彼此独立;原生扩展是进程内受信任代码,摘要门禁不构成恶意代码隔离。YXB 的申请还会与宿主上限相交。 +所有能力默认拒绝。`网络 = ["*"]`不包含敏感地址;本地服务使用`本地网络 = true`,其他特殊网段使用精确 IP 或最窄 CIDR。依赖不能向应用传递权限;桌面能力彼此独立;原生扩展是进程内受信任代码,摘要门禁不构成恶意代码隔离。YXB 的申请还会与宿主上限相交。 可运行清单示例与建议见[权限与资源](/projects/permissions/),嵌入宿主见[嵌入与宿主权限](/guides/embedding/)。 diff --git a/content/docs/reference/project-format.mdx b/content/docs/reference/project-format.mdx index fe06117..af553e4 100644 --- a/content/docs/reference/project-format.mdx +++ b/content/docs/reference/project-format.mdx @@ -7,7 +7,7 @@ description: 查询清单、锁文件、字节码、YXB、工程协议、报告 | --- | ---: | --- | --- | | 包清单 | 2 | 1、2 | `[包].格式` | | 锁文件 | 2 | 1、2 | `lock_version` | -| 字节码块 | 1 | 1 | `Chunk.format_version` | +| 字节码块 | 2 | 2 | `Chunk.format_version` | | YXB 应用 | 1 | 1 | `format_version`与内容校验和 | | 工程协议 | 1 | 1 | `protocol_version` | | 原生扩展 ABI | 1、2 | 对应 ABI | `abi_version`与`struct_size` | @@ -15,7 +15,8 @@ description: 查询清单、锁文件、字节码、YXB、工程协议、报告 | 兼容报告 | 1 | 1 | `compatibility-report-v1` | | C ABI 结果 | 1 | 1 | JSON `schema` | | 标准库清单 | 1 | 1 | `stdlib-api-v1` | +| 模块 API 清单 | 2 | 2 | `module-api-v2` | 实现必须拒绝未知主版本,不得猜测解析。同一主版本只能增加接收方明确忽略的可选字段;删除字段、改变类型、语义或默认值需要新主版本。 -格式 2 清单的最小必需表是`[包]`。锁文件固定完整依赖图和清单校验和。YXB/YXP 使用确定顺序,相同输入应逐字节相同;内容 SHA-256 只证明完整性,不证明发布者身份。详细安全预算与迁移行为见[公共格式](/reference/formats/)。 +格式 2 清单的最小必需表是`[包]`。锁文件固定完整依赖图和清单校验和。YXB 外层格式仍为 1,但其中字节码必须为格式 2;字节码格式 1 缺少无歧义恢复模块与类型身份所需的信息,只能从源码重建。YXB/YXP 使用确定顺序,相同输入应逐字节相同;内容 SHA-256 只证明完整性,不证明发布者身份。详细安全预算与迁移行为见[公共格式](/reference/formats/)。 diff --git a/content/docs/standard-library/index.mdx b/content/docs/standard-library/index.mdx index b2d17ad..5c5d7c0 100644 --- a/content/docs/standard-library/index.mdx +++ b/content/docs/standard-library/index.mdx @@ -27,7 +27,7 @@ description: 使用字节、文字、文件、网络、套接字、进程、资 ## 字节串 -`字节`模块提供`从文字/转文字/长度/切片/拼接/查找/从数列/转数列`。`字节串`不可变、按内容相等,长度和索引均以实际字节为单位;无效 UTF-8 解码返回`BYTES_UTF8`。完整示例和上限见[字节串与二进制 I/O](/language/binary-data/)。 +`字节`模块提供`从文字/转文字/长度/切片/拼接/查找/从数列/转数列`。`字节串`不可变、按内容相等,长度和索引均以实际字节为单位;无效 UTF-8 解码返回`BYTES_UTF8`,单值硬上限为 16 MiB。完整示例和预算关系见[字节串与二进制 I/O](/language/binary-data/)。 ## 时间、文件与环境 @@ -55,7 +55,7 @@ description: 使用字节、文字、文件、网络、套接字、进程、资 | 模块 | 成员与边界 | | --- | --- | -| `进程` | `执行(程序, 参数, 工作目录, 超时毫秒)`返回状态、标准输出和标准错误;受进程权限、全程超时与输出上限保护 | +| `进程` | `执行(程序, 参数, 工作目录, 超时毫秒)`返回状态、标准输出和标准错误;超时范围 1..=86,400,000 毫秒,每个输出流最多保留 16 MiB | | `资源` | `读取字节/读取文字/目录`只读访问清单声明资源;YXB 运行时读取归档内嵌内容 | 命令行参数继续由`环境.参数()`读取。源码模式下,`资源`只允许读取`[资源]`声明的目录;YXB 构建会把可达资源写入归档,所以部署时无需携带原始资源目录。`进程`不会继承依赖包的权限,应用必须在自己的清单显式授权。 @@ -70,7 +70,7 @@ description: 使用字节、文字、文件、网络、套接字、进程、资 CSV 解析支持 CRLF、引号字段、字段内逗号与换行,以及用两个引号表示一个引号。格式错误会给出明确诊断。 -原生网络模块支持 HTTP/HTTPS、根证书验证、HTTP/1.1 分块传输与关闭定界正文。`获取/发文`保留简洁签名,采用 10 秒全程超时和 4 MiB 响应上限;非成功状态、超时、TLS、超限与非 UTF-8 正文都会成为带稳定`NET_*`代码的结构化错误。1.1.3 起,每次重定向都重新授权,DNS 后复查真实 IP,解析、连接与传输共用同一截止时间。WASI 不隐式获得网络传输能力。 +原生网络模块支持 HTTP/HTTPS、根证书验证、HTTP/1.1 分块传输与关闭定界正文。`获取/发文`保留简洁签名,采用 10 秒全程超时和 4 MiB 默认响应预算;4xx 与 5xx 会作为正常响应返回,由调用方按`状态`处理。超时、TLS、协议、超限与非 UTF-8 正文才会成为带稳定`NET_*`代码的结构化错误。每次重定向都会重新授权,DNS 后复查真实 IP,解析、连接与传输共用同一截止时间。`网络 = ["*"]`不隐式放行本地或特殊地址;使用`本地网络 = true`、精确 IP 或最窄 CIDR。WASI 不隐式获得网络传输能力。 `请求字节(方法,地址,首部,正文,超时毫秒,最大字节)`接受`典<文,文>`和`字节串?`,返回典中的`正文`为字节串。运行时拒绝 CRLF、非法首部以及调用方伪造的`Host/Content-Length/Transfer-Encoding/Connection`等首部,并在跨源重定向时移除授权和 Cookie。 @@ -99,7 +99,7 @@ CSV 解析支持 CRLF、引号字段、字段内逗号与换行,以及用两 终 ``` -超时和大小参数必须是安全正整数;大小按响应正文的字节数计算,超过上限会完整失败而不是返回截断正文。错误代码表见[错误处理](/language/errors/)。 +超时和大小参数必须是安全正整数;大小按响应正文的字节数计算,显式预算与 16 MiB 宿主硬上限取较小者,超过上限会完整失败而不是返回截断正文。错误代码表见[错误处理](/language/errors/)。 ## 套接字 diff --git a/content/docs/standard-library/meta.json b/content/docs/standard-library/meta.json index faa740d..b096ed5 100644 --- a/content/docs/standard-library/meta.json +++ b/content/docs/standard-library/meta.json @@ -1,5 +1,5 @@ { "title": "标准库", - "description": "查询言序 1.1.8 的 25 个版本化标准模块。", + "description": "查询言序 1.1.20 的 25 个版本化标准模块。", "pages": ["index"] } diff --git a/content/docs/tooling/building-apps.mdx b/content/docs/tooling/building-apps.mdx index bbd8966..6f2f6a6 100644 --- a/content/docs/tooling/building-apps.mdx +++ b/content/docs/tooling/building-apps.mdx @@ -3,7 +3,7 @@ title: YXB 与独立应用 description: 把言序项目编译为不依赖原始源码的确定性应用制品。 --- -言序 1.1.8 沿用 1.1.7 引入的“完整编译”:它是完整包字节码编译,不是 LLVM 或 Cranelift 机器码后端。编译器读取格式 2 锁图,把入口、项目模块、依赖模块、声明资源、权限、应用元数据、当前目标原生制品和调试路径写入 YXB 应用归档。 +言序 1.1.20 的“完整编译”是完整包字节码编译,不是 LLVM 或 Cranelift 机器码后端。编译器读取格式 2 锁图和已经验证的不可变依赖 generation,把入口、项目模块、依赖模块、声明资源、权限、应用元数据、当前目标原生制品和调试路径写入 YXB 应用归档。 ## 直接使用核心 @@ -14,7 +14,7 @@ yanxu run build/我的应用.yxb -- 参数甲 参数乙 生成后可以把 YXB 复制到临时目录、删除源码副本再运行。YXB 仍需要目标机器安装兼容的言序 VM,但不会重新读取`.yx`、依赖清单或资源目录。 -YXB v1 使用确定性压缩载荷,并只保留报错所需的紧凑源码位置。1.1.7 以可选字段兼容携带原生模块和应用元数据;旧版压缩或未压缩 YXB v1 仍可读取。读取前后会限制压缩/展开 JSON、模块、资源、原生制品、指令、函数、类和调试跨度,并重新验证路径、目标、ABI、大小与 SHA-256。 +YXB v1 使用确定性压缩载荷,并只保留报错所需的紧凑源码位置。外层格式仍为 1,但 1.1.13 起载荷必须使用字节码格式 2;格式 1 字节码不能安全恢复模块与类型身份,须从源码重建。读取前后会限制压缩/展开 JSON、模块、资源、原生制品、指令、函数、类和调试跨度,并重新验证路径、目标、ABI、大小与 SHA-256。 ## 使用言包工作流 @@ -48,7 +48,7 @@ Bundle 包含 standalone、可检查 YXB、锁定 GUI 后端、资源、图标 - 相同源码、锁图、资源、目标和配置必须生成逐字节相同的 YXB/YXP。 - 构建前必须验证完整锁图和每个包的内容校验和,不会在导入时临时选版。 -- 资源只来自`[资源]`声明,归档路径会拒绝绝对路径和父目录越界;程序通过`标准:资源`的读取与目录接口访问。 +- 资源只来自`[资源]`声明,并从发现阶段已打开的包根快照读取;归档路径会拒绝绝对路径、父目录越界、符号链接、保留目录及大小写或 Unicode 规范化碰撞。程序通过`标准:资源`的读取与目录接口访问。 - 应用清单中的权限只是申请。实际权限始终是“宿主权限上限 ∩ 应用申请”,YXB 不能自行提升文件、网络、监听、环境、进程或原生扩展权限。 - 应在删除源码副本后运行 YXB,并在每个支持平台验证独立应用。 diff --git a/content/docs/tooling/native-extensions.mdx b/content/docs/tooling/native-extensions.mdx index 3d188e1..680bae4 100644 --- a/content/docs/tooling/native-extensions.mdx +++ b/content/docs/tooling/native-extensions.mdx @@ -31,12 +31,13 @@ ABI = 1 1. 顶层应用授权原生扩展; 2. 锁定目标与`yanxu version --json`报告完全一致; -3. 制品 SHA-256 与清单和锁文件一致,已验证字节被复制到进程私有、内容寻址且只读的临时路径后再加载; -4. `yanxu_native_module_v1`描述符的 ABI 版本、结构大小、指针、UTF-8 和名称唯一性都有效。 +3. 制品 SHA-256 与清单和锁文件一致,并从依赖解析阶段已打开的只读 generation 文件令牌读取;已验证字节再复制到进程私有、内容寻址且只读的临时路径加载; +4. 模块只能装载自身制品或直接锁定依赖边中的真实包;传递同名包、路径替换或包根替换不能改变选择; +5. `yanxu_native_module_v1`或`yanxu_native_module_v2`描述符的 ABI 版本、结构大小、指针、UTF-8 和名称唯一性都有效。 WASI 始终拒绝动态库。言序不会自动执行第三方构建脚本、安装钩子或 Shell 命令。单次 JSON 输入/输出上限为 16 MiB,每类描述符最多 1024 项;空指针、异常长度、JSON 解析失败和未知输出类型都会走 RAII 释放路径,资源析构至多执行一次。 -动态库是与宿主进程同等权限的受信任机器码,语言沙箱无法完全约束它。`原生扩展 = true`只是一道显式授权门禁,不会把不可信动态库变安全;发布者必须审查来源、目标和摘要,并在 Windows、Linux、macOS 分别验证装载策略。 +动态库是与宿主进程同等权限的受信任机器码,语言沙箱无法完全约束它。`原生扩展 = true`只是一道显式授权门禁,不会把不可信动态库变安全;发布者必须审查来源、目标和摘要,并在 Windows、Linux、macOS 分别验证装载策略。1.1.20 只接受当前架构的 64 位宿主库:Linux 拒绝 RPATH/RUNPATH 和路径型依赖,macOS 拒绝`LC_RPATH`及非固定系统库路径,Windows 拒绝延迟导入且只搜索私有暂存目录与 System32。非系统依赖应静态链接。 ```sh yanxu native --json diff --git a/content/docs/tooling/source-build.mdx b/content/docs/tooling/source-build.mdx index b0f17d7..81c42f5 100644 --- a/content/docs/tooling/source-build.mdx +++ b/content/docs/tooling/source-build.mdx @@ -5,12 +5,12 @@ description: 构建语言核心、运行测试并找到各子项目仓库。 ## 构建语言核心 -需要安装稳定版 Rust 工具链和 Git: +言序 1.1.20 的最低支持 Rust 版本是 1.89;还需要 Git: ```sh git clone https://github.com/YanXuLang/yanxu.git cd yanxu -cargo test --all-targets --locked +cargo test --workspace --all-targets --locked cargo install --path . ``` diff --git a/content/docs/tooling/vscode.mdx b/content/docs/tooling/vscode.mdx index 45a2eed..e625293 100644 --- a/content/docs/tooling/vscode.mdx +++ b/content/docs/tooling/vscode.mdx @@ -18,6 +18,6 @@ description: 安装并使用言序官方 VS Code 扩展。 - 使用 VS Code“运行和调试”设置断点、继续/单步并检查调用栈与变量; - 打开言序 REPL 与在线文档的命令。 -从 [VS Code 扩展发行页](https://github.com/YanXuLang/vscode-extension/releases)下载 1.4.0 `.vsix`,在 VS Code 扩展面板中选择“从 VSIX 安装”。扩展以言序 1.1.7 的稳定语言与标准库快照为基线,并兼容本站验收的 1.1.8;默认从`PATH`寻找`yanxu`,也可使用`yanxu.executablePath`指定可执行文件。扩展本身不要求安装言包。 +从 [VS Code 扩展发行页](https://github.com/YanXuLang/vscode-extension/releases)下载 1.4.0 `.vsix`,在 VS Code 扩展面板中选择“从 VSIX 安装”。扩展面向言序 1.1.7 及兼容的后续 1.x,包括本站验收的 1.1.20;离线标准库快照仍记录 1.1.7,实际 LSP、格式化、检查和标准库索引优先调用当前安装的核心。默认从`PATH`寻找`yanxu`,也可使用`yanxu.executablePath`指定可执行文件。扩展本身不要求安装言包。 扩展问题与功能建议请提交到 [YanXuLang/vscode-extension](https://github.com/YanXuLang/vscode-extension/issues)。 diff --git a/package-lock.json b/package-lock.json index 6423bef..81ab0ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@yanxulang/docs", - "version": "1.1.8", + "version": "1.1.20", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@yanxulang/docs", - "version": "1.1.8", + "version": "1.1.20", "hasInstallScript": true, "dependencies": { "@orama/orama": "^3.1.18", diff --git a/package.json b/package.json index 4dd84c8..2da4116 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@yanxulang/docs", - "version": "1.1.8", + "version": "1.1.20", "private": true, "type": "module", "scripts": { diff --git a/scripts/check-content.mjs b/scripts/check-content.mjs index 9d0435e..24cb221 100644 --- a/scripts/check-content.mjs +++ b/scripts/check-content.mjs @@ -90,10 +90,21 @@ const layout = read('lib/layout.shared.tsx'); assert.ok(!/图形|GUI|桌面|言窗|言界/i.test(layout), '顶栏不得包含桌面界面入口'); const packageJson = JSON.parse(read('package.json')); -assert.equal(packageJson.version, '1.1.8'); +assert.equal(packageJson.version, '1.1.20'); assert.match(read('content/docs/standard-library/index.mdx'), /25 个标准模块/); assert.match(read('app/layout.tsx'), /metadataBase:\s*new URL\('https:\/\/docs\.yanxu\.dev\/'\)/); +assert.match(read('.github/workflows/ci.yml'), /ref: v1\.1\.20/g, '示例 CI 未固定言序 1.1.20'); +assert.match(read('content/docs/language/binary-data.mdx'), /单值硬上限为 16 MiB/); +assert.match(read('content/docs/reference/project-format.mdx'), /\| 字节码块 \| 2 \| 2 \|/); +assert.match(read('content/docs/reference/permissions.mdx'), /15 项宿主能力/); +assert.match(read('content/docs/reference/permissions.mdx'), /`本地网络`/); +const migrationMeta = JSON.parse(read('content/docs/reference/migrations/meta.json')); +for (let patch = 6; patch <= 20; patch += 1) { + assert.ok(migrationMeta.pages.includes(`1.1.${patch}`), `迁移导航缺少 1.1.${patch}`); +} +assert.match(read('content/docs/reference/migrations/1.1.20.mdx'), /1\.1\.17 用户应直接升级到 1\.1\.20/); + const stableLibraries = [ ['yanju', '1.2.0', '1.1.6', 'content/docs/ecosystem/yanju/index.mdx', '/ecosystem/yanju/'], ['yanxu-semver', '1.0.0', '1.1.6', 'content/docs/ecosystem/libraries/semver.mdx', '/ecosystem/libraries/semver/'], From fd2468b250ec2ff534e944ff307e7a922e86b964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A7=80?= Date: Mon, 20 Jul 2026 18:56:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9A=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E8=A8=80=E5=8C=85=200.6.1=20=E5=B7=A5=E7=A8=8B?= =?UTF-8?q?=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs/getting-started/daily-workflow.mdx | 4 +- content/docs/tooling/package-manager.mdx | 45 ++++++++++++++++--- scripts/check-content.mjs | 7 +++ 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/content/docs/getting-started/daily-workflow.mdx b/content/docs/getting-started/daily-workflow.mdx index 427522a..82cb594 100644 --- a/content/docs/getting-started/daily-workflow.mdx +++ b/content/docs/getting-started/daily-workflow.mdx @@ -9,6 +9,7 @@ description: 用检查、格式化、测试、运行和构建形成可重复的 yanbao check yanxu fmt --write src yanbao test +yanbao audit yanbao run yanbao build --release ``` @@ -18,9 +19,10 @@ yanbao build --release | `check` | 发现词法、语法、类型、模块与清单问题 | 每次编辑后 | | `fmt --write` | 写回稳定、幂等的规范格式 | 提交前或保存时 | | `test` | 执行目录规格并比较期望输出 | 改动行为后 | +| `audit` | 复核锁图、来源、许可证、漏洞、目标与原生制品 | 依赖变化后及发布前 | | `run` | 通过项目入口与声明权限运行 | 本地验证完整流程 | | `build --release` | 生成优化的 YXB 或目标制品 | 发布候选阶段 | 依赖变化后先运行`yanbao install`,并把`言序.toml`与`言序.lock`一起提交。不要手工修改锁文件;需要理解某个包为何出现时,使用`yanbao tree`与`yanbao why 包名`。 -CI 至少应执行检查、格式化一致性、规格测试和构建。编辑器诊断用于缩短反馈时间,但不能代替这些可重复命令。命令全集见[CLI 参考](/reference/cli/),项目边界见[项目工程](/projects/)。 +CI 至少应执行检查、格式化一致性、规格测试、依赖审计和构建。需要机器消费时使用言包的 JSON 或 JSON Lines 输出,并保留非零退出状态。编辑器诊断用于缩短反馈时间,但不能代替这些可重复命令。命令全集见[CLI 参考](/reference/cli/),项目边界见[项目工程](/projects/)。 diff --git a/content/docs/tooling/package-manager.mdx b/content/docs/tooling/package-manager.mdx index 0368cf2..9a33e5b 100644 --- a/content/docs/tooling/package-manager.mdx +++ b/content/docs/tooling/package-manager.mdx @@ -1,9 +1,9 @@ --- title: 言包工程工具 -description: 使用言包创建项目,并通过短包名管理 GitHub 依赖。 +description: 使用言包 0.6.1 创建项目、管理依赖、恢复事务并执行结构化安全审计。 --- -言包(`yanbao`)是言序的官方工程与包管理工具,命令层完全由言序源码编写;仓库没有 Cargo 工程或 Rust 业务代码。0.5.0 要求言序 1.1.7 或更高版本,本站以 1.1.8 验收;它负责项目初始化、依赖、测试、YXB、Standalone、Bundle、缓存、诊断和打包,但不复制第二套 TOML、SemVer、依赖解析、锁图、YXB 或 Bundle 实现。 +言包(`yanbao`)是言序的官方工程与包管理工具,命令层完全由言序源码编写;仓库没有 Cargo 工程或 Rust 业务代码。当前稳定版为 0.6.1,普通命令要求言序 1.1.17 或更高版本;完整安全审计需要核心提供十二项 Schema 1 能力,稳定组合使用言序 1.1.20。它负责项目初始化、依赖、测试、YXB、Standalone、Bundle、缓存、诊断和打包,但不复制第二套 TOML、SemVer、依赖解析、锁图、YXB 或 Bundle 实现。 ## 最常用的包命令 @@ -18,7 +18,7 @@ yanbao install ## 安装 -请先安装言序 1.1.7 或更高版本,并确保`yanxu`位于`PATH`中。再运行言包安装器: +请先安装言序 1.1.17 或更高版本,并确保`yanxu`位于`PATH`中。本站推荐直接使用 1.1.20,再运行言包安装器: ```sh curl -fsSL https://get.yanxu.dev/yanbao | sh @@ -32,7 +32,7 @@ Windows 使用 PowerShell 安装器: irm https://get.yanxu.dev/yanbao/windows | iex ``` -安装器校验下载制品和版本,然后使用系统言序执行言包。可用`YANXU_BIN=/绝对路径/yanxu`指定运行时;言包不会复制或覆盖言序,也不需要 Rust 版言包。 +安装器校验下载制品和版本,然后使用系统言序执行言包。可用`YANXU_BIN=/绝对路径/yanxu`指定运行时,也可用`YANBAO_VERSION=0.6.1`固定安装;言包不会复制或覆盖言序,也不需要 Rust 版言包。 ## 创建项目 @@ -44,6 +44,8 @@ yanbao doctor --manifest-path 我的项目 `init`创建格式 2 的`言序.toml`、`言序.lock`、`src/主.yx`和`.gitignore`;不会创建 Git 仓库,也不会无提示覆盖已有模板。中文命令可写作`yanbao 新 我的项目`。 +0.6 起,`new/init`会在目标同一文件系统内暂存完整项目,完成解析与静态检查后再提交。`--force`只替换清单、入口、锁文件及言包新建的忽略文件,不会删除其他内容。中断后检测到恢复日志时,在确认没有其他进程操作项目后,为原命令增加`--recover`或`--恢复`;并发改写会以`TXN005`拒绝覆盖。 + ## 管理完整依赖图 ```sh @@ -55,7 +57,7 @@ yanbao remove 工具 yanbao install --offline ``` -`add/remove`默认重新解析完整直接与传递图;失败时同时恢复清单和锁文件。`--no-lock`可只编辑清单。格式 2 锁文件固定每条依赖边、精确版本/提交、来源、校验和、目标、导出和原生制品。 +`add/remove`默认先通过核心协议预演,再重新解析完整直接与传递图;普通失败会同时恢复清单和锁文件,中断现场使用同一`--recover`流程。项目创建、依赖编辑与其他项目命令共享独占锁,未完成事务会以`TXN001..TXN005`稳定拒绝并保留现场。`--no-lock`可只编辑清单。格式 2 锁文件固定每条依赖边、精确版本/提交、来源、校验和、目标、导出和原生制品。 ```sh yanbao tree @@ -67,6 +69,33 @@ yanbao doctor 这些命令分别解释依赖树、引入路径、可更新项、更新计划和工具链状态。`update --dry-run`不会改写锁文件;正式`update`才重新选择允许范围内的版本。 +## 严格命令行与结构化输出 + +0.6 起,中英文子命令、位置参数、布尔旗标、单值选项、互斥关系与`--`透传使用同一严格解析器。未知参数、缺值、重复和冲突不会回退到默认值,而是以`CLI001..CLI010`和非零状态失败。使用`yanbao help <命令>`或`yanbao <命令> --help`查询精确选项。 + +所有命令支持 human、JSON 与 JSON Lines: + +```sh +yanbao check --message-format json +yanbao build --release --message-format json-lines +yanbao test --timeout 900000 +``` + +结构化结果使用 Draft 2020-12 Schema 1,统一包含命令、成功状态、退出码、项目根、阶段、诊断、变更、制品和耗时。失败仍保持非零进程状态。`--timeout`、`--超时`或`YANBAO_TIMEOUT`接受 1..=86,400,000 毫秒,命令行值优先;默认值按元数据、检查、解析、测试、打包、构建和运行分别设置。 + +## 安全审计 + +```sh +yanbao audit +yanbao audit --deny-level medium +yanbao audit --suppress 'AUDIT_LICENSE_MISSING@2026-12-31@已复核内部依赖' +yanbao audit --message-format json +``` + +默认拒绝`critical`与`high`发现;可选门禁为`critical|high|medium|low|info|none`。精确抑制必须同时记录诊断代码、UTC 到期日和原因;到期项不会继续掩盖发现,并额外报告`AUDIT_SUPPRESSION_EXPIRED`。`--deny-warnings`兼容等价于 medium 门禁;`audit --json`是 JSON 输出简写,不能与`--message-format`同时使用。 + +言包会在审计前验证工程协议握手,并在响应后复验回显。核心必须完整声明锁定 SHA-256、来源传输、精确 Git 修订、SPDX 许可证、撤回、漏洞、重复版本、目标及原生 ABI/目标/摘要/来源证明十二项检查;缺失、不完整或不一致都以`AUDIT_CAPABILITY_MISSING`失败关闭。0.6.1 还会校验发现对象的代码、严重度、包名、消息和可选源码位置,畸形对象以`AUDIT_SCHEMA`拒绝。 + ## 开发、构建和分发 ```sh @@ -82,12 +111,14 @@ yanbao vendor yanbao audit ``` -`build`调用核心生成 YXB、当前平台 standalone 或 GUI Bundle;GUI 模板自动写入应用配置、独立权限和`yanxu-gui`依赖。`pack`生成确定性`.yxp`;`vendor`复制完整锁定图以便离线恢复;`audit`复核校验和、来源、许可证、重复版本与原生制品。工作区会对声明成员执行同一套命令。 +`build`调用核心生成 YXB、当前平台 standalone 或 GUI Bundle;GUI 模板自动写入应用配置、独立权限和`yanxu-gui ^1.0`依赖。`pack`生成确定性`.yxp`;`vendor`事务化复制完整锁定图以便离线恢复;`audit`执行上述完整能力协商。工作区会对声明成员执行同一套命令。 ## 职责与安全边界 言包通过`yanxu package protocol`的版本化 JSON 协议调用核心`yanxu-package`。启动时会协商清单 2、锁 2、YXB 1、工程协议 1、原生 ABI v1/v2 和 Bundle 操作;核心不兼容时会明确要求先升级言序。 -路径、Git 和索引包只有通过锁定与内容校验后才可参与模块加载。依赖权限不会传给应用,GUI 也不会自动授予文件或网络;第三方包不能自动执行构建脚本。原生后端必须来自锁定目标且通过摘要门禁,运行时不下载。言包 Release、标签和 CI 与核心运行时分别管理,不能以核心 Release 替代言包自身验收。 +路径、Git 和索引包只有通过锁定与内容校验、并发布为核心 1.1.20 的不可变 generation 后才可参与模块加载。依赖权限不会传给应用,GUI 也不会自动授予文件或网络;第三方包不能自动执行构建脚本。原生后端必须来自锁定目标且通过摘要门禁,运行时不下载。 + +言包 0.6.1 的六目标 Release 分别提供确定性 CycloneDX 1.5 SBOM、构建元数据与依赖锁,并用构建来源和 SBOM 证明绑定源码、正式言序编译器标签提交、目标和制品摘要。安装冒烟只消费先验验签后的本地只读快照,并在启动子进程前移除下载凭据。言包 Release、标签和 CI 与核心运行时分别管理,不能以核心 Release 替代言包自身验收。 源码、问题与贡献说明见[YanXuLang/yanbao](https://github.com/YanXuLang/yanbao)。 diff --git a/scripts/check-content.mjs b/scripts/check-content.mjs index 24cb221..d08f025 100644 --- a/scripts/check-content.mjs +++ b/scripts/check-content.mjs @@ -104,6 +104,13 @@ for (let patch = 6; patch <= 20; patch += 1) { assert.ok(migrationMeta.pages.includes(`1.1.${patch}`), `迁移导航缺少 1.1.${patch}`); } assert.match(read('content/docs/reference/migrations/1.1.20.mdx'), /1\.1\.17 用户应直接升级到 1\.1\.20/); +const packageManager = read('content/docs/tooling/package-manager.mdx'); +for (const requirement of [ + '0.6.1', '言序 1.1.20', 'CLI001..CLI010', 'TXN001..TXN005', + '--message-format', 'AUDIT_CAPABILITY_MISSING', 'CycloneDX 1.5', +]) { + assert.ok(packageManager.includes(requirement), `言包文档缺少 ${requirement}`); +} const stableLibraries = [ ['yanju', '1.2.0', '1.1.6', 'content/docs/ecosystem/yanju/index.mdx', '/ecosystem/yanju/'], From 5497f927181e0c6d32a537722ede0fdeeb134340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A7=80?= Date: Mon, 20 Jul 2026 19:19:12 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9A=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=A1=8C=E9=9D=A2=E7=94=9F=E6=80=81=E5=B9=B6=E6=A0=87?= =?UTF-8?q?=E6=98=8E=E5=85=BC=E5=AE=B9=E8=BE=B9=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 ++-- content/docs/ecosystem/desktop/api-reference.mdx | 2 +- .../docs/ecosystem/desktop/capability-matrix.mdx | 4 ++-- content/docs/ecosystem/desktop/choosing.mdx | 4 +++- content/docs/ecosystem/desktop/compatibility.mdx | 9 +++++---- .../docs/ecosystem/desktop/complete-example.mdx | 6 +++--- content/docs/ecosystem/desktop/configuration.mdx | 2 +- content/docs/ecosystem/desktop/controls.mdx | 2 +- content/docs/ecosystem/desktop/index.mdx | 6 +++++- content/docs/ecosystem/desktop/quick-start.mdx | 12 ++++++++---- .../docs/ecosystem/desktop/troubleshooting.mdx | 2 +- .../docs/ecosystem/desktop/ui-architecture.mdx | 6 ++++-- ...6\247\344\273\266\345\261\225\347\244\272.yx" | 2 +- "examples/desktop/\350\250\200\345\272\217.lock" | 16 ++++++++-------- "examples/desktop/\350\250\200\345\272\217.toml" | 4 ++-- scripts/check-content.mjs | 16 +++++++++++++++- 16 files changed, 62 insertions(+), 35 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92db243..7a5438b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,11 +71,11 @@ jobs: sudo apt-get -o Acquire::Retries=5 install -y \ libfontconfig1 libwayland-client0 libxkbcommon0 libxkbcommon-x11-0 \ libx11-6 xvfb - - name: 检出言序 1.1.20 + - name: 检出言序 1.1.9(言界已验证基线) uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: repository: YanXuLang/yanxu - ref: v1.1.20 + ref: v1.1.9 path: target/yanxu-core - name: 构建言序并锁定言界 run: | diff --git a/content/docs/ecosystem/desktop/api-reference.mdx b/content/docs/ecosystem/desktop/api-reference.mdx index 00267e5..fe0c5aa 100644 --- a/content/docs/ecosystem/desktop/api-reference.mdx +++ b/content/docs/ecosystem/desktop/api-reference.mdx @@ -22,7 +22,7 @@ description: 言界常用公开入口与言台版本化原语的索引。 | 容器 | 行、列、堆叠、网格、滚动、列表、标签页、分割面板、菜单、弹出层、画布、图片 | | 系统服务 | 剪贴板读取/写入、打开文件/多个文件、保存文件、选择目录/多个目录 | -完整、由源码快照生成的签名参考见[言界 REFERENCE](https://github.com/yanxulang/yanxu-ui/blob/v0.1.0/docs/REFERENCE.md),叙事 API 见[言界 API](https://github.com/yanxulang/yanxu-ui/blob/v0.1.0/docs/API.md)。 +完整、由源码快照生成的签名参考见[言界 REFERENCE](https://github.com/yanxulang/yanxu-ui/blob/v0.1.1/docs/REFERENCE.md),叙事 API 见[言界 API](https://github.com/yanxulang/yanxu-ui/blob/v0.1.1/docs/API.md)。 ## 言台原语 diff --git a/content/docs/ecosystem/desktop/capability-matrix.mdx b/content/docs/ecosystem/desktop/capability-matrix.mdx index f4350ef..d36a216 100644 --- a/content/docs/ecosystem/desktop/capability-matrix.mdx +++ b/content/docs/ecosystem/desktop/capability-matrix.mdx @@ -1,6 +1,6 @@ --- title: 平台能力表 -description: 言台与言界 0.1.0 在六个正式桌面目标上的能力和验证范围。 +description: 言台 0.1.0 与言界 0.1.1 在六个正式桌面目标上的能力和验证范围。 --- `支持`表示同一公开接口已实现并进入六目标 CI;`桌面验证`表示自动测试可覆盖确定部分,但最终体验还依赖真实用户会话。 @@ -34,6 +34,6 @@ x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu ``` -每个目标都会核对动态库实际架构、包清单摘要、言序 1.1.8 类型检查、ABI 集成、API 漂移和 Release 构建。真实窗口自动退出在六个执行器运行;Linux 使用 Xvfb 验证 X11 路径,Wayland 与实际输入法会话需另做桌面冒烟。 +每个目标都会核对动态库实际架构、包清单摘要、言序 1.1.9 类型检查、ABI 集成、API 漂移和 Release 构建。真实窗口自动退出在六个执行器运行;Linux 使用 Xvfb 验证 X11 路径,Wayland 与实际输入法会话需另做桌面冒烟。该矩阵是 0.1.1 的发布证据,不代表已经兼容当前核心 1.1.20。 运行时应调用言台`能力查询()`,根据字段判断可选能力;不要只根据操作系统名称猜测。 diff --git a/content/docs/ecosystem/desktop/choosing.mdx b/content/docs/ecosystem/desktop/choosing.mdx index a99f7e0..30b0956 100644 --- a/content/docs/ecosystem/desktop/choosing.mdx +++ b/content/docs/ecosystem/desktop/choosing.mdx @@ -3,13 +3,15 @@ title: 选择 GUI 路线 description: 根据项目阶段、控件需求、稳定性与定制程度选择言窗或言界。 --- +当前稳定言序 1.1.20 与言包 0.6.1 的新项目应选择言窗 1.0。言界 0.1.1 只保留言序 1.1.9 + 言包 0.5.0 的已验证预览组合;在新版本发布前,不要把它与当前工具链混装。 + ## 直接选择言窗 以下情况优先使用稳定的[`yanxu-gui` 1.0](/ecosystem/desktop/gui/): - 现有应用已经上线,当前控件和主题足够; - 希望依赖成熟的 egui 生态与立即模式开发方式; -- 需要言界`0.1.0`尚未提供的复杂控件; +- 需要言界`0.1.1`尚未提供的复杂控件; - 不希望在首版阶段承担新 API 迭代成本。 - 需要由 CI 汇总并校验的 Windows、macOS、Linux 六目标原生制品。 diff --git a/content/docs/ecosystem/desktop/compatibility.mdx b/content/docs/ecosystem/desktop/compatibility.mdx index 1415e22..9b89704 100644 --- a/content/docs/ecosystem/desktop/compatibility.mdx +++ b/content/docs/ecosystem/desktop/compatibility.mdx @@ -19,15 +19,16 @@ description: 言界、言台、言序、言包、言据和言窗之间的兼容 | 组件 | 兼容范围 | 已验证版本 | | --- | --- | --- | -| 言序 | `>=1.1.8`,语言规范 1 | 1.1.8 | +| 言序 | 清单声明`>=1.1.9`;当前可复现基线固定 1.1.9 | 1.1.9 | | 言包 | 格式 2 清单与锁文件 | 0.5.0 | | 言台 | `^0.1`,ABI v2 | 0.1.0 | -| 言界 | `^0.1` | 0.1.0 | +| 言界 | `^0.1` | 0.1.1 | | 言据 | `^1.1` | 1.1.2 | | 言窗 | 独立并行路线 | 1.0.0 | -言界要求言序`1.1.8`提供 Windows VM 所有者线程的 8 MiB 栈修复;言台本身仍兼容 -`>=1.1.7`。新路线不会替换、废弃或强制迁移`yanxu-gui`。 +言界 0.1.1 要求言序 1.1.9,以获得 Windows VM 所有者线程栈修复和按宿主事件隔离的执行步数预算;本站 CI 固定复现该发布基线。言台本身仍兼容`>=1.1.7`,言界的锁定发布继续使用言据 1.1.2。 + +言界清单虽声明`>=1.1.9`,但 0.1.1 源码目前不能通过言序 1.1.20 的静态检查;同时言包 0.6.1 最低要求核心 1.1.17。因此不存在“言序 1.1.20 + 言包 0.6.1 + 言界 0.1.1”的受支持组合。当前稳定工具链使用言窗 1.0;言界等待后续版本修复并重新发布。新路线不会替换、废弃或强制迁移`yanxu-gui`。 ## 版本政策 diff --git a/content/docs/ecosystem/desktop/complete-example.mdx b/content/docs/ecosystem/desktop/complete-example.mdx index d611d56..d539069 100644 --- a/content/docs/ecosystem/desktop/complete-example.mdx +++ b/content/docs/ecosystem/desktop/complete-example.mdx @@ -3,14 +3,14 @@ title: 完整示例 description: 一个包含菜单、列表、分割面板、标签页、文本和画布的可运行言界应用。 --- -以下源码与文档仓库`examples/ecosystem/desktop/综合控件展示.yx`完全一致,并由 CI 使用言序`1.1.8`执行类型检查和 Release YXB 构建。 +以下源码与文档仓库`examples/desktop/综合控件展示.yx`完全一致,并由 CI 使用言界 0.1.1 已验证的言序`1.1.9`执行类型检查和 Release YXB 构建。当前核心用户应先阅读[版本兼容政策](/ecosystem/desktop/compatibility/)中的兼容缺口。 ```yanxu 引「包:言界」为 界面; 定 应用 为 界面.应用(「言界综合控件展示」); -定 窗口 为 应用.窗口({「标题」:「言界 0.1.0」,「宽」:960,「高」:700,「最小宽」:720,「最小高」:520}); +定 窗口 为 应用.窗口({「标题」:「言界 0.1.1」,「宽」:960,「高」:700,「最小宽」:720,「最小高」:520}); 定 主列 为 窗口.列({「内边距」:18,「间距」:10}); @@ -59,4 +59,4 @@ description: 一个包含菜单、列表、分割面板、标签页、文本和 应用.运行(); ``` -项目清单使用[快速开始](/ecosystem/desktop/quick-start/)中的言界`v0.1.0`依赖和四项权限。先运行`yanbao 装`,再用`yanbao 查`检查;开发桌面运行应用,发布时执行`yanbao 构 --release --bundle`。 +项目清单使用[快速开始](/ecosystem/desktop/quick-start/)中的言界`v0.1.1`依赖和四项权限。先运行`yanbao 装`,再用`yanbao 查`检查;开发桌面运行应用,发布时执行`yanbao 构 --release --bundle`。 diff --git a/content/docs/ecosystem/desktop/configuration.mdx b/content/docs/ecosystem/desktop/configuration.mdx index 619323f..dc1adbc 100644 --- a/content/docs/ecosystem/desktop/configuration.mdx +++ b/content/docs/ecosystem/desktop/configuration.mdx @@ -7,7 +7,7 @@ description: 固定言界、言台和言据版本,并为 GUI 系统服务声 ```toml [依赖] -言界 = { 包 = "yanxu-ui", git = "https://github.com/yanxulang/yanxu-ui.git", 修订 = "v0.1.0", 版 = "^0.1" } +言界 = { 包 = "yanxu-ui", git = "https://github.com/yanxulang/yanxu-ui.git", 修订 = "v0.1.1", 版 = "^0.1" } [权限] 图形界面 = true diff --git a/content/docs/ecosystem/desktop/controls.mdx b/content/docs/ecosystem/desktop/controls.mdx index c7b784a..2039602 100644 --- a/content/docs/ecosystem/desktop/controls.mdx +++ b/content/docs/ecosystem/desktop/controls.mdx @@ -1,6 +1,6 @@ --- title: 控件 -description: 使用言界 0.1.0 的基础、输入、导航和绘制控件。 +description: 使用言界 0.1.1 的基础、输入、导航和绘制控件。 --- 所有高级控件都由言序实现,并共享显示、启用、焦点、尺寸、边距、样式、事件和无障碍接口: diff --git a/content/docs/ecosystem/desktop/index.mdx b/content/docs/ecosystem/desktop/index.mdx index 464b595..da9d7ad 100644 --- a/content/docs/ecosystem/desktop/index.mdx +++ b/content/docs/ecosystem/desktop/index.mdx @@ -22,11 +22,15 @@ winit,适合需要稳定、完整控件和六目标发布的应用;**言界 | 路线 | 版本 | 最低言序 | Windows | macOS | Linux GNU | | --- | ---: | ---: | --- | --- | --- | | 言窗 `yanxu-gui` | 1.0.0 | 1.1.12 | x86-64 / ARM64 | x86-64 / ARM64 | x86-64 / ARM64 | -| 言界 + 言台 | 0.1.x | 1.1.8 | x86-64 / ARM64 | x86-64 / ARM64 | x86-64 / ARM64 | +| 言界 0.1.1 + 言台 0.1.0 | 0.1.x | 1.1.9 | x86-64 / ARM64 | x86-64 / ARM64 | x86-64 / ARM64 | 言窗 1.0 的 Linux GNU 制品最高需要 glibc 2.39;不支持 musl、WebAssembly、移动平台 或 32 位目标。言界/言台有独立版本和兼容文档,升级一条路线不会隐式升级另一条。 + + 言界 0.1.1 的发布门禁只验证言序 1.1.9;其源码目前不能通过言序 1.1.20 的静态检查,言包 0.6.1 又要求核心至少 1.1.17。当前稳定工具链的新项目应选择言窗 1.0。言界页面保留为锁定 1.1.9 + 言包 0.5.0 的预览路线,等待后续言界版本重新建立兼容线。 + + ## 两条路线的边界 言窗公开应用、窗口、布局、控件、事件、图片、画布、剪贴板和文件对话框对象,控件由 diff --git a/content/docs/ecosystem/desktop/quick-start.mdx b/content/docs/ecosystem/desktop/quick-start.mdx index 0f426bf..a0f01d9 100644 --- a/content/docs/ecosystem/desktop/quick-start.mdx +++ b/content/docs/ecosystem/desktop/quick-start.mdx @@ -1,20 +1,24 @@ --- title: 快速开始 -description: 使用言序 1.1.8 和言包安装言界,构建第一个原生窗口。 +description: 使用言序 1.1.9、言包 0.5.0 与言界 0.1.1 复现已验证的预览组合。 --- -先确认`yanxu --version`为`1.1.8`或兼容版本,`yanbao --version`为`0.5.0`或兼容版本。创建普通言序项目后,在`言序.toml`中加入言界: + + 本页复现言界 0.1.1 发布时的已验证组合:言序 1.1.9 与言包 0.5.0。言序 1.1.20 会在言界源码的可空目标变量处报告类型错误,言包 0.6.1 也不能运行在 1.1.9 上。使用当前稳定工具链时,请改走[言窗 1.0](/ecosystem/desktop/gui/)。 + + +先确认`yanxu --version`为`1.1.9`,`yanbao --version`为`0.5.0`。创建普通言序项目后,在`言序.toml`中加入言界: ```toml [包] 格式 = 2 名称 = "我的窗口" 版本 = "0.1.0" -言序 = ">=1.1.8" +言序 = ">=1.1.9" 入口 = "src/主.yx" [依赖] -言界 = { 包 = "yanxu-ui", git = "https://github.com/yanxulang/yanxu-ui.git", 修订 = "v0.1.0", 版 = "^0.1" } +言界 = { 包 = "yanxu-ui", git = "https://github.com/yanxulang/yanxu-ui.git", 修订 = "v0.1.1", 版 = "^0.1" } [权限] 图形界面 = true diff --git a/content/docs/ecosystem/desktop/troubleshooting.mdx b/content/docs/ecosystem/desktop/troubleshooting.mdx index 57b6e5d..15a3808 100644 --- a/content/docs/ecosystem/desktop/troubleshooting.mdx +++ b/content/docs/ecosystem/desktop/troubleshooting.mdx @@ -5,7 +5,7 @@ description: 定位依赖锁、权限、显示会话、ABI、绘制、资源和 ## 包无法解析或原生库不匹配 -确认依赖使用存在的`v0.1.0`标签,删除手工复制的动态库,再在目标平台运行`yanbao 装`。检查`言序.lock`中的目标、ABI、SHA-256 和大小;不要复用另一架构的锁。 +确认言界依赖使用存在的`v0.1.1`标签、言台由锁图解析到兼容的`v0.1.0`,删除手工复制的动态库,再在目标平台运行`yanbao 装`。检查`言序.lock`中的目标、ABI、SHA-256 和大小;不要复用另一架构的锁。 ## 权限错误 diff --git a/content/docs/ecosystem/desktop/ui-architecture.mdx b/content/docs/ecosystem/desktop/ui-architecture.mdx index b6148f7..ba3398c 100644 --- a/content/docs/ecosystem/desktop/ui-architecture.mdx +++ b/content/docs/ecosystem/desktop/ui-architecture.mdx @@ -1,6 +1,6 @@ --- title: 言界架构 -description: 言界 0.1.0 的保留模式控件树、布局、事件、文本与渲染管线。 +description: 言界 0.1.1 的保留模式控件树、布局、事件、文本与渲染管线。 --- 言界除调用言台的边界模块外全部使用言序编写。一个窗口拥有一棵长期存在的控件树;属性变化标记布局或绘制脏区,下一帧只重新计算受影响的子树,再把渲染树编码为一个`YXDR`帧提交。 @@ -30,4 +30,6 @@ description: 言界 0.1.0 的保留模式控件树、布局、事件、文本与 按钮等高级控件完整处理悬停、按下、键盘激活和绘制;言台没有“创建按钮”操作。言界源码也不包含 Win32、AppKit、Wayland、X11 或平台指针分支。 -实现细节见[言界架构](https://github.com/yanxulang/yanxu-ui/blob/v0.1.0/docs/ARCHITECTURE.md)与[API 文档](https://github.com/yanxulang/yanxu-ui/blob/v0.1.0/docs/API.md)。 +0.1.1 会按样式名与悬停、按下、焦点、禁用状态位缓存主题解析结果,并缓存基础样式与控件种类样式的合并,避免每个控件在每帧重复深合并。缓存只改变渲染开销,不改变主题字段、继承或状态优先级。 + +实现细节见[言界架构](https://github.com/yanxulang/yanxu-ui/blob/v0.1.1/docs/ARCHITECTURE.md)与[API 文档](https://github.com/yanxulang/yanxu-ui/blob/v0.1.1/docs/API.md)。 diff --git "a/examples/desktop/\347\273\274\345\220\210\346\216\247\344\273\266\345\261\225\347\244\272.yx" "b/examples/desktop/\347\273\274\345\220\210\346\216\247\344\273\266\345\261\225\347\244\272.yx" index a0de3e8..c4ea296 100644 --- "a/examples/desktop/\347\273\274\345\220\210\346\216\247\344\273\266\345\261\225\347\244\272.yx" +++ "b/examples/desktop/\347\273\274\345\220\210\346\216\247\344\273\266\345\261\225\347\244\272.yx" @@ -2,7 +2,7 @@ 定 应用 为 界面.应用(「言界综合控件展示」); -定 窗口 为 应用.窗口({「标题」:「言界 0.1.0」,「宽」:960,「高」:700,「最小宽」:720,「最小高」:520}); +定 窗口 为 应用.窗口({「标题」:「言界 0.1.1」,「宽」:960,「高」:700,「最小宽」:720,「最小高」:520}); 定 主列 为 窗口.列({「内边距」:18,「间距」:10}); diff --git "a/examples/desktop/\350\250\200\345\272\217.lock" "b/examples/desktop/\350\250\200\345\272\217.lock" index 4012b8c..51791b0 100644 --- "a/examples/desktop/\350\250\200\345\272\217.lock" +++ "b/examples/desktop/\350\250\200\345\272\217.lock" @@ -1,10 +1,10 @@ lock_version = 2 -manifest_checksum = "b8b2267d3bc5e79d30b75b2a5f6c03ba57178f452f442047d1c355344cff7760" +manifest_checksum = "9287fbf4340310fae1aeef66c4eb2aafca93c0c74a6d31b13eac3bbabe5ac5a8" target = "aarch64-apple-darwin" -generator = "1.1.8" +generator = "1.1.9" [root_dependencies] -"言界" = "yanxu-ui@0.1.0#44f9b5e8534a-99284e04a96b47cd" +"言界" = "yanxu-ui@0.1.1#44f9b5e8534a-193ba75d1d46bdf0" [root_dev_dependencies] @@ -32,15 +32,15 @@ checksum = "ad91b0a85a9f39926dc2b2127a648b29eaff2e4b3521be893f7c11ec7ffc3c9c" size = 4670368 [[package]] -id = "yanxu-ui@0.1.0#44f9b5e8534a-99284e04a96b47cd" +id = "yanxu-ui@0.1.1#44f9b5e8534a-193ba75d1d46bdf0" name = "yanxu-ui" -version = "0.1.0" +version = "0.1.1" source = "git:https://github.com/yanxulang/yanxu-ui.git" -revision = "d1805e5085d4819b9f1939829a3468b64fceb329" -checksum = "99284e04a96b47cd584689c1d959c6d427d4a9b816385acc7d85ec63490542fd" +revision = "fb7776baa05ba4ec950696eb9a4cc1f11f290638" +checksum = "193ba75d1d46bdf0489fc5c7efd667f4f1c3dad0ee578d2461c84e2bc44494c9" entry = "src/主.yx" target = "aarch64-apple-darwin" -minimum_yanxu = ">=1.1.8" +minimum_yanxu = ">=1.1.9" [package.dependencies] "言台" = "yanxu-platform@0.1.0#d95caa6bf952-93c96bdb2e39ad2a" diff --git "a/examples/desktop/\350\250\200\345\272\217.toml" "b/examples/desktop/\350\250\200\345\272\217.toml" index 4eee698..59e5fc8 100644 --- "a/examples/desktop/\350\250\200\345\272\217.toml" +++ "b/examples/desktop/\350\250\200\345\272\217.toml" @@ -2,11 +2,11 @@ 格式 = 2 名称 = "言序文档图形示例" 版本 = "0.1.0" -言序 = ">=1.1.8" +言序 = ">=1.1.9" 入口 = "自动关闭冒烟.yx" [依赖] -言界 = { 包 = "yanxu-ui", git = "https://github.com/yanxulang/yanxu-ui.git", 修订 = "v0.1.0", 版 = "^0.1" } +言界 = { 包 = "yanxu-ui", git = "https://github.com/yanxulang/yanxu-ui.git", 修订 = "v0.1.1", 版 = "^0.1" } [应用] 类型 = "图形" diff --git a/scripts/check-content.mjs b/scripts/check-content.mjs index d08f025..76c0205 100644 --- a/scripts/check-content.mjs +++ b/scripts/check-content.mjs @@ -94,7 +94,9 @@ assert.equal(packageJson.version, '1.1.20'); assert.match(read('content/docs/standard-library/index.mdx'), /25 个标准模块/); assert.match(read('app/layout.tsx'), /metadataBase:\s*new URL\('https:\/\/docs\.yanxu\.dev\/'\)/); -assert.match(read('.github/workflows/ci.yml'), /ref: v1\.1\.20/g, '示例 CI 未固定言序 1.1.20'); +const docsCi = read('.github/workflows/ci.yml'); +assert.match(docsCi, /name: 入门语言示例[\s\S]*?ref: v1\.1\.20/, '语言示例 CI 未固定言序 1.1.20'); +assert.match(docsCi, /name: 桌面生态示例[\s\S]*?ref: v1\.1\.9/, '言界示例 CI 未固定已验证的言序 1.1.9'); assert.match(read('content/docs/language/binary-data.mdx'), /单值硬上限为 16 MiB/); assert.match(read('content/docs/reference/project-format.mdx'), /\| 字节码块 \| 2 \| 2 \|/); assert.match(read('content/docs/reference/permissions.mdx'), /15 项宿主能力/); @@ -111,6 +113,18 @@ for (const requirement of [ ]) { assert.ok(packageManager.includes(requirement), `言包文档缺少 ${requirement}`); } +const desktopManifest = read('examples/desktop/言序.toml'); +assert.match(desktopManifest, /言序 = ">=1\.1\.9"/); +assert.match(desktopManifest, /修订 = "v0\.1\.1"/); +const desktopLock = read('examples/desktop/言序.lock'); +assert.match(desktopLock, /generator = "1\.1\.9"/); +assert.match(desktopLock, /yanxu-ui@0\.1\.1/); +assert.match(desktopLock, /minimum_yanxu = ">=1\.1\.9"/); +const desktopCompatibility = read('content/docs/ecosystem/desktop/compatibility.mdx'); +for (const requirement of ['1.1.9', '1.1.20', '0.5.0', '0.6.1', '0.1.1', '1.1.2']) { + assert.ok(desktopCompatibility.includes(requirement), `桌面兼容矩阵缺少 ${requirement}`); +} +assert.match(desktopCompatibility, /不存在“言序 1\.1\.20 \+ 言包 0\.6\.1 \+ 言界 0\.1\.1”/); const stableLibraries = [ ['yanju', '1.2.0', '1.1.6', 'content/docs/ecosystem/yanju/index.mdx', '/ecosystem/yanju/'], From 07b673fd6821e30b4a7aa81ecdc8101b48f60aab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A7=80?= Date: Mon, 20 Jul 2026 19:29:16 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9A=E6=A0=A1?= =?UTF-8?q?=E6=AD=A3=E8=BF=81=E7=A7=BB=E6=8C=87=E5=8D=97=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/docs/reference/migrations/index.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/reference/migrations/index.mdx b/content/docs/reference/migrations/index.mdx index 3718841..c6e8368 100644 --- a/content/docs/reference/migrations/index.mdx +++ b/content/docs/reference/migrations/index.mdx @@ -20,9 +20,9 @@ description: 按目标版本核对行为、权限、公共格式和应用制品 - - + + 源码弃用可先运行`yanxu migrate --check`或`yanxu migrate --diff`。公共格式主版本与兼容策略见[公共格式](/reference/formats/)和[1.x 兼容政策](/reference/compatibility/)。