子语言
豫言的源文件都以 。豫 结尾,用同一套语法书写。文件名在 。豫 前加上种类段(如 。脚本、。着色器、。底层),文件就属于对应的子语言。后缀决定四件事:文件里能写什么、无体声明由谁提供、编成哪种代码,以及导入时能找到哪些模块。本页按后缀列出全部子语言,每种后缀的完整规则与仓库里的例子见技术文档《文件后缀》。各子语言共同遵守的设计原则,以及它们在一个程序里怎样配合,见技术文档《子语言设计》。
豫言(有垃圾回收)
这一组是高级文件:有垃圾回收,编成 WasmGC 模块。
| 后缀 | 子语言 | 说明 |
|---|---|---|
名。豫 |
豫言 | 普通源文件,一个文件是一个模块;顶层只有定义,值都是数据 |
名。脚本。豫 |
脚本 | 顶层就是程序体,按次序执行;单独构建运行 |
名。测试。豫 |
测试 | 单元测试,顶层就是程序体;全树测试自动发现并运行,构建库时跳过 |
名-编号。豫 |
黄金样例 | 测试数据,顶层就是程序体;同组配一个 名。成功 或 名。失败 标记文件,写明期望的结果 |
名。接口。豫 |
宿主接口 | 只写类型与 乃 签名,由宿主或构建时绑定的适配提供实现;每个声明编成带类型的 Wasm 导入 |
名。应用接口。豫 |
应用接口 | 只写类型与签名,由应用实现;入口定义了同名顶层函数时编成导出 |
名。内建。豫 |
内建声明 | 编译器提供的语言原语,签名按编译器的原语表核对 |
着色语言
着色文件用豫言的标准语法写 GPU 着色程序,详见技术文档《着色语言》。
| 后缀 | 子语言 | 说明 |
|---|---|---|
名。着色器。豫 |
着色语言 | 类型检查后译成 WGSL、MSL 与 PTX;高级代码导入它,得到构建时生成的模块 名。着色生成。豫 |
名。着色器。接口。豫 |
着色内建声明 | 着色目标提供的运算与内建函数 |
底层豫言(无垃圾回收)
文件名带“。底层”的是底层文件:没有垃圾回收,编成标准 Wasm,用于执行器、驱动、张量内核等系统代码。程序的入口是底层文件时,整个程序按底层编译。
| 后缀 | 子语言 | 说明 |
|---|---|---|
名。底层。豫 |
底层豫言 | 底层源文件 |
名。底层。测试。豫 |
底层测试 | 底层单元测试,全树测试照常发现并运行 |
名。底层接口。豫 |
底层接口 | 每个无体声明编成一个 Wasm 导入,导入模块名是文件名去掉后缀 |
名。底层内建。豫 |
底层内建声明 | 底层库的原语表,调用就地编成 Wasm 指令 |
包描述
| 后缀 | 子语言 | 说明 |
|---|---|---|
名。包。豫 |
包描述 | 每个包一份:名称、所有者、版本、简介、说明、类型、依赖等字段,由豫构读取 |
豫汇
豫汇(豫言汇编)是豫言内部与网页汇编(Wasm)一一对应的子语言,也是原生、裸机、诺驿、浏览器、云工各后端共同的执行边界。带垃圾回收的一层叫豫汇,对应 WasmGC;不带垃圾回收的一层叫底层豫汇,对应标准 Wasm。
| 后缀 | 子语言 | 说明 |
|---|---|---|
名.树码 |
豫汇 | 汇编树码:编译器的输出路径以 .树码 结尾时,把豫汇模块写成这种文件;豫言系统可以直接从它生成豫行文件 |
导入
导入路径只写模块名,编译器按导入方的子语言补上后缀,取第一个存在的文件:
| 导入方 | 依次查找 |
|---|---|
| 豫言 | 名。豫、名。接口。豫、名。应用接口。豫、名。内建。豫、名。着色器。豫 |
| 着色语言 | 名。着色器。豫、名。着色器。接口。豫 |
| 底层豫言 | 名。底层。豫、名。底层接口。豫、名。底层内建。豫 |
测试模块按全名导入(末段写 名。测试),供测试与脚本使用。