VEP 3: 第三方库与工具规范

状态
草稿
类型
标准
创建日期
2026-06-30
作者
Fexcode

VEP 3 — 第三方库与工具规范

摘要

定义 Vix 第三方库和命令行工具(vtool)的项目结构、入口文件与配置规范,确保工具链(包管理器、编译器、运行时)能统一发现和加载第三方项目。

动机

Vix 语言的发展需要健康的第三方生态。统一的项目结构规范可以带来以下好处:

  • 包管理器可以自动识别库入口和工具入口,无需额外配置
  • 编译器可以快速定位项目的公开 API
  • 开发者在不同项目间切换时有一致的认知模型
  • 为后续的包注册、版本解析、依赖分析等功能奠定基础

前置依赖

本规范依赖 VEP2(vindex.toml 规范)定义的配置格式。第三方项目必须在其根目录包含 vindex.toml 文件。

详细设计

1. vindex.toml 相关字段

本规范涉及 vindex.toml[project] 表的以下字段:

字段 适用 说明
name 库/工具 项目名称,须符合包名缩写规则
version 库/工具 语义化版本号
deps 库/工具 依赖列表
entrypoint 工具 工具入口文件路径,相对于项目根目录
readme 库/工具 指向帮助文档或说明文件,推荐填写

2. 第三方库规范

入口文件:

第三方库的入口文件必须是项目根目录下的 main.vix。这是唯一被认可的库入口,工具链通过此文件加载库的公共 API。

公共 API 边界:

  • main.vix 中 re-export 的所有符号构成该库的公共 API
  • 未被 main.vix 导出(import 后再 export)的符号视为私有,外部不可访问
  • 这一约定鼓励库作者显式设计公共接口,避免意外暴露内部实现

示例结构:

库名/
├── vindex.toml
├── main.vix           # 库入口,re-export 公共 API
└── src/               # 源码目录
    ├── module_a.vix
    └── module_b.vix

3. vtool 规范

vtool 是用 Vix 编写的命令行工具,可通过包管理器直接安装和调用。

入口文件:

vtool 的入口文件通过 vindex.tomlproject.entrypoint 字段指定。该字段值为相对于项目根目录的文件路径。此字段对 vtool 为必需项

帮助信息:

vtool 可通过 project.readme 字段指定帮助文件的位置。当用户在命令行调用 --help 时,工具链可以读取该文件并展示帮助内容。

示例:

[project]
name = "vfmt"
version = "1.0.0"
entrypoint = "src/vfmt.vix"
readme = "README.md"

对应的目录结构:

vfmt/
├── vindex.toml
├── src/
│   └── vfmt.vix       # entrypoint 指向此处
└── tests/

4. 目录结构约定

以下为推荐的项目目录布局,工具链可能基于这些约定提供默认行为。

库项目:

库名/
├── vindex.toml
├── main.vix           # 库入口
├── src/               # 源码目录
├── tests/             # 测试目录
└── docs/              # 文档(可选)

工具项目:

工具名/
├── vindex.toml
├── src/               # 源码目录
│   └── cli.vix        # 推荐入口文件位置
├── tests/             # 测试目录
└── docs/              # 文档(可选)

兼容性考虑

  • 本规范仅适用于新建的第三方项目,不追溯已有项目
  • 已有项目可通过添加 main.vix 或配置 entrypoint 逐步迁移
  • main.vix 作为强制入口的设计与 VEP2 的 entrypoint 字段不冲突:库使用 main.vix,工具使用 entrypoint

未决问题

  • 是否需要支持 main.vix 之外的库入口名称(如 lib.vix),目前保持单一入口策略

参考文献


This site uses Just the Docs, a documentation theme for Jekyll.