仓库包构建

在仓库根目录运行豫构。包名取自 。包。豫 文件名,包根就是文件所在目录。配置只调用 parser,不执行代码。依赖声明和用户身份规则见包系统

包边界

目录 职责
标准库 库/标准库 语言核心与基础库;不依赖拓展库
拓展库 库/拓展库 解析组合子、测试框架等
工具包 库/工具包 数据库、绘图等库
构建基础 库/构建基础 包定位、上下文、并行调度;不依赖编译器
豫言编译器 豫言编译器 编译器;默认入口为入口。豫
包配置 库/包配置 静态配置解析与包依赖图;使用编译器的 parser
豫构 工具/豫构 独立构建工具与自身测试;默认入口为入口。豫
源码排版 库/源码排版 共享排版库及测试
独立工具 工具/各工具名 每个工具独立目录、包描述与入口,不再有工具总包
测试 测试 语言测试与从标准库移出的库测试
性能研究 性能研究 性能实验入口
文例 文档 文档中的可编译源码示例

核心依赖顺序为“标准库 → 构建基础/拓展库 → 豫言编译器 → 包配置 → 豫构”(箭头表示先构建者在前)。不能把构建基础放回依赖编译器的包配置或豫构,否则会形成包依赖环。

标准库中需要拓展库测试框架的测试已迁到 测试/标准库,防止基础库反向依赖测试框架。测试包中有预期失败用例,不能将其所有源码一律视为成功构建目标。*_v0 不参与迁移;旧界面语法草案归入 文档/界面语法设想。豫

导入

寻观「标准库」之书。
寻观「标准库」之「数据结构」之「多态列」之书。
寻观「构建基础」之「包定位」之书。

单段“标准库”固定定位 库/标准库/总集。豫,导入后的模块名称仍为“标准库”。所有包遵循同一规则:总集必须手写,不存在就报错,不尝试其他文件,也不按当前目录搜索。内核位于 标准库/豫言标准内核。豫。总集与程序入口无关;“诵”的重新导出语义保持不变。

工具应用 仅是分类目录。所有包地位相同,导入不带分类目录;标准库转发文件及特殊搜索路径已删除。

构建与测试

make 豫构
make 类型检查 豫构测试
./yy豫构 检查 豫言编译器
./yy豫构 构建 豫言编译器 --输出 yy编译器
./yy豫构 构建 源码树浏览器 --输出 yy源码树
./yy豫构 构建 文档网站生成器 --输出 yy文档网站
./yy豫构 构建 测试 标准库 数据结构 可选值。测试 --输出 yy可选值测试
./yy可选值测试

构建、类型检查命令可在包名后指定入口的各路径段;不带扩展名,不重复包名。省略时使用包文件中的入口字段。没有默认入口的库仍可被依赖,也能通过显式入口构建其中的程序。入口覆盖不允许跨越子包边界,不放宽直接依赖要求。

自举启动

发布包的 构建.sh 同时生成 yy_bs_stableyy豫构_stable。将两者安装到仓库根目录;make 从首级起就用稳定豫构构建包,依次生成 yy2_bsyy3_bsyy4_bs,比较固定点,再构建正式豫构。不再生成 yy豫构引导,也不使用旧单文件启动模式。

./yy豫构 自举包 --输出 dist/新自举包 导出同一源码版本的双种子;目录必须尚不存在。各种子的 LLVM 只取本次编译闭包,不能混用整个缓存。导出器目前仅支持编译器和豫构种子,不承诺任意第三方原生包导出。初始平台运行时仍由 Make 准备,包内 C 由豫构管理。

更改依赖、包路径或子包边界后,上下文缓存会隔离,不复用旧绑定。原生 LLVM、运行时构建要求未变。此版本不获取远程依赖、不求解版本,也没有锁文件。