跳到正文豫言

子语言

豫言的源文件都以 。豫 结尾,用同一套语法书写。文件名在 。豫 前加上种类段(如 。脚本、。着色器、。底层),文件就属于对应的子语言。后缀决定四件事:文件里能写什么、无体声明由谁提供、编成哪种代码,以及导入时能找到哪些模块。本页按后缀列出全部子语言,每种后缀的完整规则与仓库里的例子见技术文档《文件后缀》。各子语言共同遵守的设计原则,以及它们在一个程序里怎样配合,见技术文档《子语言设计》。

豫言(有垃圾回收)

这一组是高级文件:有垃圾回收,编成 WasmGC 模块。

后缀 子语言 说明
名。豫 豫言 普通源文件,一个文件是一个模块;顶层只有定义,值都是数据
名。脚本。豫 脚本 顶层就是程序体,按次序执行;单独构建运行
名。测试。豫 测试 单元测试,顶层就是程序体;全树测试自动发现并运行,构建库时跳过
名-编号。豫 黄金样例 测试数据,顶层就是程序体;同组配一个 名。成功 或 名。失败 标记文件,写明期望的结果
名。接口。豫 宿主接口 只写类型与 乃 签名,由宿主或构建时绑定的适配提供实现;每个声明编成带类型的 Wasm 导入
名。应用接口。豫 应用接口 只写类型与签名,由应用实现;入口定义了同名顶层函数时编成导出
名。内建。豫 内建声明 编译器提供的语言原语,签名按编译器的原语表核对

着色语言

着色文件用豫言的标准语法写 GPU 着色程序,详见技术文档《着色语言》。

后缀 子语言 说明
名。着色器。豫 着色语言 类型检查后译成 WGSL、MSL 与 PTX;高级代码导入它,得到构建时生成的模块 名。着色生成。豫
名。着色器。接口。豫 着色内建声明 着色目标提供的运算与内建函数

底层豫言(无垃圾回收)

文件名带“。底层”的是底层文件:没有垃圾回收,编成标准 Wasm,用于执行器、驱动、张量内核等系统代码。程序的入口是底层文件时,整个程序按底层编译。

后缀 子语言 说明
名。底层。豫 底层豫言 底层源文件
名。底层。测试。豫 底层测试 底层单元测试,全树测试照常发现并运行
名。底层接口。豫 底层接口 每个无体声明编成一个 Wasm 导入,导入模块名是文件名去掉后缀
名。底层内建。豫 底层内建声明 底层库的原语表,调用就地编成 Wasm 指令

包描述

后缀 子语言 说明
名。包。豫 包描述 每个包一份:名称、所有者、版本、简介、说明、类型、依赖等字段,由豫构读取

豫汇

豫汇(豫言汇编)是豫言内部与网页汇编(Wasm)一一对应的子语言,也是原生、裸机、诺驿、浏览器、云工各后端共同的执行边界。带垃圾回收的一层叫豫汇,对应 WasmGC;不带垃圾回收的一层叫底层豫汇,对应标准 Wasm。

后缀 子语言 说明
名.树码 豫汇 汇编树码:编译器的输出路径以 .树码 结尾时,把豫汇模块写成这种文件;豫言系统可以直接从它生成豫行文件

导入

导入路径只写模块名,编译器按导入方的子语言补上后缀,取第一个存在的文件:

导入方 依次查找
豫言 名。豫、名。接口。豫、名。应用接口。豫、名。内建。豫、名。着色器。豫
着色语言 名。着色器。豫、名。着色器。接口。豫
底层豫言 名。底层。豫、名。底层接口。豫、名。底层内建。豫

测试模块按全名导入(末段写 名。测试),供测试与脚本使用。