Kinglet 编程语言

面向原生软件开发, 以显式边界组织程序。

shape.kl
using io;

enum Shape {
  Circle(float),
  Rect(float, float),
}

float area(Shape s) {
  return s match {
    Shape::Circle(let r) => 3.14 * r * r,
    Shape::Rect(let w, let h) => w * h,
  };
}

int main() {
  Shape c = Shape::Circle(1.0);
  io::out.line(area(c));
  return 0;
}

语言

以静态结构表达四类系统语义。

Kinglet 在语言层面回答四个问题:代码具备哪些能力,资源由谁负责,操作如何失败,所有状态是否得到完整处理。

能力

concept 描述代码所需的操作;具体类型在编译期完成能力检查,并通过单态化生成实现。

所有权

标量、共享值与资源类型遵循不同的传递规则;资源通过转移和显式借用表达生命周期责任。

可失败性

可失败转换产生 T?;?: 提供兜底,后缀 ? 传播失败,try / catch 定义恢复路径。

穷尽性

后缀式 match 可解构 enum、struct 与数组;编译器检查 enum、bool 和 Optional 的状态覆盖。

代码

将失败路径纳入类型与控制流。

可空类型、? 传播和 try / catch 分别描述缺失值、错误传播与恢复路径,使异常行为具备明确的静态结构。

查看语言语法 →
read.kl
using io;

int? parse(string s) {
  return int(s)? * 10;
}

int main() {
  int? a = parse("42") ?: -1;
  io::out.line("a = {}", a);

  int n;
  try {
    n = int("bad")?;
  } catch (let ex: CastError) {
    n = -99;
  }
  io::out.line("n = {}", n);
  return 0;
}

工具链

从源码到原生程序的一体化工具链。

Bootstrap 编译器在单一可执行文件中提供语法解析、语义检查、Kinglet IR、LLVM 代码生成、小型运行时与命令行驱动。

01 · 源码.kl
02 · 检查类型与语义
03 · 中间表示Kinglet IR
04 · 生成原生程序

开始使用

安装 Kinglet 工具链并构建首个程序。

sh
curl -fsSL https://kinglet-lang.org/install.sh | sh