1. 安装与第一个程序

  • 第一章,共二十章
  • 阅读约 2 分钟

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