跳到正文豫言

豫言操作系统总体架构

2026-10-13 修订。本篇写豫言操作系统现行的架构与定下的方向。两层接口的逐条规范以仓库根目录的 豫寓榫卯/ 与 豫寓底榫卯/ 为准,格式细节见文末所列的提案与规范。文言本见文言版。

一、要点

  1. 豫言写到底。 编译器、执行器、内核、驱动、构建与验证工具都用豫言写成;从源码到机器码与可执行文件,全程由豫言自己完成。
  2. 豫汇是执行边界。 编译器把程序编成豫汇(豫言汇编):带垃圾回收的豫汇,与不带垃圾回收的底层豫汇。各后端都从豫汇出发。
  3. 树码是豫言代码的统一二进制表示。 豫汇模块存成汇编树码(。树码);编译器各阶段的中间产物与设计作品沿用同一种外框。原生后端直接读汇编树码生成机器码。
  4. 豫行是原生程序的格式。 豫言操作系统上的程序、工具与开机程序都是豫行文件(。豫行),指令集有 ARM64 与 AMD64 两种。
  5. 网页汇编是面向网页的输出。 浏览器与云工(Cloudflare Worker)两个网页后端运行由豫汇导出的网页汇编(WasmGC);网页汇编与汇编树码一一对应。
  6. 两层接口,能力即授权。 应用用带垃圾回收的豫言操作系统接口;执行器内部以不带垃圾回收的豫言操作系统底层接口为窄腰。应用依赖的能力一律必需,运行时的资源授权另行核对。

二、总览

豫言程序经自托管编译器编成豫汇,存为汇编树码。原生一侧由裸机后端生成机器码,写成豫行文件在豫言操作系统上运行,或写成 Mach-O、ELF、PE 在 macOS、Linux、Windows 上运行;网页一侧导出网页汇编,在浏览器与云工上运行。
豫汇是执行边界,树码是它的存放形式;原生程序是豫行,网页程序是网页汇编。以后各桌面系统经启动器运行同一个豫行(提案 00021)。
层 原生(豫言操作系统与桌面系统) 网页(浏览器、云工)
源程序 豫言程序(。豫) 同左
编译器前端 解析、名称解析、类型检查、类型擦除、跨模块优化、闭包转换 同左
执行边界 豫汇,存成汇编树码(。树码) 豫汇
后端 裸机后端:预编二、寄存器降级(ARM64、AMD64)、写出器 网页汇编编码器
程序形式 豫言操作系统上是豫行(。豫行);macOS、Linux、Windows 上是编译器直出的 Mach-O、ELF、PE 网页汇编模块(.wasm)
运行时 执行器(客体二号):垃圾回收、原语、装载单元、平台层 随模块生成的回收运行时,加宿主胶水
进入系统 豫言内核服务;libSystem;Linux 系统调用;kernel32 浏览器接口;Worker 接口

三、树码

树码(提案 00001)是豫言代码的统一二进制表示。文件以“树码”二字的 UTF-8 开头,文件头写明版本与种类,正文按该种类的结构表编码。现行的种类:

四、豫行

豫行(提案 00005,豫行格式)是豫言操作系统的可执行格式。

五、编译与执行

源码 → 前端 → 豫汇(汇编树码)
                ├─ 预编二:带垃圾回收的函数转成底层函数,并入执行器
                │    → 寄存器降级(ARM64、AMD64)
                │    → 写出器:豫行、Mach-O、ELF、PE、装载单元
                └─ 网页汇编编码器 → .wasm(浏览器、云工)

六、两层接口

七、豫言操作系统

八、各宿主

宿主 程序形式 进入系统
豫言操作系统(ARM64、AMD64) 豫行 豫言内核服务
macOS(arm64) 编译器直出的 Mach-O,带特设签名 libSystem
Linux(x86-64、arm64) 编译器直出的静态 ELF 系统调用
Windows(x64、arm64) 编译器直出的 PE kernel32
浏览器 网页汇编 浏览器接口与宿主胶水
云工(Cloudflare Worker) 网页汇编 Worker 接口与宿主胶水

各宿主对同一程序给出相同的接口语义,由一致性验证保证。

九、工具链与自举

十、后续版本的事项

延伸阅读