跳到正文豫言教程

快速开始

以下步骤适用于 Linux 和 macOS,只需 curl 与 tar(macOS 自带):

# Debian / Ubuntu
sudo apt-get update
sudo apt-get install curl tar

构建工具链

在仓库根目录下载 CI 发布的本平台原生工具链包(macOS Apple 芯片取 yuyan-native-macos-arm64.tar.gz,Linux x86-64 取 yuyan-native-linux-x64.tar.gz,Linux arm64 取 yuyan-native-linux-arm64.tar.gz),解压到仓库根目录(豫构在自己旁边找执行器),再由包里的豫构以当前源码构建一级原生豫构,然后原生自举:

curl --fail --location \
  https://github.com/yuyan-lang/yuyan/releases/download/continuous-binaries/yuyan-native-linux-x64.tar.gz \
  --output 原生工具链包.tar.gz
tar -xzf 原生工具链包.tar.gz
./豫构稳定。林檎。豫行 构建 豫构 --输出 豫构。林檎。豫行 -j 24 -- --目标 本机 --执行器 执行器。树码
./豫构。林檎。豫行 全部 -j 24

解压后得到原生豫构 豫构稳定。林檎。豫行 与执行器汇编树码 执行器。树码。第一步以当前源码构建一级原生豫构;第二步「全部」原生自举(二级、三级,核对两级产物逐字节相同),装上本机原生工具链 豫构。林檎。豫行、编译器。林檎。豫行 与执行器,并构建浏览器与云工两个网页后端用的 Wasm 编译器与豫构。此后构建与各工具都用原生程序 ./豫构。林檎。豫行 …。要与 CI 使用同一版本,可改下载 historical-binaries 发布中的 <提交时间>-yuyan-native-<平台>-<提交号>.tar.gz(提交时间取 UTC,形如 20260930T090727Z),CI 起步所用版本的地址与 SHA-256 见 .github/workflows/main.yml 的 YY_NATIVE_TOOLCHAIN_URL、YY_NATIVE_TOOLCHAIN_SHA256。仓库级构建目标写在 应用/豫构/仓库目标。豫,运行 ./豫构。林檎。豫行 目标 --列出 可列出全部目标。

也可以从豫行工具链包(yuyan-yuxing-toolchain.tar.gz,提案 00021)起步:各平台下载同一个包,里面有两架构的豫构豫行、macOS、Linux 与 Windows x86-64 的豫行启动器和执行器汇编树码。用本机的启动器运行豫构豫行,直出本机原生豫构,再原生自举。Windows x86-64 上用 豫行启动器兼。林檎。豫行 豫构兼。豫行 参数… 运行豫构,或用 豫行启动器兼。林檎。豫行 --合成 豫构兼。豫行 豫构。林檎。豫行 合成单文件后直接运行(Windows 上直出原生豫构再原生自举留待后续版本)。下例是 macOS Apple 芯片;Linux x86-64 换成 豫行启动器兼。林纳。豫行、豫构兼。豫行 与 --目标系统 林纳 --目标架构 兼容六十四,Linux arm64 换成 豫行启动器臂。林纳。豫行、豫构臂。豫行 与 --目标系统 林纳 --目标架构 臂六十四:

curl --fail --location \
  https://github.com/yuyan-lang/yuyan/releases/download/continuous-binaries/yuyan-yuxing-toolchain.tar.gz \
  --output 豫行工具链.tar.gz
tar -xzf 豫行工具链.tar.gz
./豫行启动器臂。林檎。豫行 豫构臂。豫行 构建 豫构 --输出 豫构。林檎。豫行 -j 24 -- --目标 本机 --目标系统 林檎 --目标架构 臂六十四 --执行器 执行器。树码
./豫构。林檎。豫行 全部 -j 24

启动器下的豫构把“本机”看作豫言操作系统,所以第一步写明宿主的目标系统与架构,直出的才是 macOS 或 Linux 的原生程序。

Windows 从 Wasm 工具链包起步,需要 Node.js 26 或更新版本:

curl --fail --location \
  https://github.com/yuyan-lang/yuyan/releases/download/continuous-binaries/yuyan-wasm.tar.gz \
  --output yy_wasm工具链.tar.gz
tar -xzf yy_wasm工具链.tar.gz
node 稳定节点宿主/宿主.cjs 豫构稳定.wasm 构建 豫构 --编译器 ./编译器稳定.wasm --输出 豫构.wasm -j 24
node 豫言操作系统/宿主/节点/宿主.cjs 豫构.wasm 全部 -j 24

此后把 ./豫构。林檎。豫行 换成 node 豫言操作系统/宿主/节点/宿主.cjs 豫构.wasm,工具与程序的输出名用 .wasm,同样由它运行。Windows 的原生工具链留待后续版本。

编写并运行程序

上一节完成后已有原生豫构 豫构。林檎。豫行(自带编译器)。新建 示例/你好。包。豫:

「依赖」者「列」【『豫章』】也。
「入口」者『入口』也。

再新建同目录的 示例/入口。豫。可执行程序从入口文件里的入口函数「入口」开始运行:

寻观「豫章」之书。

「入口」乃化「有」为「有」者也。
「入口」者得「无」而
 「书」于『你好,豫言!』
也。

在仓库根目录构建并运行;包名由文件名识别,不再依赖模块搜索路径:

./豫构。林檎。豫行 构建 你好 --输出 你好。林檎。豫行 -j 24
./你好。林檎。豫行
./你好。林檎。豫行 参数一 参数二

只做类型检查可以运行 ./豫构。林檎。豫行 类型检查 你好。包根、直接依赖、多入口和启动自举详见仓库包构建。独立项目使用标准库时,也必须将标准库包纳入发现范围,见包系统。

直接调用编译器时把源文件写在第一个参数:./编译器。林檎。豫行 <源文件。豫> [编译器参数…](编译器。林檎。豫行 与 豫构。林檎。豫行 是同一个程序);日常构建使用豫构。