Releases 页上的每个 release 都发布两套工具链,各自旁边附 SHA-256。它们是两个不同的编译器,不是同一个东西的两种下载, 按有没有 JVM 选一个。
不用 JVM(linux-x86_64):dawnc 是一个静态可执行文件,标准库与 C 运行时都在里面。
它经 C 后端编译,所以拒绝 use java(第 11 章是它唯一跟不了的一章)。
base=https://github.com/dawnop/dawn-lang/releases/latest/download
curl -fsSLO $base/dawnc-linux-x86_64
curl -fsSLO $base/dawnc-linux-x86_64.sha256
sha256sum -c dawnc-linux-x86_64.sha256
chmod +x dawnc-linux-x86_64 && sudo mv dawnc-linux-x86_64 /usr/local/bin/dawnc
用 JVM(JDK 21 或更新,任意平台):dawn-selfhost.jar 自带标准库,单这一个 jar
就是完整的工具链。
base=https://github.com/dawnop/dawn-lang/releases/latest/download
curl -fsSLO $base/dawn-selfhost.jar
curl -fsSLO $base/dawn-selfhost.jar.sha256
sha256sum -c dawn-selfhost.jar.sha256 # macOS:shasum -a 256 -c
下面的命令写作 dawn。用静态二进制时它是 dawnc;用 jar 时它是
java -jar dawn-selfhost.jar。
dawn run hello.dawn # 编译并运行
dawn test hello.dawn # 运行文件里的 test 块
dawn fmt hello.dawn # 就地格式化
从源码构建,前提是有一份检出和 JDK 21:./bin/dawn 就代替 dawn。它首次运行时
下载种子(scripts/seed-release.txt 钉住的那个 release 的 dawn-selfhost.jar,按
scripts/seed-checksums.txt 校验),再用种子编译 selfhost/ 里的编译器。在检出里,
./bin/dawn build hello.dawn --native -o hello 用 GraalVM native-image 打包 JVM 构建,
这和 dawnc 是两条不同的路。
第一个程序。函数默认是纯的;碰 IO(这里是打印)必须在签名标 !io:
pub fn main() -> Unit !io =
println("你好,Dawn")
你好,Dawn
字符串插值写作 ${expr},简单变量与任意表达式一样写(插入的值必须可打印)。
花括号本身是普通字符——不写 $ 就不是插值:
pub fn main() -> Unit !io = {
let name = "Dawn"
let year = 2026
println("${name} 诞生于 ${year}")
}
Dawn 诞生于 2026
另见:spec.md §12.1